dexbot 1.4.17 → 1.4.18

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 (209) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/analysis/README.md +43 -43
  3. package/analysis/ama_fitting/README.md +8 -8
  4. package/analysis/ama_fitting/package.json +1 -1
  5. package/analysis/bot_fitting/README.md +4 -4
  6. package/analysis/bot_fitting/backtest_ama_sweep.ts +1 -1
  7. package/analysis/bot_usage/discover_bot_accounts.ts +11 -11
  8. package/analysis/tradingview/README.md +4 -4
  9. package/analysis/trend_detection/DYNAMIC_WEIGHT_RESEARCH.md +2 -2
  10. package/analysis/trend_detection/SIGNAL_DOCUMENTATION.md +1 -1
  11. package/analysis/trend_detection/package.json +1 -1
  12. package/claw/README.md +45 -45
  13. package/claw/docs/AI_BOT_LIBRARY_API.md +6 -6
  14. package/claw/examples/short_mpa_bts_strategy.ts +3 -3
  15. package/claw/package.json +21 -21
  16. package/claw/runtimes/openclaw-plugin/openclaw.plugin.json +1 -1
  17. package/claw/runtimes/openclaw-plugin/package.json +1 -1
  18. package/claw/scripts/claw_bridge.ts +2 -2
  19. package/claw/scripts/claw_skill_md.ts +1 -1
  20. package/claw/skills/launcher-ops/references/launcher-workflow.md +5 -5
  21. package/claw/skills/margin-trading/references/honest-asset-list.md +1 -1
  22. package/claw/skills/memu-memory/SKILL.md +3 -3
  23. package/claw/tests/test_claw_mcp_transport.ts +2 -2
  24. package/dist/analysis/ama_fitting/analyze_ama_price_changes.d.ts +3 -0
  25. package/dist/analysis/ama_fitting/analyze_ama_price_changes.d.ts.map +1 -0
  26. package/dist/analysis/ama_fitting/analyze_ama_price_changes.js +148 -0
  27. package/dist/analysis/ama_fitting/analyze_ama_price_changes.js.map +1 -0
  28. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.d.ts +12 -0
  29. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.d.ts.map +1 -0
  30. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.js +389 -0
  31. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.js.map +1 -0
  32. package/dist/analysis/ama_fitting/calibrate_convergence_er.d.ts +3 -0
  33. package/dist/analysis/ama_fitting/calibrate_convergence_er.d.ts.map +1 -0
  34. package/dist/analysis/ama_fitting/calibrate_convergence_er.js +200 -0
  35. package/dist/analysis/ama_fitting/calibrate_convergence_er.js.map +1 -0
  36. package/dist/analysis/ama_fitting/fetch_lp_candles.d.ts +3 -0
  37. package/dist/analysis/ama_fitting/fetch_lp_candles.d.ts.map +1 -0
  38. package/dist/analysis/ama_fitting/fetch_lp_candles.js +213 -0
  39. package/dist/analysis/ama_fitting/fetch_lp_candles.js.map +1 -0
  40. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.d.ts +25 -0
  41. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.d.ts.map +1 -0
  42. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.js +247 -0
  43. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.js.map +1 -0
  44. package/dist/analysis/ama_fitting/optimizer_high_resolution.d.ts +35 -0
  45. package/dist/analysis/ama_fitting/optimizer_high_resolution.d.ts.map +1 -0
  46. package/dist/analysis/ama_fitting/optimizer_high_resolution.js +782 -0
  47. package/dist/analysis/ama_fitting/optimizer_high_resolution.js.map +1 -0
  48. package/dist/analysis/analyze_derivatives.d.ts +86 -0
  49. package/dist/analysis/analyze_derivatives.d.ts.map +1 -0
  50. package/dist/analysis/analyze_derivatives.js +285 -0
  51. package/dist/analysis/analyze_derivatives.js.map +1 -0
  52. package/dist/analysis/analyze_dynamic_weight.d.ts +14 -0
  53. package/dist/analysis/analyze_dynamic_weight.d.ts.map +1 -0
  54. package/dist/analysis/analyze_dynamic_weight.js +197 -0
  55. package/dist/analysis/analyze_dynamic_weight.js.map +1 -0
  56. package/dist/analysis/analyze_kalman.d.ts +13 -0
  57. package/dist/analysis/analyze_kalman.d.ts.map +1 -0
  58. package/dist/analysis/analyze_kalman.js +118 -0
  59. package/dist/analysis/analyze_kalman.js.map +1 -0
  60. package/dist/analysis/analyze_regime.d.ts +20 -0
  61. package/dist/analysis/analyze_regime.d.ts.map +1 -0
  62. package/dist/analysis/analyze_regime.js +139 -0
  63. package/dist/analysis/analyze_regime.js.map +1 -0
  64. package/dist/analysis/analyze_regime_windows.d.ts +19 -0
  65. package/dist/analysis/analyze_regime_windows.d.ts.map +1 -0
  66. package/dist/analysis/analyze_regime_windows.js +414 -0
  67. package/dist/analysis/analyze_regime_windows.js.map +1 -0
  68. package/dist/analysis/analyze_risk_profile.d.ts +3 -0
  69. package/dist/analysis/analyze_risk_profile.d.ts.map +1 -0
  70. package/dist/analysis/analyze_risk_profile.js +186 -0
  71. package/dist/analysis/analyze_risk_profile.js.map +1 -0
  72. package/dist/analysis/analyze_trade_heatmap.d.ts +3 -0
  73. package/dist/analysis/analyze_trade_heatmap.d.ts.map +1 -0
  74. package/dist/analysis/analyze_trade_heatmap.js +358 -0
  75. package/dist/analysis/analyze_trade_heatmap.js.map +1 -0
  76. package/dist/analysis/analyze_volatility.d.ts +22 -0
  77. package/dist/analysis/analyze_volatility.d.ts.map +1 -0
  78. package/dist/analysis/analyze_volatility.js +165 -0
  79. package/dist/analysis/analyze_volatility.js.map +1 -0
  80. package/dist/analysis/bot_fitting/backtest_ama_sweep.d.ts +91 -0
  81. package/dist/analysis/bot_fitting/backtest_ama_sweep.d.ts.map +1 -0
  82. package/dist/analysis/bot_fitting/backtest_ama_sweep.js +792 -0
  83. package/dist/analysis/bot_fitting/backtest_ama_sweep.js.map +1 -0
  84. package/dist/analysis/bot_fitting/backtest_bot_fitting.d.ts +2 -0
  85. package/dist/analysis/bot_fitting/backtest_bot_fitting.d.ts.map +1 -0
  86. package/dist/analysis/bot_fitting/backtest_bot_fitting.js +380 -0
  87. package/dist/analysis/bot_fitting/backtest_bot_fitting.js.map +1 -0
  88. package/dist/analysis/bot_fitting/shared_utils.d.ts +26 -0
  89. package/dist/analysis/bot_fitting/shared_utils.d.ts.map +1 -0
  90. package/dist/analysis/bot_fitting/shared_utils.js +42 -0
  91. package/dist/analysis/bot_fitting/shared_utils.js.map +1 -0
  92. package/dist/analysis/bot_key_utils.d.ts +11 -0
  93. package/dist/analysis/bot_key_utils.d.ts.map +1 -0
  94. package/dist/analysis/bot_key_utils.js +153 -0
  95. package/dist/analysis/bot_key_utils.js.map +1 -0
  96. package/dist/analysis/bot_usage/discover_bot_accounts.d.ts +3 -0
  97. package/dist/analysis/bot_usage/discover_bot_accounts.d.ts.map +1 -0
  98. package/dist/analysis/bot_usage/discover_bot_accounts.js +499 -0
  99. package/dist/analysis/bot_usage/discover_bot_accounts.js.map +1 -0
  100. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts +531 -0
  101. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts.map +1 -0
  102. package/dist/analysis/bot_usage/kibana_bot_queries.js +399 -0
  103. package/dist/analysis/bot_usage/kibana_bot_queries.js.map +1 -0
  104. package/dist/analysis/chart_css.d.ts +17 -0
  105. package/dist/analysis/chart_css.d.ts.map +1 -0
  106. package/dist/analysis/chart_css.js +49 -0
  107. package/dist/analysis/chart_css.js.map +1 -0
  108. package/dist/analysis/chart_ui.d.ts +45 -0
  109. package/dist/analysis/chart_ui.d.ts.map +1 -0
  110. package/dist/analysis/chart_ui.js +97 -0
  111. package/dist/analysis/chart_ui.js.map +1 -0
  112. package/dist/analysis/chart_utils.d.ts +27 -0
  113. package/dist/analysis/chart_utils.d.ts.map +1 -0
  114. package/dist/analysis/chart_utils.js +153 -0
  115. package/dist/analysis/chart_utils.js.map +1 -0
  116. package/dist/analysis/derivative_chart_generator.d.ts +12 -0
  117. package/dist/analysis/derivative_chart_generator.d.ts.map +1 -0
  118. package/dist/analysis/derivative_chart_generator.js +891 -0
  119. package/dist/analysis/derivative_chart_generator.js.map +1 -0
  120. package/dist/analysis/math_utils.d.ts +22 -0
  121. package/dist/analysis/math_utils.d.ts.map +1 -0
  122. package/dist/analysis/math_utils.js +43 -0
  123. package/dist/analysis/math_utils.js.map +1 -0
  124. package/dist/analysis/price_sources.d.ts +40 -0
  125. package/dist/analysis/price_sources.d.ts.map +1 -0
  126. package/dist/analysis/price_sources.js +94 -0
  127. package/dist/analysis/price_sources.js.map +1 -0
  128. package/dist/analysis/resolve_source.d.ts +25 -0
  129. package/dist/analysis/resolve_source.d.ts.map +1 -0
  130. package/dist/analysis/resolve_source.js +69 -0
  131. package/dist/analysis/resolve_source.js.map +1 -0
  132. package/dist/analysis/trade_profitability.d.ts +115 -0
  133. package/dist/analysis/trade_profitability.d.ts.map +1 -0
  134. package/dist/analysis/trade_profitability.js +1240 -0
  135. package/dist/analysis/trade_profitability.js.map +1 -0
  136. package/dist/analysis/tradingview/analyze_tradingview.d.ts +31 -0
  137. package/dist/analysis/tradingview/analyze_tradingview.d.ts.map +1 -0
  138. package/dist/analysis/tradingview/analyze_tradingview.js +146 -0
  139. package/dist/analysis/tradingview/analyze_tradingview.js.map +1 -0
  140. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts +5 -0
  141. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts.map +1 -0
  142. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js +1714 -0
  143. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js.map +1 -0
  144. package/dist/analysis/trend_detection/derivative_analyzer.d.ts +247 -0
  145. package/dist/analysis/trend_detection/derivative_analyzer.d.ts.map +1 -0
  146. package/dist/analysis/trend_detection/derivative_analyzer.js +901 -0
  147. package/dist/analysis/trend_detection/derivative_analyzer.js.map +1 -0
  148. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.d.ts +3 -0
  149. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.d.ts.map +1 -0
  150. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.js +1361 -0
  151. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.js.map +1 -0
  152. package/dist/analysis/trend_detection/hurst_analyzer.d.ts +6 -0
  153. package/dist/analysis/trend_detection/hurst_analyzer.d.ts.map +1 -0
  154. package/dist/analysis/trend_detection/hurst_analyzer.js +7 -0
  155. package/dist/analysis/trend_detection/hurst_analyzer.js.map +1 -0
  156. package/dist/analysis/trend_detection/kalman_chart_generator.d.ts +3 -0
  157. package/dist/analysis/trend_detection/kalman_chart_generator.d.ts.map +1 -0
  158. package/dist/analysis/trend_detection/kalman_chart_generator.js +360 -0
  159. package/dist/analysis/trend_detection/kalman_chart_generator.js.map +1 -0
  160. package/dist/analysis/trend_detection/kalman_trend_analyzer.d.ts +8 -0
  161. package/dist/analysis/trend_detection/kalman_trend_analyzer.d.ts.map +1 -0
  162. package/dist/analysis/trend_detection/kalman_trend_analyzer.js +8 -0
  163. package/dist/analysis/trend_detection/kalman_trend_analyzer.js.map +1 -0
  164. package/dist/analysis/trend_detection/kalman_velocity_smoothing.d.ts +6 -0
  165. package/dist/analysis/trend_detection/kalman_velocity_smoothing.d.ts.map +1 -0
  166. package/dist/analysis/trend_detection/kalman_velocity_smoothing.js +7 -0
  167. package/dist/analysis/trend_detection/kalman_velocity_smoothing.js.map +1 -0
  168. package/dist/analysis/trend_detection/permutation_entropy_analyzer.d.ts +6 -0
  169. package/dist/analysis/trend_detection/permutation_entropy_analyzer.d.ts.map +1 -0
  170. package/dist/analysis/trend_detection/permutation_entropy_analyzer.js +7 -0
  171. package/dist/analysis/trend_detection/permutation_entropy_analyzer.js.map +1 -0
  172. package/dist/analysis/trend_detection/regime_chart_generator.d.ts +3 -0
  173. package/dist/analysis/trend_detection/regime_chart_generator.d.ts.map +1 -0
  174. package/dist/analysis/trend_detection/regime_chart_generator.js +310 -0
  175. package/dist/analysis/trend_detection/regime_chart_generator.js.map +1 -0
  176. package/dist/analysis/trend_detection/tests/test_kalman_trend.d.ts +2 -0
  177. package/dist/analysis/trend_detection/tests/test_kalman_trend.d.ts.map +1 -0
  178. package/dist/analysis/trend_detection/tests/test_kalman_trend.js +128 -0
  179. package/dist/analysis/trend_detection/tests/test_kalman_trend.js.map +1 -0
  180. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.d.ts +2 -0
  181. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.d.ts.map +1 -0
  182. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.js +37 -0
  183. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.js.map +1 -0
  184. package/dist/analysis/trend_detection/volatility_chart_generator.d.ts +3 -0
  185. package/dist/analysis/trend_detection/volatility_chart_generator.d.ts.map +1 -0
  186. package/dist/analysis/trend_detection/volatility_chart_generator.js +646 -0
  187. package/dist/analysis/trend_detection/volatility_chart_generator.js.map +1 -0
  188. package/dist/bot.js +1 -1
  189. package/dist/bot.js.map +1 -1
  190. package/dist/market_adapter/ama_signal_runner.js +1 -1
  191. package/dist/market_adapter/ama_signal_runner.js.map +1 -1
  192. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js +1 -1
  193. package/dist/scripts/generate_lp_chart.js +1 -1
  194. package/dist/scripts/test-credit-renewal.js +1 -1
  195. package/docs/DEXBOT_COMPARISON.md +3 -3
  196. package/docs/EVOLUTION.md +5 -4
  197. package/docs/FUND_MOVEMENT_AND_ACCOUNTING.md +1 -1
  198. package/docs/GRID_RECALCULATION.md +2 -2
  199. package/docs/README.md +1 -1
  200. package/market_adapter/README.md +23 -23
  201. package/package.json +17 -21
  202. package/scripts/README.md +12 -12
  203. package/scripts/bots +5 -7
  204. package/scripts/clear-market-adapter.sh +1 -1
  205. package/scripts/dexbot +5 -7
  206. package/scripts/keys +5 -7
  207. package/scripts/pm2 +5 -7
  208. package/scripts/unlock +5 -7
  209. package/scripts/update.js +6 -7
@@ -0,0 +1,197 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * DYNAMIC WEIGHT RESEARCH TOOL
4
+ *
5
+ * Computes AMA slope + Kalman + Hurst + PE signals and generates an
6
+ * interactive HTML chart for researching dynamic weight parameters.
7
+ *
8
+ * Usage:
9
+ * tsx analysis/analyze_dynamic_weight.ts \
10
+ * --source json \
11
+ * --file market_adapter/data/lp/<path>/<to>/<lp-candles>.json
12
+ */
13
+ import { KalmanTrendAnalyzer } from './trend_detection/kalman_trend_analyzer.js';
14
+ import { HurstAnalyzer } from './trend_detection/hurst_analyzer.js';
15
+ import { PermutationEntropyAnalyzer } from './trend_detection/permutation_entropy_analyzer.js';
16
+ import { generateHTML } from './trend_detection/dynamic_weight_chart_generator.js';
17
+ import { calculateAMA } from '../market_adapter/core/strategies/ama.js';
18
+ import { computeAmaSlopeWeights } from '../market_adapter/core/strategies/ama_slope_model.js';
19
+ import { MARKET_ADAPTER } from '../modules/constants.js';
20
+ import { writeChartFile } from './chart_utils.js';
21
+ import { getCandleClose } from './math_utils.js';
22
+ import { resolveSource, listAvailableBots } from './resolve_source.js';
23
+ 'use strict';
24
+ // AMA Slope weight calculation config — use DEFAULTS from market adapter
25
+ const AMA_WEIGHT_CONFIG = {
26
+ lookbackBars: MARKET_ADAPTER.DYNAMIC_WEIGHT_AMA_LOOKBACK_BARS,
27
+ amaMaxSlopePct: MARKET_ADAPTER.DYNAMIC_WEIGHT_AMA_MAX_SLOPE_PCT,
28
+ kalmanMaxSlopePct: MARKET_ADAPTER.DYNAMIC_WEIGHT_KALMAN_MAX_SLOPE_PCT,
29
+ neutralZonePct: MARKET_ADAPTER.DYNAMIC_WEIGHT_AMA_NEUTRAL_ZONE_PCT,
30
+ volatilityExponent: MARKET_ADAPTER.DYNAMIC_WEIGHT_VOLATILITY_EXPONENT,
31
+ volatilityScaleX: MARKET_ADAPTER.DYNAMIC_WEIGHT_VOLATILITY_SCALE_X_DEFAULT,
32
+ volatilityThreshold: MARKET_ADAPTER.DYNAMIC_WEIGHT_SYMMETRIC_SHIFT_THRESHOLD,
33
+ maxSlopeOffset: MARKET_ADAPTER.DYNAMIC_WEIGHT_ASYMMETRIC_OFFSET_CLAMP,
34
+ maxVolatilityOffset: MARKET_ADAPTER.DYNAMIC_WEIGHT_SYMMETRIC_SHIFT_CLAMP,
35
+ };
36
+ // Kalman configuration
37
+ const KALMAN_CONFIG = {
38
+ rNoise: MARKET_ADAPTER.DYNAMIC_WEIGHT_KALMAN_R_NOISE_DEFAULT,
39
+ qTactical: MARKET_ADAPTER.DYNAMIC_WEIGHT_KALMAN_Q_TACTICAL_DEFAULT,
40
+ qModal: MARKET_ADAPTER.DYNAMIC_WEIGHT_KALMAN_Q_MODAL_DEFAULT,
41
+ };
42
+ // Regime analyzers configuration (Hurst + Permutation Entropy)
43
+ const { HURST_CONFIG, PE_CONFIG } = MARKET_ADAPTER;
44
+ function parseArgs() {
45
+ const args = process.argv.slice(2);
46
+ const config = {
47
+ source: { type: 'market_adapter', config: { botKey: '' } },
48
+ chartFile: 'analysis/charts/dynamic_weight_chart.html',
49
+ alpha: MARKET_ADAPTER.DYNAMIC_WEIGHT_ALPHA,
50
+ gain: MARKET_ADAPTER.DYNAMIC_WEIGHT_GAIN,
51
+ dispWeight: MARKET_ADAPTER.DYNAMIC_WEIGHT_DW,
52
+ clipPct: MARKET_ADAPTER.DYNAMIC_WEIGHT_CLIP_PERCENTILE,
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 === '--alpha')
69
+ config.alpha = parseFloat(args[++i]);
70
+ else if (arg === '--gain')
71
+ config.gain = parseFloat(args[++i]);
72
+ else if (arg === '--dw')
73
+ config.dispWeight = parseFloat(args[++i]);
74
+ else if (arg === '--lb')
75
+ config.lookbackBars = parseInt(args[++i], 10);
76
+ else if (arg === '--clip')
77
+ config.clipPct = parseFloat(args[++i]);
78
+ else if (arg === '--list-bots')
79
+ config.listBots = true;
80
+ else if (arg === '--quiet')
81
+ config.quiet = true;
82
+ }
83
+ return config;
84
+ }
85
+ async function main() {
86
+ try {
87
+ const config = parseArgs();
88
+ if (config.listBots) {
89
+ listAvailableBots();
90
+ return;
91
+ }
92
+ const { source, amaConfig, amaKey } = resolveSource({ ...config.source.config, type: config.source.type }, { quiet: config.quiet });
93
+ const AMA_CONFIG = amaConfig;
94
+ if (!config.quiet)
95
+ console.log(`[DynamicWeight] Loading candles from ${source.name}...`);
96
+ const candles = await source.fetchCandles();
97
+ if (!Array.isArray(candles) || candles.length === 0) {
98
+ throw new Error('No candles returned from source');
99
+ }
100
+ // ── Kalman analysis ──────────────────────────────────────────────────
101
+ const analyzer = new KalmanTrendAnalyzer({
102
+ rNoise: KALMAN_CONFIG.rNoise,
103
+ qTactical: KALMAN_CONFIG.qTactical,
104
+ qModal: KALMAN_CONFIG.qModal,
105
+ });
106
+ // ── Hurst & PE analyzers ──────────────────────────────────────────────
107
+ const hurstAnalyzer = new HurstAnalyzer({
108
+ window: HURST_CONFIG.window,
109
+ scales: HURST_CONFIG.scales,
110
+ });
111
+ const peAnalyzer = new PermutationEntropyAnalyzer({
112
+ m: PE_CONFIG.m,
113
+ delay: PE_CONFIG.delay,
114
+ window: PE_CONFIG.window,
115
+ });
116
+ const allResults = [];
117
+ for (let i = 0; i < candles.length; i++) {
118
+ const { marketPrice, timestamp } = source.extractMarketPrice(candles[i]);
119
+ const result = analyzer.update(marketPrice);
120
+ const hurst = hurstAnalyzer.update(marketPrice);
121
+ const pe = peAnalyzer.update(marketPrice);
122
+ result.timestamp = timestamp;
123
+ result.price = marketPrice;
124
+ result.hurst = hurst.isReady ? hurst.hurst : null;
125
+ result.pe = pe.isReady ? pe.normalizedEntropy : null;
126
+ allResults.push(result);
127
+ }
128
+ // ── AMA weight calculation ───────────────────────────────────────────
129
+ const closes = candles.map(c => getCandleClose(c) ?? 0);
130
+ const amaValues = calculateAMA(closes, AMA_CONFIG);
131
+ for (let i = 0; i < allResults.length; i++) {
132
+ // The research chart keeps ATR out of the Kalman branch on purpose.
133
+ // Production applies ATR later as a separate symmetric volatility penalty.
134
+ const atr = 0;
135
+ const weightVariance = 0;
136
+ const weights = computeAmaSlopeWeights(amaValues.slice(0, i + 1), weightVariance, {
137
+ erPeriod: AMA_CONFIG.erPeriod,
138
+ lookbackBars: config.lookbackBars ?? AMA_WEIGHT_CONFIG.lookbackBars,
139
+ maxSlopePct: AMA_WEIGHT_CONFIG.amaMaxSlopePct,
140
+ neutralZonePct: AMA_WEIGHT_CONFIG.neutralZonePct,
141
+ volatilityExponent: AMA_WEIGHT_CONFIG.volatilityExponent,
142
+ volatilityScaleX: AMA_WEIGHT_CONFIG.volatilityScaleX,
143
+ volatilityThreshold: AMA_WEIGHT_CONFIG.volatilityThreshold,
144
+ maxSlopeOffset: AMA_WEIGHT_CONFIG.maxSlopeOffset,
145
+ maxVolatilityOffset: AMA_WEIGHT_CONFIG.maxVolatilityOffset,
146
+ });
147
+ allResults[i].ama3Price = amaValues[i] ?? null;
148
+ allResults[i].atr = atr;
149
+ allResults[i].weightVariance = weightVariance;
150
+ allResults[i].amaSlopePct = weights.slopePct;
151
+ allResults[i].amaWeightReady = weights.isReady;
152
+ allResults[i].amaSlopeOffset = weights.slopeOffset;
153
+ allResults[i].amaSymmetricDelta = weights.symmetricDelta;
154
+ }
155
+ // ── Generate chart ───────────────────────────────────────────────────
156
+ const html = generateHTML({
157
+ allResults,
158
+ amaConfig: AMA_CONFIG,
159
+ amaKey,
160
+ amaWeightConfig: {
161
+ ...AMA_WEIGHT_CONFIG,
162
+ lookbackBars: config.lookbackBars ?? AMA_WEIGHT_CONFIG.lookbackBars,
163
+ },
164
+ alpha: config.alpha,
165
+ gain: config.gain,
166
+ dispWeight: config.dispWeight,
167
+ clipPct: config.clipPct,
168
+ regimeSensitivity: MARKET_ADAPTER.DYNAMIC_WEIGHT_REGIME_SENSITIVITY,
169
+ dispScaleMinPct: config.dispScaleMinPct ?? MARKET_ADAPTER.DYNAMIC_WEIGHT_DISP_SCALE_MIN_PCT,
170
+ minOutputThreshold: MARKET_ADAPTER.DYNAMIC_WEIGHT_ASYMMETRIC_TREND_THRESHOLD,
171
+ outputClamp: MARKET_ADAPTER.DYNAMIC_WEIGHT_ASYMMETRIC_OFFSET_CLAMP,
172
+ marketAdapter: {
173
+ alpha: MARKET_ADAPTER.DYNAMIC_WEIGHT_ALPHA,
174
+ gain: MARKET_ADAPTER.DYNAMIC_WEIGHT_GAIN,
175
+ dispWeight: MARKET_ADAPTER.DYNAMIC_WEIGHT_DW,
176
+ clipPercentile: MARKET_ADAPTER.DYNAMIC_WEIGHT_CLIP_PERCENTILE,
177
+ regimeSensitivity: MARKET_ADAPTER.DYNAMIC_WEIGHT_REGIME_SENSITIVITY,
178
+ minOutputThreshold: MARKET_ADAPTER.DYNAMIC_WEIGHT_ASYMMETRIC_TREND_THRESHOLD,
179
+ outputClamp: MARKET_ADAPTER.DYNAMIC_WEIGHT_ASYMMETRIC_OFFSET_CLAMP,
180
+ amaLookbackBars: MARKET_ADAPTER.DYNAMIC_WEIGHT_AMA_LOOKBACK_BARS,
181
+ amaMaxSlopePct: MARKET_ADAPTER.DYNAMIC_WEIGHT_AMA_MAX_SLOPE_PCT,
182
+ kalmanMaxSlopePct: MARKET_ADAPTER.DYNAMIC_WEIGHT_KALMAN_MAX_SLOPE_PCT,
183
+ amaNeutralZonePct: MARKET_ADAPTER.DYNAMIC_WEIGHT_AMA_NEUTRAL_ZONE_PCT,
184
+ dispScaleMinPct: MARKET_ADAPTER.DYNAMIC_WEIGHT_DISP_SCALE_MIN_PCT,
185
+ },
186
+ }, 'Dynamic Weight Research Tool');
187
+ writeChartFile(config.chartFile, html);
188
+ if (!config.quiet)
189
+ console.log(`[DynamicWeight] ✓ Chart saved to ${config.chartFile}`);
190
+ }
191
+ catch (err) {
192
+ console.error(`[DynamicWeight] Error: ${err?.message ?? err}`);
193
+ process.exit(1);
194
+ }
195
+ }
196
+ main().catch((err) => { console.error(err); process.exit(1); });
197
+ //# sourceMappingURL=analyze_dynamic_weight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_dynamic_weight.js","sourceRoot":"","sources":["../../analysis/analyze_dynamic_weight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * KALMAN TREND ANALYSIS RUNNER
4
+ *
5
+ * Runs KalmanTrendAnalyzer over candle data and generates an interactive HTML chart.
6
+ *
7
+ * Usage:
8
+ * tsx analysis/analyze_kalman.ts \
9
+ * --source json \
10
+ * --file market_adapter/data/lp/<path>/<to>/<lp-candles>.json
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=analyze_kalman.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_kalman.d.ts","sourceRoot":"","sources":["../../analysis/analyze_kalman.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG"}
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * KALMAN TREND ANALYSIS RUNNER
4
+ *
5
+ * Runs KalmanTrendAnalyzer over candle data and generates an interactive HTML chart.
6
+ *
7
+ * Usage:
8
+ * tsx analysis/analyze_kalman.ts \
9
+ * --source json \
10
+ * --file market_adapter/data/lp/<path>/<to>/<lp-candles>.json
11
+ */
12
+ import { KalmanTrendAnalyzer } from './trend_detection/kalman_trend_analyzer.js';
13
+ import { generateHTML } from './trend_detection/kalman_chart_generator.js';
14
+ import { calculateAMA } from '../market_adapter/core/strategies/ama.js';
15
+ import { computeAverageAmaSlopePct } from '../market_adapter/core/strategies/dynamic_weight_series.js';
16
+ import { getCandleClose } from './math_utils.js';
17
+ import { writeChartFile } from './chart_utils.js';
18
+ import { resolveSource, listAvailableBots } from './resolve_source.js';
19
+ 'use strict';
20
+ const LOOKBACK_BARS = 72;
21
+ const NEUTRAL_ZONE = 0.15;
22
+ const MAX_SLOPE_PCT = 3.0;
23
+ const MAX_SLOPE_OFFSET = 0.5;
24
+ function parseArgs() {
25
+ const args = process.argv.slice(2);
26
+ const config = {
27
+ source: { type: 'market_adapter', config: { botKey: '' } },
28
+ rNoise: 0.05,
29
+ qNoise: 0.005,
30
+ chartFile: 'analysis/charts/kalman_chart.html',
31
+ quiet: false,
32
+ listBots: false,
33
+ };
34
+ for (let i = 0; i < args.length; i++) {
35
+ const arg = args[i];
36
+ if (arg === '--source')
37
+ config.source.type = args[++i];
38
+ else if (arg === '--bot-key')
39
+ config.source.config.botKey = args[++i];
40
+ else if (arg === '--file') {
41
+ config.source.config.filePath = args[++i];
42
+ config.source.type = 'json';
43
+ }
44
+ else if (arg === '--r')
45
+ config.rNoise = parseFloat(args[++i]);
46
+ else if (arg === '--q')
47
+ config.qNoise = parseFloat(args[++i]);
48
+ else if (arg === '--chart')
49
+ config.chartFile = args[++i];
50
+ else if (arg === '--list-bots')
51
+ config.listBots = true;
52
+ else if (arg === '--quiet')
53
+ config.quiet = true;
54
+ }
55
+ return config;
56
+ }
57
+ async function main() {
58
+ const config = parseArgs();
59
+ try {
60
+ if (config.listBots) {
61
+ listAvailableBots();
62
+ return;
63
+ }
64
+ const { source, amaConfig } = resolveSource({ ...config.source.config, type: config.source.type }, { quiet: config.quiet });
65
+ if (!config.quiet)
66
+ console.log(`[Kalman] Loading candles from ${source.name}...`);
67
+ const candles = await source.fetchCandles();
68
+ if (!Array.isArray(candles) || candles.length === 0) {
69
+ throw new Error('No candles returned from source');
70
+ }
71
+ // ── Kalman analysis ──────────────────────────────────────────────────
72
+ const analyzer = new KalmanTrendAnalyzer({
73
+ rNoise: config.rNoise,
74
+ qNoise: config.qNoise
75
+ });
76
+ const allResults = [];
77
+ for (let i = 0; i < candles.length; i++) {
78
+ const { marketPrice, timestamp } = source.extractMarketPrice(candles[i]);
79
+ const result = analyzer.update(marketPrice);
80
+ result.timestamp = timestamp;
81
+ allResults.push(result);
82
+ }
83
+ // ── AMA weight offset (for comparison panel) ─────────────────────────
84
+ const closes = candles.map(c => getCandleClose(c) ?? 0);
85
+ const amaValues = calculateAMA(closes, amaConfig);
86
+ const warmup = amaConfig.erPeriod + LOOKBACK_BARS + 1;
87
+ for (let i = 0; i < allResults.length; i++) {
88
+ if (i < warmup) {
89
+ allResults[i].amaWeightOffset = null;
90
+ continue;
91
+ }
92
+ const last = amaValues[i];
93
+ const past = amaValues[i - LOOKBACK_BARS];
94
+ if (!last || !past || past === 0) {
95
+ allResults[i].amaWeightOffset = null;
96
+ continue;
97
+ }
98
+ const slopePct = computeAverageAmaSlopePct(last, past, LOOKBACK_BARS) * LOOKBACK_BARS;
99
+ if (Math.abs(slopePct) < NEUTRAL_ZONE) {
100
+ allResults[i].amaWeightOffset = 0;
101
+ }
102
+ else {
103
+ allResults[i].amaWeightOffset = Math.max(-MAX_SLOPE_OFFSET, Math.min(MAX_SLOPE_OFFSET, (slopePct / MAX_SLOPE_PCT) * MAX_SLOPE_OFFSET));
104
+ }
105
+ }
106
+ // ── Generate chart ───────────────────────────────────────────────────
107
+ const html = generateHTML({ allResults }, 'Kalman Trend Analysis');
108
+ writeChartFile(config.chartFile, html);
109
+ if (!config.quiet)
110
+ console.log(`[Kalman] ✓ Chart saved to ${config.chartFile}`);
111
+ }
112
+ catch (err) {
113
+ console.error(`[Kalman] Error: ${err?.message ?? err}`);
114
+ process.exit(1);
115
+ }
116
+ }
117
+ main().catch((err) => { console.error(err); process.exit(1); });
118
+ //# sourceMappingURL=analyze_kalman.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_kalman.js","sourceRoot":"","sources":["../../analysis/analyze_kalman.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * REGIME ANALYSIS TOOL
4
+ *
5
+ * Computes Hurst Exponent and Permutation Entropy over historical candle data.
6
+ *
7
+ * Hurst H > 0.55 = trending (persistent) → trust trend-following signals
8
+ * Hurst H ≈ 0.50 = random walk → no edge, stay flat
9
+ * Hurst H < 0.45 = mean-reverting → suppress or invert trend signals
10
+ *
11
+ * Norm. PE < 0.60 = structured → signals are reliable
12
+ * Norm. PE > 0.85 = noise → no exploitable structure
13
+ *
14
+ * Usage:
15
+ * tsx analysis/analyze_regime.ts \
16
+ * --source json \
17
+ * --file market_adapter/data/lp/<path>/<to>/<lp-candles>.json
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=analyze_regime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_regime.d.ts","sourceRoot":"","sources":["../../analysis/analyze_regime.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG"}
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * REGIME ANALYSIS TOOL
4
+ *
5
+ * Computes Hurst Exponent and Permutation Entropy over historical candle data.
6
+ *
7
+ * Hurst H > 0.55 = trending (persistent) → trust trend-following signals
8
+ * Hurst H ≈ 0.50 = random walk → no edge, stay flat
9
+ * Hurst H < 0.45 = mean-reverting → suppress or invert trend signals
10
+ *
11
+ * Norm. PE < 0.60 = structured → signals are reliable
12
+ * Norm. PE > 0.85 = noise → no exploitable structure
13
+ *
14
+ * Usage:
15
+ * tsx analysis/analyze_regime.ts \
16
+ * --source json \
17
+ * --file market_adapter/data/lp/<path>/<to>/<lp-candles>.json
18
+ */
19
+ import { MARKET_ADAPTER } from '../modules/constants.js';
20
+ import { HurstAnalyzer } from './trend_detection/hurst_analyzer.js';
21
+ import { PermutationEntropyAnalyzer } from './trend_detection/permutation_entropy_analyzer.js';
22
+ import { generateRegimeHTML } from './trend_detection/regime_chart_generator.js';
23
+ import { calculateAMA } from '../market_adapter/core/strategies/ama.js';
24
+ import { writeChartFile } from './chart_utils.js';
25
+ import { getCandleClose } from './math_utils.js';
26
+ import { resolveSource, listAvailableBots } from './resolve_source.js';
27
+ const HURST_CONFIG = MARKET_ADAPTER.HURST_CONFIG;
28
+ const PE_CONFIG = MARKET_ADAPTER.PE_CONFIG;
29
+ 'use strict';
30
+ function parseArgs() {
31
+ const args = process.argv.slice(2);
32
+ const config = {
33
+ source: { type: 'market_adapter', config: { botKey: '' } },
34
+ chartFile: 'analysis/charts/regime_chart.html',
35
+ hurstWindow: HURST_CONFIG.window,
36
+ peWindow: PE_CONFIG.window,
37
+ peM: PE_CONFIG.m,
38
+ quiet: false,
39
+ listBots: false,
40
+ };
41
+ for (let i = 0; i < args.length; i++) {
42
+ const arg = args[i];
43
+ if (arg === '--source')
44
+ config.source.type = args[++i];
45
+ else if (arg === '--bot-key')
46
+ config.source.config.botKey = args[++i];
47
+ else if (arg === '--file') {
48
+ config.source.config.filePath = args[++i];
49
+ config.source.type = 'json';
50
+ }
51
+ else if (arg === '--chart')
52
+ config.chartFile = args[++i];
53
+ else if (arg === '--hurst-window')
54
+ config.hurstWindow = parseInt(args[++i], 10);
55
+ else if (arg === '--pe-window')
56
+ config.peWindow = parseInt(args[++i], 10);
57
+ else if (arg === '--pe-m')
58
+ config.peM = parseInt(args[++i], 10);
59
+ else if (arg === '--list-bots')
60
+ config.listBots = true;
61
+ else if (arg === '--quiet')
62
+ config.quiet = true;
63
+ }
64
+ return config;
65
+ }
66
+ async function main() {
67
+ const config = parseArgs();
68
+ try {
69
+ if (config.listBots) {
70
+ listAvailableBots();
71
+ return;
72
+ }
73
+ const { source, amaConfig } = resolveSource({ ...config.source.config, type: config.source.type }, { quiet: config.quiet });
74
+ if (!config.quiet)
75
+ console.log(`[Regime] Loading candles from ${source.name}...`);
76
+ const candles = await source.fetchCandles();
77
+ if (!Array.isArray(candles) || candles.length === 0) {
78
+ throw new Error('No candles returned from source');
79
+ }
80
+ // ── Regime analyzers ─────────────────────────────────────────────────
81
+ const hurstAnalyzer = new HurstAnalyzer({
82
+ window: config.hurstWindow,
83
+ scales: HURST_CONFIG.scales,
84
+ });
85
+ const peAnalyzer = new PermutationEntropyAnalyzer({
86
+ m: config.peM,
87
+ delay: PE_CONFIG.delay,
88
+ window: config.peWindow,
89
+ });
90
+ const allResults = [];
91
+ for (let i = 0; i < candles.length; i++) {
92
+ const { marketPrice, timestamp } = source.extractMarketPrice(candles[i]);
93
+ const hurst = hurstAnalyzer.update(marketPrice);
94
+ const pe = peAnalyzer.update(marketPrice);
95
+ allResults.push({
96
+ timestamp,
97
+ price: marketPrice,
98
+ hurst: hurst.hurst,
99
+ hurstRegime: hurst.regime,
100
+ hurstRegimeStrength: hurst.regimeStrength,
101
+ hurstReady: hurst.isReady,
102
+ normalizedEntropy: pe.normalizedEntropy,
103
+ entropy: pe.entropy,
104
+ peRegime: pe.regime,
105
+ peRegimeStrength: pe.regimeStrength,
106
+ peReady: pe.isReady,
107
+ });
108
+ }
109
+ // ── AMA3 overlay for price panel ─────────────────────────────────────
110
+ const closes = candles.map(c => getCandleClose(c) ?? 0);
111
+ const ama3Values = calculateAMA(closes, amaConfig);
112
+ for (let i = 0; i < allResults.length; i++) {
113
+ allResults[i].ama3Price = ama3Values[i] ?? null;
114
+ }
115
+ // ── Print tail summary ───────────────────────────────────────────────
116
+ if (!config.quiet) {
117
+ const last = allResults[allResults.length - 1];
118
+ console.log(`[Regime] ${candles.length} bars processed`);
119
+ console.log(`[Regime] Last bar:`);
120
+ console.log(` Hurst H=${last.hurst} regime=${last.hurstRegime}`);
121
+ console.log(` PE e=${last.normalizedEntropy} regime=${last.peRegime}`);
122
+ }
123
+ // ── Generate chart ───────────────────────────────────────────────────
124
+ const html = generateRegimeHTML({
125
+ allResults,
126
+ hurstConfig: { window: config.hurstWindow, scales: HURST_CONFIG.scales },
127
+ peConfig: { m: config.peM, window: config.peWindow },
128
+ }, 'Regime Analysis \u2014 Hurst \u00b7 Permutation Entropy');
129
+ writeChartFile(config.chartFile, html);
130
+ if (!config.quiet)
131
+ console.log(`[Regime] \u2713 Chart saved to ${config.chartFile}`);
132
+ }
133
+ catch (err) {
134
+ console.error(`[Regime] Error: ${err?.message ?? err}`);
135
+ process.exit(1);
136
+ }
137
+ }
138
+ main().catch((err) => { console.error(err); process.exit(1); });
139
+ //# sourceMappingURL=analyze_regime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_regime.js","sourceRoot":"","sources":["../../analysis/analyze_regime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * REGIME WINDOW OPTIMIZER
4
+ *
5
+ * Grid-searches optimal Hurst and Permutation Entropy window sizes to maximize
6
+ * regime quality — a composite score of stability, directional accuracy, and
7
+ * information content.
8
+ *
9
+ * Scoring:
10
+ * - regimeStability: mean duration (bars) before regime switches
11
+ * - entropyDefect: penalty for being stuck in the "random" band (H 0.45–0.55)
12
+ *
13
+ * Usage:
14
+ * tsx analysis/analyze_regime_windows.ts \
15
+ * --source json \
16
+ * --file market_adapter/data/lp/<path>/<to>/<lp-candles>.json
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=analyze_regime_windows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_regime_windows.d.ts","sourceRoot":"","sources":["../../analysis/analyze_regime_windows.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG"}