dexbot 1.4.17 → 1.4.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +1 -0
  3. package/analysis/README.md +43 -43
  4. package/analysis/ama_fitting/README.md +8 -8
  5. package/analysis/ama_fitting/package.json +1 -1
  6. package/analysis/bot_fitting/README.md +4 -4
  7. package/analysis/bot_fitting/backtest_ama_sweep.ts +1 -1
  8. package/analysis/bot_usage/discover_bot_accounts.ts +11 -11
  9. package/analysis/tradingview/README.md +4 -4
  10. package/analysis/trend_detection/DYNAMIC_WEIGHT_RESEARCH.md +2 -2
  11. package/analysis/trend_detection/SIGNAL_DOCUMENTATION.md +1 -1
  12. package/analysis/trend_detection/package.json +1 -1
  13. package/claw/README.md +45 -45
  14. package/claw/docs/AI_BOT_LIBRARY_API.md +6 -6
  15. package/claw/examples/short_mpa_bts_strategy.ts +3 -3
  16. package/claw/package.json +21 -21
  17. package/claw/runtimes/openclaw-plugin/openclaw.plugin.json +1 -1
  18. package/claw/runtimes/openclaw-plugin/package.json +1 -1
  19. package/claw/scripts/claw_bridge.ts +2 -2
  20. package/claw/scripts/claw_skill_md.ts +1 -1
  21. package/claw/skills/launcher-ops/references/launcher-workflow.md +5 -5
  22. package/claw/skills/margin-trading/references/honest-asset-list.md +1 -1
  23. package/claw/skills/memu-memory/SKILL.md +3 -3
  24. package/claw/tests/test_claw_mcp_transport.ts +2 -2
  25. package/dist/analysis/ama_fitting/analyze_ama_price_changes.d.ts +3 -0
  26. package/dist/analysis/ama_fitting/analyze_ama_price_changes.d.ts.map +1 -0
  27. package/dist/analysis/ama_fitting/analyze_ama_price_changes.js +148 -0
  28. package/dist/analysis/ama_fitting/analyze_ama_price_changes.js.map +1 -0
  29. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.d.ts +12 -0
  30. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.d.ts.map +1 -0
  31. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.js +389 -0
  32. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.js.map +1 -0
  33. package/dist/analysis/ama_fitting/calibrate_convergence_er.d.ts +3 -0
  34. package/dist/analysis/ama_fitting/calibrate_convergence_er.d.ts.map +1 -0
  35. package/dist/analysis/ama_fitting/calibrate_convergence_er.js +200 -0
  36. package/dist/analysis/ama_fitting/calibrate_convergence_er.js.map +1 -0
  37. package/dist/analysis/ama_fitting/fetch_lp_candles.d.ts +3 -0
  38. package/dist/analysis/ama_fitting/fetch_lp_candles.d.ts.map +1 -0
  39. package/dist/analysis/ama_fitting/fetch_lp_candles.js +213 -0
  40. package/dist/analysis/ama_fitting/fetch_lp_candles.js.map +1 -0
  41. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.d.ts +25 -0
  42. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.d.ts.map +1 -0
  43. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.js +247 -0
  44. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.js.map +1 -0
  45. package/dist/analysis/ama_fitting/optimizer_high_resolution.d.ts +35 -0
  46. package/dist/analysis/ama_fitting/optimizer_high_resolution.d.ts.map +1 -0
  47. package/dist/analysis/ama_fitting/optimizer_high_resolution.js +782 -0
  48. package/dist/analysis/ama_fitting/optimizer_high_resolution.js.map +1 -0
  49. package/dist/analysis/analyze_derivatives.d.ts +86 -0
  50. package/dist/analysis/analyze_derivatives.d.ts.map +1 -0
  51. package/dist/analysis/analyze_derivatives.js +285 -0
  52. package/dist/analysis/analyze_derivatives.js.map +1 -0
  53. package/dist/analysis/analyze_dynamic_weight.d.ts +14 -0
  54. package/dist/analysis/analyze_dynamic_weight.d.ts.map +1 -0
  55. package/dist/analysis/analyze_dynamic_weight.js +197 -0
  56. package/dist/analysis/analyze_dynamic_weight.js.map +1 -0
  57. package/dist/analysis/analyze_kalman.d.ts +13 -0
  58. package/dist/analysis/analyze_kalman.d.ts.map +1 -0
  59. package/dist/analysis/analyze_kalman.js +118 -0
  60. package/dist/analysis/analyze_kalman.js.map +1 -0
  61. package/dist/analysis/analyze_regime.d.ts +20 -0
  62. package/dist/analysis/analyze_regime.d.ts.map +1 -0
  63. package/dist/analysis/analyze_regime.js +139 -0
  64. package/dist/analysis/analyze_regime.js.map +1 -0
  65. package/dist/analysis/analyze_regime_windows.d.ts +19 -0
  66. package/dist/analysis/analyze_regime_windows.d.ts.map +1 -0
  67. package/dist/analysis/analyze_regime_windows.js +414 -0
  68. package/dist/analysis/analyze_regime_windows.js.map +1 -0
  69. package/dist/analysis/analyze_risk_profile.d.ts +3 -0
  70. package/dist/analysis/analyze_risk_profile.d.ts.map +1 -0
  71. package/dist/analysis/analyze_risk_profile.js +186 -0
  72. package/dist/analysis/analyze_risk_profile.js.map +1 -0
  73. package/dist/analysis/analyze_trade_heatmap.d.ts +3 -0
  74. package/dist/analysis/analyze_trade_heatmap.d.ts.map +1 -0
  75. package/dist/analysis/analyze_trade_heatmap.js +358 -0
  76. package/dist/analysis/analyze_trade_heatmap.js.map +1 -0
  77. package/dist/analysis/analyze_volatility.d.ts +22 -0
  78. package/dist/analysis/analyze_volatility.d.ts.map +1 -0
  79. package/dist/analysis/analyze_volatility.js +165 -0
  80. package/dist/analysis/analyze_volatility.js.map +1 -0
  81. package/dist/analysis/bot_fitting/backtest_ama_sweep.d.ts +91 -0
  82. package/dist/analysis/bot_fitting/backtest_ama_sweep.d.ts.map +1 -0
  83. package/dist/analysis/bot_fitting/backtest_ama_sweep.js +792 -0
  84. package/dist/analysis/bot_fitting/backtest_ama_sweep.js.map +1 -0
  85. package/dist/analysis/bot_fitting/backtest_bot_fitting.d.ts +2 -0
  86. package/dist/analysis/bot_fitting/backtest_bot_fitting.d.ts.map +1 -0
  87. package/dist/analysis/bot_fitting/backtest_bot_fitting.js +380 -0
  88. package/dist/analysis/bot_fitting/backtest_bot_fitting.js.map +1 -0
  89. package/dist/analysis/bot_fitting/shared_utils.d.ts +26 -0
  90. package/dist/analysis/bot_fitting/shared_utils.d.ts.map +1 -0
  91. package/dist/analysis/bot_fitting/shared_utils.js +42 -0
  92. package/dist/analysis/bot_fitting/shared_utils.js.map +1 -0
  93. package/dist/analysis/bot_key_utils.d.ts +11 -0
  94. package/dist/analysis/bot_key_utils.d.ts.map +1 -0
  95. package/dist/analysis/bot_key_utils.js +153 -0
  96. package/dist/analysis/bot_key_utils.js.map +1 -0
  97. package/dist/analysis/bot_usage/discover_bot_accounts.d.ts +3 -0
  98. package/dist/analysis/bot_usage/discover_bot_accounts.d.ts.map +1 -0
  99. package/dist/analysis/bot_usage/discover_bot_accounts.js +499 -0
  100. package/dist/analysis/bot_usage/discover_bot_accounts.js.map +1 -0
  101. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts +531 -0
  102. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts.map +1 -0
  103. package/dist/analysis/bot_usage/kibana_bot_queries.js +399 -0
  104. package/dist/analysis/bot_usage/kibana_bot_queries.js.map +1 -0
  105. package/dist/analysis/chart_css.d.ts +17 -0
  106. package/dist/analysis/chart_css.d.ts.map +1 -0
  107. package/dist/analysis/chart_css.js +49 -0
  108. package/dist/analysis/chart_css.js.map +1 -0
  109. package/dist/analysis/chart_ui.d.ts +45 -0
  110. package/dist/analysis/chart_ui.d.ts.map +1 -0
  111. package/dist/analysis/chart_ui.js +97 -0
  112. package/dist/analysis/chart_ui.js.map +1 -0
  113. package/dist/analysis/chart_utils.d.ts +27 -0
  114. package/dist/analysis/chart_utils.d.ts.map +1 -0
  115. package/dist/analysis/chart_utils.js +153 -0
  116. package/dist/analysis/chart_utils.js.map +1 -0
  117. package/dist/analysis/derivative_chart_generator.d.ts +12 -0
  118. package/dist/analysis/derivative_chart_generator.d.ts.map +1 -0
  119. package/dist/analysis/derivative_chart_generator.js +891 -0
  120. package/dist/analysis/derivative_chart_generator.js.map +1 -0
  121. package/dist/analysis/math_utils.d.ts +22 -0
  122. package/dist/analysis/math_utils.d.ts.map +1 -0
  123. package/dist/analysis/math_utils.js +43 -0
  124. package/dist/analysis/math_utils.js.map +1 -0
  125. package/dist/analysis/price_sources.d.ts +40 -0
  126. package/dist/analysis/price_sources.d.ts.map +1 -0
  127. package/dist/analysis/price_sources.js +94 -0
  128. package/dist/analysis/price_sources.js.map +1 -0
  129. package/dist/analysis/resolve_source.d.ts +25 -0
  130. package/dist/analysis/resolve_source.d.ts.map +1 -0
  131. package/dist/analysis/resolve_source.js +69 -0
  132. package/dist/analysis/resolve_source.js.map +1 -0
  133. package/dist/analysis/trade_profitability.d.ts +115 -0
  134. package/dist/analysis/trade_profitability.d.ts.map +1 -0
  135. package/dist/analysis/trade_profitability.js +1240 -0
  136. package/dist/analysis/trade_profitability.js.map +1 -0
  137. package/dist/analysis/tradingview/analyze_tradingview.d.ts +31 -0
  138. package/dist/analysis/tradingview/analyze_tradingview.d.ts.map +1 -0
  139. package/dist/analysis/tradingview/analyze_tradingview.js +146 -0
  140. package/dist/analysis/tradingview/analyze_tradingview.js.map +1 -0
  141. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts +5 -0
  142. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts.map +1 -0
  143. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js +1714 -0
  144. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js.map +1 -0
  145. package/dist/analysis/trend_detection/derivative_analyzer.d.ts +247 -0
  146. package/dist/analysis/trend_detection/derivative_analyzer.d.ts.map +1 -0
  147. package/dist/analysis/trend_detection/derivative_analyzer.js +901 -0
  148. package/dist/analysis/trend_detection/derivative_analyzer.js.map +1 -0
  149. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.d.ts +3 -0
  150. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.d.ts.map +1 -0
  151. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.js +1361 -0
  152. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.js.map +1 -0
  153. package/dist/analysis/trend_detection/hurst_analyzer.d.ts +6 -0
  154. package/dist/analysis/trend_detection/hurst_analyzer.d.ts.map +1 -0
  155. package/dist/analysis/trend_detection/hurst_analyzer.js +7 -0
  156. package/dist/analysis/trend_detection/hurst_analyzer.js.map +1 -0
  157. package/dist/analysis/trend_detection/kalman_chart_generator.d.ts +3 -0
  158. package/dist/analysis/trend_detection/kalman_chart_generator.d.ts.map +1 -0
  159. package/dist/analysis/trend_detection/kalman_chart_generator.js +360 -0
  160. package/dist/analysis/trend_detection/kalman_chart_generator.js.map +1 -0
  161. package/dist/analysis/trend_detection/kalman_trend_analyzer.d.ts +8 -0
  162. package/dist/analysis/trend_detection/kalman_trend_analyzer.d.ts.map +1 -0
  163. package/dist/analysis/trend_detection/kalman_trend_analyzer.js +8 -0
  164. package/dist/analysis/trend_detection/kalman_trend_analyzer.js.map +1 -0
  165. package/dist/analysis/trend_detection/kalman_velocity_smoothing.d.ts +6 -0
  166. package/dist/analysis/trend_detection/kalman_velocity_smoothing.d.ts.map +1 -0
  167. package/dist/analysis/trend_detection/kalman_velocity_smoothing.js +7 -0
  168. package/dist/analysis/trend_detection/kalman_velocity_smoothing.js.map +1 -0
  169. package/dist/analysis/trend_detection/permutation_entropy_analyzer.d.ts +6 -0
  170. package/dist/analysis/trend_detection/permutation_entropy_analyzer.d.ts.map +1 -0
  171. package/dist/analysis/trend_detection/permutation_entropy_analyzer.js +7 -0
  172. package/dist/analysis/trend_detection/permutation_entropy_analyzer.js.map +1 -0
  173. package/dist/analysis/trend_detection/regime_chart_generator.d.ts +3 -0
  174. package/dist/analysis/trend_detection/regime_chart_generator.d.ts.map +1 -0
  175. package/dist/analysis/trend_detection/regime_chart_generator.js +310 -0
  176. package/dist/analysis/trend_detection/regime_chart_generator.js.map +1 -0
  177. package/dist/analysis/trend_detection/tests/test_kalman_trend.d.ts +2 -0
  178. package/dist/analysis/trend_detection/tests/test_kalman_trend.d.ts.map +1 -0
  179. package/dist/analysis/trend_detection/tests/test_kalman_trend.js +128 -0
  180. package/dist/analysis/trend_detection/tests/test_kalman_trend.js.map +1 -0
  181. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.d.ts +2 -0
  182. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.d.ts.map +1 -0
  183. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.js +37 -0
  184. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.js.map +1 -0
  185. package/dist/analysis/trend_detection/volatility_chart_generator.d.ts +3 -0
  186. package/dist/analysis/trend_detection/volatility_chart_generator.d.ts.map +1 -0
  187. package/dist/analysis/trend_detection/volatility_chart_generator.js +646 -0
  188. package/dist/analysis/trend_detection/volatility_chart_generator.js.map +1 -0
  189. package/dist/bot.js +1 -1
  190. package/dist/bot.js.map +1 -1
  191. package/dist/market_adapter/ama_signal_runner.js +1 -1
  192. package/dist/market_adapter/ama_signal_runner.js.map +1 -1
  193. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js +1 -1
  194. package/dist/modules/account_bots.d.ts +1 -0
  195. package/dist/modules/account_bots.d.ts.map +1 -1
  196. package/dist/modules/account_bots.js +27 -5
  197. package/dist/modules/account_bots.js.map +1 -1
  198. package/dist/modules/constants.d.ts +1 -0
  199. package/dist/modules/constants.d.ts.map +1 -1
  200. package/dist/modules/constants.js +12 -3
  201. package/dist/modules/constants.js.map +1 -1
  202. package/dist/modules/dexbot_class.d.ts +22 -0
  203. package/dist/modules/dexbot_class.d.ts.map +1 -1
  204. package/dist/modules/dexbot_class.js +27 -1
  205. package/dist/modules/dexbot_class.js.map +1 -1
  206. package/dist/modules/dexbot_cow_runtime.d.ts +48 -1
  207. package/dist/modules/dexbot_cow_runtime.d.ts.map +1 -1
  208. package/dist/modules/dexbot_cow_runtime.js +168 -4
  209. package/dist/modules/dexbot_cow_runtime.js.map +1 -1
  210. package/dist/modules/order/grid_reconcile_internal.d.ts.map +1 -1
  211. package/dist/modules/order/grid_reconcile_internal.js +6 -27
  212. package/dist/modules/order/grid_reconcile_internal.js.map +1 -1
  213. package/dist/modules/order/strategy.d.ts.map +1 -1
  214. package/dist/modules/order/strategy.js +6 -15
  215. package/dist/modules/order/strategy.js.map +1 -1
  216. package/dist/modules/order/utils/math.d.ts +29 -1
  217. package/dist/modules/order/utils/math.d.ts.map +1 -1
  218. package/dist/modules/order/utils/math.js +46 -1
  219. package/dist/modules/order/utils/math.js.map +1 -1
  220. package/dist/modules/order/utils/system.d.ts +2 -0
  221. package/dist/modules/order/utils/system.d.ts.map +1 -1
  222. package/dist/modules/order/utils/system.js +30 -2
  223. package/dist/modules/order/utils/system.js.map +1 -1
  224. package/dist/modules/runtime_settings.d.ts +1 -0
  225. package/dist/modules/runtime_settings.d.ts.map +1 -1
  226. package/dist/modules/runtime_settings.js +13 -2
  227. package/dist/modules/runtime_settings.js.map +1 -1
  228. package/dist/scripts/generate_lp_chart.js +1 -1
  229. package/dist/scripts/test-credit-renewal.js +1 -1
  230. package/docs/DEXBOT_COMPARISON.md +3 -3
  231. package/docs/EVOLUTION.md +26 -95
  232. package/docs/FUND_MOVEMENT_AND_ACCOUNTING.md +1 -1
  233. package/docs/GRID_RECALCULATION.md +2 -2
  234. package/docs/LIFECYCLE.md +207 -0
  235. package/docs/README.md +9 -1
  236. package/docs/developer_guide.md +4 -3
  237. package/market_adapter/README.md +23 -23
  238. package/package.json +18 -21
  239. package/scripts/README.md +12 -12
  240. package/scripts/bots +5 -7
  241. package/scripts/clear-market-adapter.sh +1 -1
  242. package/scripts/dexbot +5 -7
  243. package/scripts/keys +5 -7
  244. package/scripts/pm2 +5 -7
  245. package/scripts/unlock +5 -7
  246. package/scripts/update.js +6 -7
  247. package/scripts/repo-stats.html +0 -480
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_risk_profile.js","sourceRoot":"","sources":["../../analysis/analyze_risk_profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=analyze_trade_heatmap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_trade_heatmap.d.ts","sourceRoot":"","sources":["../../analysis/analyze_trade_heatmap.ts"],"names":[],"mappings":""}
@@ -0,0 +1,358 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TRADE HEATMAP ANALYZER
4
+ *
5
+ * Generates an HTML heatmap showing where trade volume concentrates relative
6
+ * to AMA deviation. Produces a 2D grid (time slices × deviation buckets) and
7
+ * a summed volume histogram with threshold annotations.
8
+ *
9
+ * Usage:
10
+ * tsx analysis/analyze_trade_heatmap.ts --source market_adapter --bot-key <key> [options]
11
+ * tsx analysis/analyze_trade_heatmap.ts --file <path> [options]
12
+ *
13
+ * Output:
14
+ * Self-contained HTML file with inline CSS (no JS dependencies).
15
+ */
16
+ import path from 'node:path';
17
+ import { calculateAMA } from '../market_adapter/core/strategies/ama.js';
18
+ import { MARKET_ADAPTER } from '../modules/constants.js';
19
+ import { calcStdDev, getCandleClose } from './math_utils.js';
20
+ import { writeChartFile } from './chart_utils.js';
21
+ import { resolveSource, listAvailableBots } from './resolve_source.js';
22
+ 'use strict';
23
+ function parseArgs() {
24
+ const args = process.argv.slice(2);
25
+ const config = {
26
+ source: { type: 'market_adapter', config: { botKey: '' } },
27
+ ama: 'AMA3',
28
+ output: 'analysis/charts/trade_heatmap.html',
29
+ buckets: null,
30
+ maxNeg: null,
31
+ maxPos: null,
32
+ warmup: null,
33
+ binSize: 5,
34
+ sliceMonths: 12,
35
+ thresholds: [1, 2, 3, 5, 10, 20],
36
+ quiet: false,
37
+ listBots: false,
38
+ };
39
+ for (let i = 0; i < args.length; i++) {
40
+ const arg = args[i];
41
+ if (arg === '--source')
42
+ config.source.type = args[++i];
43
+ else if (arg === '--bot-key')
44
+ config.source.config.botKey = args[++i];
45
+ else if (arg === '--file') {
46
+ config.source.config.filePath = args[++i];
47
+ config.source.type = 'json';
48
+ }
49
+ else if (arg === '--ama')
50
+ config.ama = args[++i];
51
+ else if (arg === '--output')
52
+ config.output = args[++i];
53
+ else if (arg === '--buckets')
54
+ config.buckets = parseInt(args[++i], 10);
55
+ else if (arg === '--max-neg')
56
+ config.maxNeg = parseFloat(args[++i]);
57
+ else if (arg === '--max-pos')
58
+ config.maxPos = parseFloat(args[++i]);
59
+ else if (arg === '--warmup')
60
+ config.warmup = parseInt(args[++i], 10);
61
+ else if (arg === '--bin-size')
62
+ config.binSize = parseFloat(args[++i]);
63
+ else if (arg === '--slice-months')
64
+ config.sliceMonths = parseInt(args[++i], 10);
65
+ else if (arg === '--thresholds')
66
+ config.thresholds = args[++i].split(',').map(Number);
67
+ else if (arg === '--list-bots')
68
+ config.listBots = true;
69
+ else if (arg === '--quiet')
70
+ config.quiet = true;
71
+ }
72
+ return config;
73
+ }
74
+ async function main() {
75
+ try {
76
+ const cfg = parseArgs();
77
+ if (cfg.listBots) {
78
+ listAvailableBots();
79
+ return;
80
+ }
81
+ const { source } = resolveSource({ ...cfg.source.config, type: cfg.source.type }, { quiet: cfg.quiet });
82
+ if (!cfg.quiet)
83
+ console.log(`[TradeHeatmap] Loading candles from ${source.name}...`);
84
+ const candles = await source.fetchCandles();
85
+ if (!Array.isArray(candles) || candles.length === 0) {
86
+ throw new Error('No candles returned from source');
87
+ }
88
+ const amaCfg = MARKET_ADAPTER.AMAS[cfg.ama];
89
+ if (!amaCfg) {
90
+ throw new Error(`Unknown AMA preset: ${cfg.ama}. Choose: ${Object.keys(MARKET_ADAPTER.AMAS).join(', ')}`);
91
+ }
92
+ const closes = candles.map(c => getCandleClose(c) ?? Number(c?.close ?? c?.[4] ?? 0));
93
+ const volumes = candles.map(c => Number(c?.volume ?? c?.[5] ?? 0) || 0);
94
+ const timestamps = candles.map(c => Number(c?.timestamp ?? c?.[0] ?? 0));
95
+ if (cfg.warmup === null) {
96
+ cfg.warmup = Math.ceil(amaCfg.erPeriod);
97
+ }
98
+ if (!cfg.quiet)
99
+ console.log(`[TradeHeatmap] Computing ${cfg.ama} on ${closes.length} candles (warmup=${cfg.warmup})...`);
100
+ const amaValues = calculateAMA(closes, amaCfg);
101
+ const records = [];
102
+ for (let i = cfg.warmup; i < closes.length; i++) {
103
+ const ama = amaValues[i];
104
+ if (!Number.isFinite(ama) || ama === 0)
105
+ continue;
106
+ const devPct = ((closes[i] - ama) / ama) * 100;
107
+ const vol = volumes[i];
108
+ if (vol <= 0)
109
+ continue;
110
+ records.push({ devPct, vol, ts: timestamps[i] });
111
+ }
112
+ if (records.length === 0) {
113
+ throw new Error('No valid records after filtering');
114
+ }
115
+ if (!cfg.quiet)
116
+ console.log(`[TradeHeatmap] ${records.length} volume-bearing candles after warmup`);
117
+ const devs = records.map(r => r.devPct);
118
+ const vols = records.map(r => r.vol);
119
+ const totalVol = vols.reduce((a, b) => a + b, 0);
120
+ const meanDev = devs.reduce((a, b) => a + b, 0) / devs.length;
121
+ const stdDev = calcStdDev(devs);
122
+ const sortedDevs = devs.slice().sort((a, b) => a - b);
123
+ const medianDev = sortedDevs[Math.floor(sortedDevs.length / 2)];
124
+ let weightedSum = 0;
125
+ for (let i = 0; i < devs.length; i++)
126
+ weightedSum += devs[i] * vols[i];
127
+ const volWeightedMeanDev = weightedSum / totalVol;
128
+ const binSize = cfg.binSize;
129
+ let leftBins, rightBins;
130
+ if (cfg.buckets !== null) {
131
+ const half = Math.floor(cfg.buckets / 2);
132
+ leftBins = half;
133
+ rightBins = half;
134
+ }
135
+ else {
136
+ leftBins = Math.ceil((cfg.maxNeg !== null ? cfg.maxNeg : binSize * 10) / binSize);
137
+ rightBins = Math.ceil((cfg.maxPos !== null ? cfg.maxPos : binSize * 10) / binSize);
138
+ }
139
+ const maxNegDev = leftBins * binSize;
140
+ const maxPosDev = rightBins * binSize;
141
+ const binLabels = [];
142
+ for (let i = -leftBins; i <= rightBins; i++) {
143
+ binLabels.push((i * binSize).toFixed(1));
144
+ }
145
+ const nBins = binLabels.length;
146
+ const binKey = (dev) => {
147
+ const idx = Math.round(dev / binSize) + leftBins;
148
+ return Math.max(0, Math.min(nBins - 1, idx));
149
+ };
150
+ const minTs = timestamps[cfg.warmup];
151
+ const maxTs = timestamps[timestamps.length - 1];
152
+ const minDate = new Date(minTs);
153
+ const maxDate = new Date(maxTs);
154
+ const sliceMonths = cfg.sliceMonths;
155
+ const slices = [];
156
+ let sliceStart = new Date(minDate.getFullYear(), minDate.getMonth(), 1);
157
+ while (sliceStart <= maxDate) {
158
+ const sliceEnd = new Date(sliceStart);
159
+ sliceEnd.setMonth(sliceEnd.getMonth() + sliceMonths);
160
+ slices.push({
161
+ label: `${sliceStart.getFullYear()}-${String(sliceStart.getMonth() + 1).padStart(2, '0')}`,
162
+ start: sliceStart.getTime(),
163
+ end: sliceEnd.getTime(),
164
+ });
165
+ sliceStart = sliceEnd;
166
+ }
167
+ const sliceBuckets = slices.map(() => new Array(nBins).fill(0));
168
+ const sliceTotals = new Array(slices.length).fill(0);
169
+ for (const r of records) {
170
+ const si = slices.findIndex(s => r.ts >= s.start && r.ts < s.end);
171
+ if (si === -1)
172
+ continue;
173
+ const bi = binKey(r.devPct);
174
+ sliceBuckets[si][bi] += r.vol;
175
+ sliceTotals[si] += r.vol;
176
+ }
177
+ while (slices.length > 0 && sliceTotals[sliceTotals.length - 1] === 0) {
178
+ slices.pop();
179
+ sliceBuckets.pop();
180
+ sliceTotals.pop();
181
+ }
182
+ const totalBins = new Array(nBins).fill(0);
183
+ for (const r of records) {
184
+ totalBins[binKey(r.devPct)] += r.vol;
185
+ }
186
+ const maxBinVol = Math.max(...totalBins);
187
+ const pctWithin = cfg.thresholds.map(t => {
188
+ const volIn = records.filter(r => Math.abs(r.devPct) <= t).reduce((s, r) => s + r.vol, 0);
189
+ return (volIn / totalVol * 100).toFixed(2);
190
+ });
191
+ const peakBinIdx = totalBins.indexOf(maxBinVol);
192
+ const peakDev = binLabels[peakBinIdx];
193
+ const allCellPcts = [];
194
+ for (let si = 0; si < slices.length; si++) {
195
+ for (let bi = 0; bi < nBins; bi++) {
196
+ if (sliceTotals[si] > 0) {
197
+ allCellPcts.push((sliceBuckets[si][bi] / sliceTotals[si]) * 100);
198
+ }
199
+ }
200
+ }
201
+ allCellPcts.sort((a, b) => a - b);
202
+ const colorCap = allCellPcts.length > 0
203
+ ? allCellPcts[Math.floor(allCellPcts.length * 0.95)]
204
+ : 30;
205
+ function heatColor(pct) {
206
+ if (pct <= 0)
207
+ return '#0d1117';
208
+ const n = Math.min(pct / colorCap, 1);
209
+ const r = Math.round(13 + n * (255 - 13));
210
+ const g = Math.round(17 + n * (160 - 17));
211
+ const b = Math.round(23 + n * (70 - 23));
212
+ return `rgb(${r},${g},${b})`;
213
+ }
214
+ function histColor(pct, maxPct) {
215
+ const n = maxPct > 0 ? pct / maxPct : 0;
216
+ const r = Math.round(56 + n * (255 - 56));
217
+ const g = Math.round(178 + n * (160 - 178));
218
+ const b = Math.round(73 + n * (70 - 73));
219
+ return `rgb(${r},${g},${b})`;
220
+ }
221
+ const heatRows = slices.map((sl, si) => {
222
+ const rowPcts = sliceBuckets[si].map(v => sliceTotals[si] > 0 ? (v / sliceTotals[si]) * 100 : 0);
223
+ const cells = rowPcts.map((p, bi) => {
224
+ const pctStr = p > 0 ? p.toFixed(1) : '';
225
+ return `<td class="hm-cell" style="background:${heatColor(p)}" title="dev=${binLabels[bi]}% vol=${(sliceBuckets[si][bi]).toFixed(2)} (${p.toFixed(1)}% of ${sl.label})">${pctStr}</td>`;
226
+ }).join('');
227
+ return `<tr><td class="yl">${sl.label}</td>${cells}</tr>`;
228
+ }).join('\n');
229
+ const maxBarPct = Math.max(...totalBins);
230
+ const barRows = totalBins.map((v, i) => {
231
+ const barPct = maxBarPct > 0 ? (v / maxBarPct) * 100 : 0;
232
+ const color = histColor(v, maxBarPct);
233
+ const barH = Math.max(barPct * 0.7, 0.5);
234
+ return `<div class="bar" style="height:${barH}px;background:${color}" title="Deviation: ${binLabels[i]}% Volume: ${v.toFixed(2)}"></div>`;
235
+ }).join('');
236
+ const xLabelInterval = Math.max(1, Math.floor(nBins / 11));
237
+ const xLabelsHtml = binLabels.map((l, i) => {
238
+ if (i === 0 || i === nBins - 1 || i % xLabelInterval === 0) {
239
+ return `<span>${l}%</span>`;
240
+ }
241
+ return '<span></span>';
242
+ }).join('');
243
+ const threshHtml = cfg.thresholds.map(t => {
244
+ const pct = ((leftBins + t / binSize) / nBins) * 100;
245
+ return `<div class="thresh-line" style="left:${Math.min(Math.max(pct, 0), 100)}%"><span class="thresh-label">±${t}%</span></div>`;
246
+ }).join('');
247
+ const sourceLabel = cfg.source.config.botKey || path.basename(cfg.source.config.filePath || 'data');
248
+ const html = `<!DOCTYPE html>
249
+ <html lang="en">
250
+ <head>
251
+ <meta charset="UTF-8">
252
+ <title>Trade Heatmap — ${cfg.ama} Deviation</title>
253
+ <style>
254
+ * { box-sizing: border-box; }
255
+ body { background: #0b0e14; color: #d1d5db; font-family: 'Segoe UI', sans-serif; margin: 0; padding: 24px; }
256
+ h1 { color: #fff; font-size: 18px; margin: 0 0 2px 0; }
257
+ .subtitle { color: #8b949e; font-size: 12px; margin: 0 0 16px 0; }
258
+ .stats-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; margin-bottom: 24px; }
259
+ .stat-card { background: #161b22; border: 1px solid #30363d; border-radius: 6px; padding: 10px 12px; }
260
+ .stat-card .lbl { color: #8b949e; font-size: 9px; text-transform: uppercase; letter-spacing: 0.8px; }
261
+ .stat-card .val { color: #f0f6fc; font-size: 16px; font-weight: bold; margin-top: 2px; }
262
+ .stat-card .val.green { color: #3fb950; }
263
+ .stat-card .val.orange { color: #f08c00; }
264
+ .stat-card .val.blue { color: #58a6ff; }
265
+ .hm-wrap { overflow-x: auto; margin-bottom: 28px; }
266
+ table.heatmap { border-collapse: collapse; font-size: 10px; }
267
+ table.heatmap th { color: #8b949e; font-size: 9px; font-weight: normal; padding: 2px 0; min-width: 32px; text-align: center; }
268
+ table.heatmap td.hm-cell { width: 30px; height: 22px; text-align: center; font-size: 8px; color: rgba(255,255,255,0.6); cursor: default; border: 1px solid #161b22; border-radius: 1px; }
269
+ table.heatmap td.yl { color: #8b949e; font-size: 10px; text-align: right; padding-right: 8px; white-space: nowrap; }
270
+ .legend-row { display: flex; align-items: center; gap: 12px; font-size: 10px; color: #8b949e; margin-bottom: 20px; }
271
+ .legend-bar { width: 160px; height: 8px; border-radius: 3px; background: linear-gradient(to right, #0d1117, #1f6f2f, #3fb950, #ffa03e, #f85149); }
272
+ .section-title { color: #8b949e; font-size: 10px; text-transform: uppercase; letter-spacing: 1px; margin: 0 0 10px 0; border-bottom: 1px solid #30363d; padding-bottom: 4px; }
273
+ .hist-wrap { position: relative; margin-bottom: 36px; }
274
+ .hist-bar-container { display: flex; align-items: flex-end; gap: 1px; height: 180px; }
275
+ .hist-bar-container .bar { flex: 1; min-height: 1px; border-radius: 1px; cursor: pointer; transition: opacity 0.15s; }
276
+ .hist-bar-container .bar:hover { opacity: 0.8; }
277
+ .hist-overlay { position: absolute; top: 0; left: 0; right: 0; height: 180px; pointer-events: none; }
278
+ .thresh-line { position: absolute; top: 0; bottom: 0; width: 0; border-left: 1px dashed rgba(248,81,73,0.5); }
279
+ .thresh-label { position: absolute; top: 2px; left: 50%; transform: translateX(-50%); font-size: 8px; color: #f85149; white-space: nowrap; background: rgba(11,14,20,0.8); padding: 0 3px; line-height: 12px; }
280
+ .x-labels { display: flex; font-size: 9px; color: #8b949e; margin-top: 4px; }
281
+ .x-labels span { flex: 1; text-align: center; white-space: nowrap; }
282
+ .pct-table { font-size: 11px; color: #8b949e; margin-bottom: 24px; }
283
+ .pct-table td { padding: 3px 12px 3px 0; }
284
+ .pct-table td:first-child { color: #d1d5db; }
285
+ .pct-table .val-col { text-align: right; font-weight: bold; color: #3fb950; font-family: monospace; }
286
+ .bottom { display: flex; gap: 32px; align-items: flex-start; flex-wrap: wrap; margin-top: 8px; }
287
+ .params-table { font-size: 11px; color: #8b949e; }
288
+ .params-table td { padding: 2px 16px 2px 0; }
289
+ .params-table td:first-child { color: #555; }
290
+ </style>
291
+ </head>
292
+ <body>
293
+ <h1>Trade Heatmap — ${cfg.ama} Deviation</h1>
294
+ <p class="subtitle">
295
+ ${closes.length} candles &middot; ${records.length} with volume &middot;
296
+ ${(totalVol).toFixed(1)} total volume units &middot;
297
+ ${binSize}% bins &middot;
298
+ ${slices.length} time slices &middot;
299
+ ${sourceLabel}
300
+ </p>
301
+ <div class="stats-grid">
302
+ <div class="stat-card"><div class="lbl">Mean Deviation</div><div class="val">${meanDev.toFixed(2)}%</div></div>
303
+ <div class="stat-card"><div class="lbl">Median Deviation</div><div class="val">${medianDev.toFixed(2)}%</div></div>
304
+ <div class="stat-card"><div class="lbl">Std Deviation</div><div class="val blue">${stdDev.toFixed(2)}%</div></div>
305
+ <div class="stat-card"><div class="lbl">Vol-Weighted Mean</div><div class="val">${volWeightedMeanDev.toFixed(2)}%</div></div>
306
+ <div class="stat-card"><div class="lbl">Peak Bucket</div><div class="val green">${peakDev}%</div></div>
307
+ <div class="stat-card"><div class="lbl">Max |Dev|</div><div class="val orange">${Math.max(...devs.map(Math.abs)).toFixed(2)}%</div></div>
308
+ </div>
309
+ <div class="section-title">Volume Distribution by Time Slice &mdash; % of slice volume per deviation bucket</div>
310
+ <div class="hm-wrap">
311
+ <table class="heatmap">
312
+ <thead><tr><th></th>${binLabels.map(l => `<th>${l}</th>`).join('')}</tr></thead>
313
+ <tbody>${heatRows}</tbody>
314
+ </table>
315
+ </div>
316
+ <div class="legend-row">
317
+ <span>0%</span>
318
+ <div class="legend-bar"></div>
319
+ <span>≥${colorCap.toFixed(0)}% of slice</span>
320
+ </div>
321
+ <div class="section-title">Summed Volume Distribution &mdash; total volume per deviation bucket</div>
322
+ <div class="hist-wrap">
323
+ <div class="hist-bar-container">
324
+ ${cfg.thresholds.length > 0 ? `<div class="hist-overlay">${threshHtml}</div>` : ''}
325
+ ${barRows}
326
+ </div>
327
+ <div class="x-labels">${xLabelsHtml}</div>
328
+ </div>
329
+ <div class="section-title">Volume Concentration</div>
330
+ <table class="pct-table">
331
+ ${cfg.thresholds.map((t, i) => `<tr><td>Within ±${t}% of AMA</td><td class="val-col">${pctWithin[i]}%</td></tr>`).join('')}
332
+ </table>
333
+ <div class="bottom">
334
+ <table class="params-table">
335
+ <tr><td>AMA Preset</td><td>${cfg.ama}</td></tr>
336
+ <tr><td>ER Period</td><td>${amaCfg.erPeriod}</td></tr>
337
+ <tr><td>Fast SC (period)</td><td>${amaCfg.fastPeriod}</td></tr>
338
+ <tr><td>Slow SC (period)</td><td>${amaCfg.slowPeriod}</td></tr>
339
+ <tr><td>Bin size</td><td>${binSize}%</td></tr>
340
+ <tr><td>Total bins</td><td>${nBins} (${(-maxNegDev).toFixed(0)}% to +${maxPosDev.toFixed(0)}%)</td></tr>
341
+ <tr><td>Warmup bars skipped</td><td>${cfg.warmup}</td></tr>
342
+ <tr><td>Slice months</td><td>${cfg.sliceMonths}</td></tr>
343
+ <tr><td>Data range</td><td>${minDate.toISOString().split('T')[0]} &ndash; ${maxDate.toISOString().split('T')[0]}</td></tr>
344
+ </table>
345
+ </div>
346
+ </body>
347
+ </html>`;
348
+ writeChartFile(cfg.output, html);
349
+ if (!cfg.quiet)
350
+ console.log(`[TradeHeatmap] ✓ Heatmap saved to ${cfg.output}`);
351
+ }
352
+ catch (err) {
353
+ console.error(`[TradeHeatmap] Error: ${err?.message ?? err}`);
354
+ process.exit(1);
355
+ }
356
+ }
357
+ main().catch((err) => { console.error(err); process.exit(1); });
358
+ //# sourceMappingURL=analyze_trade_heatmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_trade_heatmap.js","sourceRoot":"","sources":["../../analysis/analyze_trade_heatmap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VOLATILITY / SYMMETRIC SHIFT RESEARCH TOOL
4
+ *
5
+ * Computes the symmetric volatility shift used by the market adapter.
6
+ *
7
+ * Signal path:
8
+ * ATR(period, default 14) -> weightVariance = atr / amaPrice
9
+ * rawSymmetricDelta = -pow(weightVariance, volatilityExponent) * volatilityScaleX
10
+ * clampedRawDelta = clamp(rawSymmetricDelta, -DYNAMIC_WEIGHT_SYMMETRIC_SHIFT_CLAMP, 0)
11
+ * symmetricDelta = |clampedRawDelta| < volatilityThreshold ? 0 : clampedRawDelta
12
+ *
13
+ * The live adapter adds this penalty to both sides after the trend term is built.
14
+ * This runner intentionally omits the directional trend branch so the volatility
15
+ * effect can be researched in isolation.
16
+ *
17
+ * Usage:
18
+ * tsx analysis/analyze_volatility.ts \
19
+ * --file market_adapter/data/lp/<path>/<to>/<lp-candles>.json
20
+ */
21
+ export {};
22
+ //# sourceMappingURL=analyze_volatility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_volatility.d.ts","sourceRoot":"","sources":["../../analysis/analyze_volatility.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;GAkBG"}
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VOLATILITY / SYMMETRIC SHIFT RESEARCH TOOL
4
+ *
5
+ * Computes the symmetric volatility shift used by the market adapter.
6
+ *
7
+ * Signal path:
8
+ * ATR(period, default 14) -> weightVariance = atr / amaPrice
9
+ * rawSymmetricDelta = -pow(weightVariance, volatilityExponent) * volatilityScaleX
10
+ * clampedRawDelta = clamp(rawSymmetricDelta, -DYNAMIC_WEIGHT_SYMMETRIC_SHIFT_CLAMP, 0)
11
+ * symmetricDelta = |clampedRawDelta| < volatilityThreshold ? 0 : clampedRawDelta
12
+ *
13
+ * The live adapter adds this penalty to both sides after the trend term is built.
14
+ * This runner intentionally omits the directional trend branch so the volatility
15
+ * effect can be researched in isolation.
16
+ *
17
+ * Usage:
18
+ * tsx analysis/analyze_volatility.ts \
19
+ * --file market_adapter/data/lp/<path>/<to>/<lp-candles>.json
20
+ */
21
+ import path from 'node:path';
22
+ import { fileURLToPath } from 'node:url';
23
+ import { calculateAMA } from '../market_adapter/core/strategies/ama.js';
24
+ import { computeATRSeries } from '../market_adapter/core/strategies/atr/calculator.js';
25
+ import { normalizeAtrPeriod } from '../market_adapter/core/config_normalizers.js';
26
+ import { computeVolatilityShift } from '../market_adapter/core/strategies/volatility_shift.js';
27
+ import { generateHTML } from './trend_detection/volatility_chart_generator.js';
28
+ import { MARKET_ADAPTER } from '../modules/constants.js';
29
+ import { getCandleClose } from './math_utils.js';
30
+ import { writeChartFile } from './chart_utils.js';
31
+ import { resolveSource, listAvailableBots } from './resolve_source.js';
32
+ 'use strict';
33
+ const DEFAULT_ATR_PERIOD = MARKET_ADAPTER.DYNAMIC_WEIGHT_ATR_PERIOD_DEFAULT;
34
+ const MIN_WEIGHT = MARKET_ADAPTER.DYNAMIC_WEIGHT_MIN_WEIGHT;
35
+ const MAX_WEIGHT = MARKET_ADAPTER.DYNAMIC_WEIGHT_MAX_WEIGHT;
36
+ const DEFAULT_THRESHOLD = MARKET_ADAPTER.DYNAMIC_WEIGHT_SYMMETRIC_SHIFT_THRESHOLD;
37
+ const DEFAULT_CLAMP = MARKET_ADAPTER.DYNAMIC_WEIGHT_SYMMETRIC_SHIFT_CLAMP;
38
+ const DEFAULT_CHART_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), 'charts');
39
+ const DEFAULT_CHART_FILE = path.join(DEFAULT_CHART_DIR, 'volatility_chart.html');
40
+ function computeATRSeriesNormalized(candles, period = DEFAULT_ATR_PERIOD) {
41
+ return computeATRSeries(candles, normalizeAtrPeriod(period));
42
+ }
43
+ function parseArgs() {
44
+ const args = process.argv.slice(2);
45
+ const config = {
46
+ source: { type: 'market_adapter', config: { botKey: '' } },
47
+ chartFile: DEFAULT_CHART_FILE,
48
+ threshold: DEFAULT_THRESHOLD,
49
+ atrPeriod: DEFAULT_ATR_PERIOD,
50
+ exponent: MARKET_ADAPTER.DYNAMIC_WEIGHT_VOLATILITY_EXPONENT,
51
+ scaleX: MARKET_ADAPTER.DYNAMIC_WEIGHT_VOLATILITY_SCALE_X_DEFAULT,
52
+ clamp: DEFAULT_CLAMP,
53
+ quiet: false,
54
+ listBots: false,
55
+ };
56
+ for (let i = 0; i < args.length; i++) {
57
+ const arg = args[i];
58
+ if (arg === '--source')
59
+ config.source.type = args[++i];
60
+ else if (arg === '--bot-key')
61
+ config.source.config.botKey = args[++i];
62
+ else if (arg === '--file') {
63
+ config.source.config.filePath = args[++i];
64
+ config.source.type = 'json';
65
+ }
66
+ else if (arg === '--chart')
67
+ config.chartFile = args[++i];
68
+ else if (arg === '--threshold')
69
+ config.threshold = parseFloat(args[++i]);
70
+ else if (arg === '--atr-period') {
71
+ const next = parseInt(args[++i], 10);
72
+ if (Number.isFinite(next))
73
+ config.atrPeriod = normalizeAtrPeriod(next);
74
+ }
75
+ else if (arg === '--exp')
76
+ config.exponent = parseFloat(args[++i]);
77
+ else if (arg === '--scale-x')
78
+ config.scaleX = parseFloat(args[++i]);
79
+ else if (arg === '--clamp')
80
+ config.clamp = parseFloat(args[++i]);
81
+ else if (arg === '--list-bots')
82
+ config.listBots = true;
83
+ else if (arg === '--quiet')
84
+ config.quiet = true;
85
+ }
86
+ return config;
87
+ }
88
+ function computeShift(weightVariance, exponent, scaleX, threshold, clampValue) {
89
+ const shift = computeVolatilityShift(weightVariance, {
90
+ exponent,
91
+ scaleX,
92
+ threshold,
93
+ clampValue,
94
+ minWeight: MIN_WEIGHT,
95
+ maxWeight: MAX_WEIGHT,
96
+ });
97
+ return {
98
+ rawSymmetricDelta: shift.rawSymmetricDelta,
99
+ symmetricDelta: shift.symmetricDelta,
100
+ effectiveWeight: shift.effectiveWeight,
101
+ sellW: shift.sellW,
102
+ buyW: shift.buyW,
103
+ };
104
+ }
105
+ async function main() {
106
+ try {
107
+ const config = parseArgs();
108
+ if (config.listBots) {
109
+ listAvailableBots();
110
+ return;
111
+ }
112
+ const { source, amaConfig } = resolveSource({ ...config.source.config, type: config.source.type }, { quiet: config.quiet });
113
+ if (!config.quiet)
114
+ console.log(`[Volatility] Loading candles from ${source.name}...`);
115
+ const candles = await source.fetchCandles();
116
+ if (!Array.isArray(candles) || candles.length === 0) {
117
+ throw new Error('No candles returned from source');
118
+ }
119
+ const closes = candles.map(c => getCandleClose(c) ?? 0);
120
+ const ama3Values = calculateAMA(closes, amaConfig);
121
+ const atrPeriod = normalizeAtrPeriod(config.atrPeriod);
122
+ const atrs = computeATRSeriesNormalized(candles, atrPeriod);
123
+ const allResults = [];
124
+ for (let i = 0; i < candles.length; i++) {
125
+ const { marketPrice, timestamp } = source.extractMarketPrice(candles[i]);
126
+ const amaPrice = ama3Values[i] ?? null;
127
+ const atr = atrs[i] ?? 0;
128
+ const weightVariance = amaPrice > 0 ? atr / amaPrice : 0;
129
+ const shift = computeShift(weightVariance, config.exponent, config.scaleX, config.threshold, config.clamp);
130
+ allResults.push({
131
+ timestamp,
132
+ price: marketPrice,
133
+ ama3Price: amaPrice,
134
+ atr,
135
+ weightVariance,
136
+ rawSymmetricDelta: shift.rawSymmetricDelta,
137
+ symmetricDelta: shift.symmetricDelta,
138
+ effectiveWeight: shift.effectiveWeight,
139
+ sellW: shift.sellW,
140
+ buyW: shift.buyW,
141
+ });
142
+ }
143
+ const html = generateHTML({
144
+ allResults,
145
+ candles,
146
+ volatilityThreshold: config.threshold,
147
+ volatilityExponent: config.exponent,
148
+ volatilityScaleX: config.scaleX,
149
+ volatilityClamp: config.clamp,
150
+ atrPeriod,
151
+ minWeight: MIN_WEIGHT,
152
+ maxWeight: MAX_WEIGHT,
153
+ marketAdapter: MARKET_ADAPTER,
154
+ }, 'ATR Volatility Research');
155
+ writeChartFile(config.chartFile, html);
156
+ if (!config.quiet)
157
+ console.log(`[Volatility] ✓ Chart saved to ${config.chartFile}`);
158
+ }
159
+ catch (err) {
160
+ console.error(`[Volatility] Error: ${err?.message ?? err}`);
161
+ process.exit(1);
162
+ }
163
+ }
164
+ main().catch((err) => { console.error(err); process.exit(1); });
165
+ //# sourceMappingURL=analyze_volatility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_volatility.js","sourceRoot":"","sources":["../../analysis/analyze_volatility.ts"],"names":[],"mappings":"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"}