dexbot 1.4.13 → 1.4.14
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.
- package/README.md +58 -34
- package/claw/data/positions.json +2487 -1
- package/claw/docs/AI_BOT_LIBRARY_API.md +1 -1
- package/claw/docs/POSITION_HEALTH.md +2 -2
- package/claw/modules/claw_catalog.ts +1 -3
- package/claw/modules/claw_launcher.ts +2 -3
- package/claw/modules/claw_skill_md.ts +1 -1
- package/claw/modules/decision_loop.ts +1 -1
- package/claw/modules/dexbot_profiles.ts +2 -33
- package/claw/modules/feed_price_source.ts +3 -32
- package/claw/modules/launcher_mode_detector.ts +1 -1
- package/claw/modules/mcp_utils.ts +1 -1
- package/claw/modules/mpa_utils.ts +36 -1
- package/claw/modules/position_discovery.ts +1 -28
- package/claw/modules/position_health.ts +1 -20
- package/claw/modules/position_manager.ts +3 -28
- package/claw/modules/skill_utils.ts +1 -1
- package/claw/modules/types.ts +0 -53
- package/claw/package.json +1 -1
- package/claw/runtimes/openclaw-plugin/openclaw.plugin.json +1 -1
- package/claw/runtimes/openclaw-plugin/package.json +1 -1
- package/claw/skills/margin-trading/references/honest-assets.md +1 -1
- package/claw/skills/margin-trading/references/position-management.md +2 -2
- package/claw/skills/shared/references/js-automation-overview.md +2 -2
- package/claw/skills/trend-detection/references/service.md +24 -17
- package/claw/tests/test_claw_bridge.ts +47 -47
- package/claw/tests/test_claw_catalog_and_credentials.ts +9 -9
- package/claw/tests/test_claw_chain_layer.ts +54 -54
- package/claw/tests/test_claw_data_flow.ts +41 -41
- package/claw/tests/test_claw_domain_logic.ts +26 -26
- package/claw/tests/test_claw_manifest_and_matrix.ts +1 -1
- package/claw/tests/test_claw_mcp_transport.ts +16 -16
- package/claw/tests/test_claw_regressions.ts +43 -43
- package/claw/tests/test_claw_skill_generation.ts +1 -1
- package/claw/tests/test_claw_state_store.ts +2 -2
- package/claw/tests/test_dexbot_profiles.ts +4 -4
- package/claw/tests/test_memu_bridge.ts +3 -3
- package/claw/tests/test_nullclaw_tmp_integration.ts +1 -1
- package/claw/tests/test_position_health.ts +2 -2
- package/claw/tests/test_position_manager.ts +18 -18
- package/claw/tests/test_position_manager_watch_health.ts +2 -2
- package/claw/tests/test_short_mpa_strategy.ts +12 -12
- package/dist/analysis/chart_utils.d.ts +13 -1
- package/dist/analysis/chart_utils.d.ts.map +1 -1
- package/dist/analysis/chart_utils.js +16 -1
- package/dist/analysis/chart_utils.js.map +1 -1
- package/dist/analysis/math_utils.d.ts +8 -12
- package/dist/analysis/math_utils.d.ts.map +1 -1
- package/dist/analysis/math_utils.js +9 -75
- package/dist/analysis/math_utils.js.map +1 -1
- package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js +4 -4
- package/dist/dexbot.d.ts.map +1 -1
- package/dist/dexbot.js +37 -34
- package/dist/dexbot.js.map +1 -1
- package/dist/market_adapter/candle_utils.d.ts +18 -1
- package/dist/market_adapter/candle_utils.d.ts.map +1 -1
- package/dist/market_adapter/candle_utils.js +50 -1
- package/dist/market_adapter/candle_utils.js.map +1 -1
- package/dist/market_adapter/core/config_normalizers.js +1 -1
- package/dist/market_adapter/core/config_normalizers.js.map +1 -1
- package/dist/market_adapter/core/kibana_client.d.ts +2 -2
- package/dist/market_adapter/core/kibana_client.js +2 -2
- package/dist/market_adapter/core/kibana_market_candles.d.ts +1 -87
- package/dist/market_adapter/core/kibana_market_candles.d.ts.map +1 -1
- package/dist/market_adapter/core/kibana_market_candles.js +1 -80
- package/dist/market_adapter/core/kibana_market_candles.js.map +1 -1
- package/dist/market_adapter/core/market_adapter_service.d.ts +0 -8
- package/dist/market_adapter/core/market_adapter_service.d.ts.map +1 -1
- package/dist/market_adapter/core/market_adapter_service.js +28 -115
- package/dist/market_adapter/core/market_adapter_service.js.map +1 -1
- package/dist/market_adapter/core/signals/hurst_analyzer.d.ts.map +1 -0
- package/dist/{analysis/trend_detection → market_adapter/core/signals}/hurst_analyzer.js +2 -2
- package/dist/market_adapter/core/signals/hurst_analyzer.js.map +1 -0
- package/dist/{analysis/trend_detection → market_adapter/core/signals}/kalman_trend_analyzer.d.ts +0 -1
- package/dist/market_adapter/core/signals/kalman_trend_analyzer.d.ts.map +1 -0
- package/dist/{analysis/trend_detection → market_adapter/core/signals}/kalman_trend_analyzer.js +2 -4
- package/dist/market_adapter/core/signals/kalman_trend_analyzer.js.map +1 -0
- package/dist/{analysis/trend_detection → market_adapter/core/signals}/kalman_velocity_smoothing.d.ts +25 -4
- package/dist/market_adapter/core/signals/kalman_velocity_smoothing.d.ts.map +1 -0
- package/dist/{analysis/trend_detection → market_adapter/core/signals}/kalman_velocity_smoothing.js +41 -19
- package/dist/market_adapter/core/signals/kalman_velocity_smoothing.js.map +1 -0
- package/dist/market_adapter/core/signals/permutation_entropy_analyzer.d.ts.map +1 -0
- package/dist/{analysis/trend_detection → market_adapter/core/signals}/permutation_entropy_analyzer.js +2 -2
- package/dist/market_adapter/core/signals/permutation_entropy_analyzer.js.map +1 -0
- package/dist/market_adapter/core/strategies/ama.d.ts +1 -19
- package/dist/market_adapter/core/strategies/ama.d.ts.map +1 -1
- package/dist/market_adapter/core/strategies/ama.js +1 -1
- package/dist/market_adapter/core/strategies/ama.js.map +1 -1
- package/dist/market_adapter/core/strategies/ama_slope_model.d.ts +2 -13
- package/dist/market_adapter/core/strategies/ama_slope_model.d.ts.map +1 -1
- package/dist/market_adapter/core/strategies/ama_slope_model.js +15 -26
- package/dist/market_adapter/core/strategies/ama_slope_model.js.map +1 -1
- package/dist/market_adapter/core/strategies/atr/calculator.d.ts +38 -3
- package/dist/market_adapter/core/strategies/atr/calculator.d.ts.map +1 -1
- package/dist/market_adapter/core/strategies/atr/calculator.js +84 -24
- package/dist/market_adapter/core/strategies/atr/calculator.js.map +1 -1
- package/dist/market_adapter/core/strategies/collateral_manager.d.ts +1 -1
- package/dist/market_adapter/core/strategies/collateral_manager.js +1 -1
- package/dist/market_adapter/core/strategies/dynamic_weight_series.d.ts +32 -0
- package/dist/market_adapter/core/strategies/dynamic_weight_series.d.ts.map +1 -0
- package/dist/market_adapter/core/strategies/dynamic_weight_series.js +136 -0
- package/dist/market_adapter/core/strategies/dynamic_weight_series.js.map +1 -0
- package/dist/market_adapter/core/strategies/regime_gate.d.ts +6 -21
- package/dist/market_adapter/core/strategies/regime_gate.d.ts.map +1 -1
- package/dist/market_adapter/core/strategies/regime_gate.js +11 -74
- package/dist/market_adapter/core/strategies/regime_gate.js.map +1 -1
- package/dist/market_adapter/core/strategies/regime_interp.d.ts +13 -0
- package/dist/market_adapter/core/strategies/regime_interp.d.ts.map +1 -0
- package/dist/market_adapter/core/strategies/regime_interp.js +74 -0
- package/dist/market_adapter/core/strategies/regime_interp.js.map +1 -0
- package/dist/market_adapter/core/strategies/volatility_shift.d.ts +22 -0
- package/dist/market_adapter/core/strategies/volatility_shift.d.ts.map +1 -0
- package/dist/market_adapter/core/strategies/volatility_shift.js +37 -0
- package/dist/market_adapter/core/strategies/volatility_shift.js.map +1 -0
- package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js +3 -4
- package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js.map +1 -1
- package/dist/market_adapter/inputs/fetch_lp_data.d.ts +1 -10
- package/dist/market_adapter/inputs/fetch_lp_data.d.ts.map +1 -1
- package/dist/market_adapter/inputs/fetch_lp_data.js +1 -1
- package/dist/market_adapter/inputs/fetch_lp_data.js.map +1 -1
- package/dist/market_adapter/lp_chart_core.d.ts.map +1 -1
- package/dist/market_adapter/lp_chart_core.js +0 -10
- package/dist/market_adapter/lp_chart_core.js.map +1 -1
- package/dist/market_adapter/lp_chart_runner.d.ts +1 -16
- package/dist/market_adapter/lp_chart_runner.d.ts.map +1 -1
- package/dist/market_adapter/lp_chart_runner.js +1 -15
- package/dist/market_adapter/lp_chart_runner.js.map +1 -1
- package/dist/market_adapter/market_adapter.d.ts +3 -3
- package/dist/market_adapter/market_adapter.d.ts.map +1 -1
- package/dist/market_adapter/market_adapter.js +6 -8
- package/dist/market_adapter/market_adapter.js.map +1 -1
- package/dist/market_adapter/merge_lp_data.js +5 -5
- package/dist/market_adapter/utils/adapter_client.d.ts +1 -3
- package/dist/market_adapter/utils/adapter_client.d.ts.map +1 -1
- package/dist/market_adapter/utils/adapter_client.js +1 -14
- package/dist/market_adapter/utils/adapter_client.js.map +1 -1
- package/dist/market_adapter/utils/data_discovery.d.ts.map +1 -1
- package/dist/market_adapter/utils/data_discovery.js +1 -2
- package/dist/market_adapter/utils/data_discovery.js.map +1 -1
- package/dist/market_adapter/utils/dynamic_grid_snapshot.d.ts +1 -3
- package/dist/market_adapter/utils/dynamic_grid_snapshot.d.ts.map +1 -1
- package/dist/market_adapter/utils/dynamic_grid_snapshot.js +1 -1
- package/dist/market_adapter/utils/dynamic_grid_snapshot.js.map +1 -1
- package/dist/market_adapter/utils/file_lock.d.ts +10 -2
- package/dist/market_adapter/utils/file_lock.d.ts.map +1 -1
- package/dist/market_adapter/utils/file_lock.js +171 -102
- package/dist/market_adapter/utils/file_lock.js.map +1 -1
- package/dist/market_adapter/utils/native_history.d.ts +1 -9
- package/dist/market_adapter/utils/native_history.d.ts.map +1 -1
- package/dist/market_adapter/utils/native_history.js +1 -21
- package/dist/market_adapter/utils/native_history.js.map +1 -1
- package/dist/modules/account_bots.d.ts +16 -38
- package/dist/modules/account_bots.d.ts.map +1 -1
- package/dist/modules/account_bots.js +16 -38
- package/dist/modules/account_bots.js.map +1 -1
- package/dist/modules/account_orders.d.ts +11 -11
- package/dist/modules/account_orders.d.ts.map +1 -1
- package/dist/modules/account_orders.js +11 -18
- package/dist/modules/account_orders.js.map +1 -1
- package/dist/modules/bitshares_client.d.ts +5 -8
- package/dist/modules/bitshares_client.d.ts.map +1 -1
- package/dist/modules/bitshares_client.js +6 -10
- package/dist/modules/bitshares_client.js.map +1 -1
- package/dist/modules/bots_file_lock.d.ts +8 -5
- package/dist/modules/bots_file_lock.d.ts.map +1 -1
- package/dist/modules/bots_file_lock.js +8 -5
- package/dist/modules/bots_file_lock.js.map +1 -1
- package/dist/modules/chain_keys.d.ts +31 -22
- package/dist/modules/chain_keys.d.ts.map +1 -1
- package/dist/modules/chain_keys.js +31 -22
- package/dist/modules/chain_keys.js.map +1 -1
- package/dist/modules/chain_orders.d.ts +52 -48
- package/dist/modules/chain_orders.d.ts.map +1 -1
- package/dist/modules/chain_orders.js +124 -49
- package/dist/modules/chain_orders.js.map +1 -1
- package/dist/modules/constants.d.ts +17 -13
- package/dist/modules/constants.d.ts.map +1 -1
- package/dist/modules/constants.js +42 -21
- package/dist/modules/constants.js.map +1 -1
- package/dist/modules/cr_planner.d.ts +2 -1
- package/dist/modules/cr_planner.d.ts.map +1 -1
- package/dist/modules/cr_planner.js +1 -1
- package/dist/modules/cr_planner.js.map +1 -1
- package/dist/modules/credential_policy.d.ts +6 -4
- package/dist/modules/credential_policy.d.ts.map +1 -1
- package/dist/modules/credential_policy.js +6 -4
- package/dist/modules/credential_policy.js.map +1 -1
- package/dist/modules/credit_runtime.d.ts.map +1 -1
- package/dist/modules/credit_runtime.js +4 -8
- package/dist/modules/credit_runtime.js.map +1 -1
- package/dist/modules/dexbot_class.d.ts +33 -88
- package/dist/modules/dexbot_class.d.ts.map +1 -1
- package/dist/modules/dexbot_class.js +36 -68
- package/dist/modules/dexbot_class.js.map +1 -1
- package/dist/modules/dexbot_cow_runtime.d.ts +7 -7
- package/dist/modules/dexbot_cow_runtime.d.ts.map +1 -1
- package/dist/modules/dexbot_cow_runtime.js +7 -7
- package/dist/modules/dexbot_cow_runtime.js.map +1 -1
- package/dist/modules/dexbot_credential_client.d.ts +3 -3
- package/dist/modules/dexbot_credential_client.js +3 -3
- package/dist/modules/dexbot_credential_client.js.map +1 -1
- package/dist/modules/dexbot_fill_runtime.d.ts +1 -7
- package/dist/modules/dexbot_fill_runtime.d.ts.map +1 -1
- package/dist/modules/dexbot_fill_runtime.js +1 -9
- package/dist/modules/dexbot_fill_runtime.js.map +1 -1
- package/dist/modules/dexbot_maintenance_runtime.d.ts.map +1 -1
- package/dist/modules/dexbot_maintenance_runtime.js +3 -1
- package/dist/modules/dexbot_maintenance_runtime.js.map +1 -1
- package/dist/modules/dexbot_state_recovery.d.ts.map +1 -1
- package/dist/modules/dexbot_state_recovery.js +99 -1
- package/dist/modules/dexbot_state_recovery.js.map +1 -1
- package/dist/modules/graceful_shutdown.d.ts +4 -2
- package/dist/modules/graceful_shutdown.d.ts.map +1 -1
- package/dist/modules/graceful_shutdown.js +4 -2
- package/dist/modules/graceful_shutdown.js.map +1 -1
- package/dist/modules/launcher/bot_supervisor.d.ts +1 -1
- package/dist/modules/launcher/bot_supervisor.d.ts.map +1 -1
- package/dist/modules/launcher/bot_supervisor.js +1 -4
- package/dist/modules/launcher/bot_supervisor.js.map +1 -1
- package/dist/modules/market_adapter_whitelist.d.ts +1 -2
- package/dist/modules/market_adapter_whitelist.d.ts.map +1 -1
- package/dist/modules/market_adapter_whitelist.js +1 -4
- package/dist/modules/market_adapter_whitelist.js.map +1 -1
- package/dist/modules/node_health_cache.d.ts +12 -4
- package/dist/modules/node_health_cache.d.ts.map +1 -1
- package/dist/modules/node_health_cache.js +13 -13
- package/dist/modules/node_health_cache.js.map +1 -1
- package/dist/modules/node_manager.d.ts.map +1 -1
- package/dist/modules/node_manager.js +3 -6
- package/dist/modules/node_manager.js.map +1 -1
- package/dist/modules/order/accounting.d.ts +2 -37
- package/dist/modules/order/accounting.d.ts.map +1 -1
- package/dist/modules/order/accounting.js +2 -64
- package/dist/modules/order/accounting.js.map +1 -1
- package/dist/modules/order/export.d.ts +1 -37
- package/dist/modules/order/export.d.ts.map +1 -1
- package/dist/modules/order/export.js +1 -1
- package/dist/modules/order/export.js.map +1 -1
- package/dist/modules/order/format.d.ts +28 -14
- package/dist/modules/order/format.d.ts.map +1 -1
- package/dist/modules/order/format.js +73 -18
- package/dist/modules/order/format.js.map +1 -1
- package/dist/modules/order/grid.d.ts +11 -5
- package/dist/modules/order/grid.d.ts.map +1 -1
- package/dist/modules/order/grid.js +79 -37
- package/dist/modules/order/grid.js.map +1 -1
- package/dist/modules/order/grid_reconcile_internal.js +2 -2
- package/dist/modules/order/grid_reconcile_internal.js.map +1 -1
- package/dist/modules/order/logger_state.d.ts +3 -45
- package/dist/modules/order/logger_state.d.ts.map +1 -1
- package/dist/modules/order/logger_state.js +3 -55
- package/dist/modules/order/logger_state.js.map +1 -1
- package/dist/modules/order/manager.d.ts +0 -4
- package/dist/modules/order/manager.d.ts.map +1 -1
- package/dist/modules/order/manager.js +3 -9
- package/dist/modules/order/manager.js.map +1 -1
- package/dist/modules/order/sync_engine.d.ts +0 -2
- package/dist/modules/order/sync_engine.d.ts.map +1 -1
- package/dist/modules/order/sync_engine.js +1 -4
- package/dist/modules/order/sync_engine.js.map +1 -1
- package/dist/modules/order/utils/math.d.ts +2 -11
- package/dist/modules/order/utils/math.d.ts.map +1 -1
- package/dist/modules/order/utils/math.js +3 -14
- package/dist/modules/order/utils/math.js.map +1 -1
- package/dist/modules/order/utils/order.d.ts +1 -17
- package/dist/modules/order/utils/order.d.ts.map +1 -1
- package/dist/modules/order/utils/order.js +3 -21
- package/dist/modules/order/utils/order.js.map +1 -1
- package/dist/modules/order/utils/system.d.ts +1 -11
- package/dist/modules/order/utils/system.d.ts.map +1 -1
- package/dist/modules/order/utils/system.js +3 -3
- package/dist/modules/order/utils/system.js.map +1 -1
- package/dist/modules/order/utils/validate.d.ts +1 -26
- package/dist/modules/order/utils/validate.d.ts.map +1 -1
- package/dist/modules/order/utils/validate.js +1 -1
- package/dist/modules/order/utils/validate.js.map +1 -1
- package/dist/modules/order/working_grid.d.ts +3 -9
- package/dist/modules/order/working_grid.d.ts.map +1 -1
- package/dist/modules/order/working_grid.js +3 -11
- package/dist/modules/order/working_grid.js.map +1 -1
- package/dist/modules/runtime_settings.js +1 -1
- package/dist/modules/runtime_settings.js.map +1 -1
- package/dist/pm2.d.ts +1 -1
- package/dist/pm2.d.ts.map +1 -1
- package/dist/pm2.js +1 -4
- package/dist/pm2.js.map +1 -1
- package/dist/scripts/analyze-orders.d.ts.map +1 -1
- package/dist/scripts/analyze-orders.js +36 -45
- package/dist/scripts/analyze-orders.js.map +1 -1
- package/dist/scripts/sync-version.js +22 -0
- package/dist/scripts/sync-version.js.map +1 -1
- package/ecosystem.config.cjs +32 -0
- package/package.json +3 -1
- package/scripts/README.md +4 -4
- package/dist/analysis/trend_detection/hurst_analyzer.d.ts.map +0 -1
- package/dist/analysis/trend_detection/hurst_analyzer.js.map +0 -1
- package/dist/analysis/trend_detection/kalman_trend_analyzer.d.ts.map +0 -1
- package/dist/analysis/trend_detection/kalman_trend_analyzer.js.map +0 -1
- package/dist/analysis/trend_detection/kalman_velocity_smoothing.d.ts.map +0 -1
- package/dist/analysis/trend_detection/kalman_velocity_smoothing.js.map +0 -1
- package/dist/analysis/trend_detection/permutation_entropy_analyzer.d.ts.map +0 -1
- package/dist/analysis/trend_detection/permutation_entropy_analyzer.js.map +0 -1
- package/dist/market_adapter/index.d.ts +0 -32
- package/dist/market_adapter/index.d.ts.map +0 -1
- package/dist/market_adapter/index.js +0 -39
- package/dist/market_adapter/index.js.map +0 -1
- package/dist/scripts/fix-err-message.d.ts +0 -3
- package/dist/scripts/fix-err-message.d.ts.map +0 -1
- package/dist/scripts/fix-err-message.js +0 -193
- package/dist/scripts/fix-err-message.js.map +0 -1
- /package/dist/{analysis/trend_detection → market_adapter/core/signals}/hurst_analyzer.d.ts +0 -0
- /package/dist/{analysis/trend_detection → market_adapter/core/signals}/permutation_entropy_analyzer.d.ts +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/**
|
|
3
|
+
* Dynamic weight per-bar series — canonical implementation shared by the live
|
|
4
|
+
* market adapter service, the research test harness, and the browser-embedded
|
|
5
|
+
* dynamic-weight chart script.
|
|
6
|
+
*
|
|
7
|
+
* Computes the per-bar AMA/Kalman offset channels, the alpha-blended combined
|
|
8
|
+
* series, the pre-gain dead-band gate, the final gain/clamp, and the signal
|
|
9
|
+
* confirmation latch — the exact shape both the live `_computeDynamicWeights`
|
|
10
|
+
* and the interactive research chart render.
|
|
11
|
+
*
|
|
12
|
+
* This module is intentionally fully self-contained (no imports): the chart
|
|
13
|
+
* generator embeds its exact source into generated HTML via fn.toString(), so
|
|
14
|
+
* every consumer runs one logic path. The pure helper computeAverageAmaSlopePct
|
|
15
|
+
* is re-exported by strategies/ama_slope_model.ts so Node callers keep their
|
|
16
|
+
* existing import path.
|
|
17
|
+
*/
|
|
18
|
+
function computeAverageAmaSlopePct(current, past, lookbackBars) {
|
|
19
|
+
const safeLookbackBars = Number.isFinite(lookbackBars) && lookbackBars > 0
|
|
20
|
+
? Math.ceil(lookbackBars)
|
|
21
|
+
: 1;
|
|
22
|
+
if (!Number.isFinite(current) || !Number.isFinite(past) || past === 0) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return ((current - past) / past * 100) / safeLookbackBars;
|
|
26
|
+
}
|
|
27
|
+
function echoLatchSeries(appliedSeries, preGainSeries, confirmBars) {
|
|
28
|
+
const n = Array.isArray(appliedSeries) ? appliedSeries.length : 0;
|
|
29
|
+
const echoedAppliedSeries = new Array(n).fill(0);
|
|
30
|
+
const echoedPreGainSeries = new Array(n).fill(0);
|
|
31
|
+
const safeConfirmBars = Math.max(0, Math.min(5, Math.round(confirmBars)));
|
|
32
|
+
if (safeConfirmBars === 0) {
|
|
33
|
+
for (let i = 0; i < n; i++) {
|
|
34
|
+
echoedAppliedSeries[i] = appliedSeries[i];
|
|
35
|
+
echoedPreGainSeries[i] = preGainSeries?.[i];
|
|
36
|
+
}
|
|
37
|
+
return { echoedAppliedSeries, echoedPreGainSeries };
|
|
38
|
+
}
|
|
39
|
+
let latchedSign = 0;
|
|
40
|
+
let pendingSign = 0;
|
|
41
|
+
let pendingCount = 0;
|
|
42
|
+
let latchedOff = 0;
|
|
43
|
+
let latchedGatedOff = 0;
|
|
44
|
+
for (let i = 0; i < n; i++) {
|
|
45
|
+
const raw = appliedSeries[i];
|
|
46
|
+
const sign = raw > 0 ? 1 : raw < 0 ? -1 : 0;
|
|
47
|
+
if (sign === latchedSign) {
|
|
48
|
+
pendingSign = 0;
|
|
49
|
+
pendingCount = 0;
|
|
50
|
+
latchedOff = raw;
|
|
51
|
+
latchedGatedOff = preGainSeries?.[i];
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
if (pendingSign !== sign) {
|
|
55
|
+
pendingSign = sign;
|
|
56
|
+
pendingCount = 1;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
pendingCount++;
|
|
60
|
+
}
|
|
61
|
+
if (pendingCount >= safeConfirmBars) {
|
|
62
|
+
latchedSign = sign;
|
|
63
|
+
pendingSign = 0;
|
|
64
|
+
pendingCount = 0;
|
|
65
|
+
latchedOff = raw;
|
|
66
|
+
latchedGatedOff = preGainSeries?.[i];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
echoedAppliedSeries[i] = latchedOff;
|
|
70
|
+
echoedPreGainSeries[i] = latchedGatedOff;
|
|
71
|
+
}
|
|
72
|
+
return { echoedAppliedSeries, echoedPreGainSeries };
|
|
73
|
+
}
|
|
74
|
+
function roundToN(value, factor) {
|
|
75
|
+
if (!Number.isFinite(value))
|
|
76
|
+
return NaN;
|
|
77
|
+
return Math.round(value * factor) / factor;
|
|
78
|
+
}
|
|
79
|
+
function computeDynamicWeightSeries(inputs) {
|
|
80
|
+
const { amaValues, kalmanVelocityPct, kalmanDisplacementPct, kalmanIsReady, regimeMultipliers, lookbackBars, amaErPeriod, amaClipThreshold, kalClipThreshold, neutralZonePct, amaMaxSlopePct, kalmanMaxSlopePct, offsetClamp, dispScaleMinPct, alpha, dw, gain, minOutputThreshold, signalConfirmBars, clampFinalOutput = true, } = inputs;
|
|
81
|
+
const n = Array.isArray(amaValues) ? amaValues.length : 0;
|
|
82
|
+
const channelNorm = Math.max(Math.abs(offsetClamp), 1e-9);
|
|
83
|
+
const amaReadyBar = lookbackBars + Math.max(0, Math.ceil(amaErPeriod));
|
|
84
|
+
const amaOffsets = new Array(n).fill(0);
|
|
85
|
+
const kalmanOffsets = new Array(n).fill(0);
|
|
86
|
+
for (let i = 0; i < n; i++) {
|
|
87
|
+
if (i < amaReadyBar)
|
|
88
|
+
continue;
|
|
89
|
+
const last = amaValues[i];
|
|
90
|
+
const past = amaValues[i - lookbackBars];
|
|
91
|
+
const sp = computeAverageAmaSlopePct(last, past, lookbackBars);
|
|
92
|
+
if (sp == null)
|
|
93
|
+
continue;
|
|
94
|
+
const csp = Math.max(-amaClipThreshold, Math.min(amaClipThreshold, sp));
|
|
95
|
+
if (Math.abs(csp) < neutralZonePct)
|
|
96
|
+
continue;
|
|
97
|
+
amaOffsets[i] = Math.max(-offsetClamp, Math.min(offsetClamp, (csp / amaMaxSlopePct) * offsetClamp));
|
|
98
|
+
}
|
|
99
|
+
for (let i = 0; i < n; i++) {
|
|
100
|
+
const vp = kalmanVelocityPct?.[i];
|
|
101
|
+
const dp = kalmanDisplacementPct?.[i];
|
|
102
|
+
if (!kalmanIsReady?.[i] || vp == null || dp == null)
|
|
103
|
+
continue;
|
|
104
|
+
const clippedV = Math.max(-kalClipThreshold, Math.min(kalClipThreshold, vp));
|
|
105
|
+
if (Math.abs(clippedV) < neutralZonePct)
|
|
106
|
+
continue;
|
|
107
|
+
const dispScale = Math.max(1e-6, dispScaleMinPct);
|
|
108
|
+
const dispConf = Math.min(Math.abs(dp) / dispScale, 1.0);
|
|
109
|
+
const momAlign = Math.max(0, (clippedV * dp) / (Math.abs(clippedV) * Math.abs(dp) + 1e-10));
|
|
110
|
+
const composite = clippedV * (1 - dw + dw * dispConf * momAlign);
|
|
111
|
+
kalmanOffsets[i] = Math.max(-offsetClamp, Math.min(offsetClamp, (composite / kalmanMaxSlopePct) * offsetClamp));
|
|
112
|
+
}
|
|
113
|
+
const combinedOffSeries = new Array(n).fill(0);
|
|
114
|
+
const gatedOffSeries = new Array(n).fill(0);
|
|
115
|
+
for (let i = 0; i < n; i++) {
|
|
116
|
+
const blendedOff = (alpha * (amaOffsets[i] / channelNorm) + (1 - alpha) * (kalmanOffsets[i] / channelNorm));
|
|
117
|
+
const regimeAdjusted = blendedOff * (regimeMultipliers?.[i] ?? 1.0);
|
|
118
|
+
const gatedOff = Math.abs(regimeAdjusted) < minOutputThreshold ? 0 : regimeAdjusted;
|
|
119
|
+
const applied = clampFinalOutput
|
|
120
|
+
? Math.max(-offsetClamp, Math.min(offsetClamp, gatedOff * gain))
|
|
121
|
+
: (gatedOff * gain);
|
|
122
|
+
gatedOffSeries[i] = gatedOff;
|
|
123
|
+
combinedOffSeries[i] = roundToN(applied, 1000);
|
|
124
|
+
}
|
|
125
|
+
const latched = echoLatchSeries(combinedOffSeries, gatedOffSeries, signalConfirmBars);
|
|
126
|
+
return {
|
|
127
|
+
amaOffsets,
|
|
128
|
+
kalmanOffsets,
|
|
129
|
+
combinedOffSeries,
|
|
130
|
+
gatedOffSeries,
|
|
131
|
+
echoedOffSeries: latched.echoedAppliedSeries,
|
|
132
|
+
echoedGatedOffSeries: latched.echoedPreGainSeries,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export { computeDynamicWeightSeries, computeAverageAmaSlopePct, echoLatchSeries, roundToN };
|
|
136
|
+
//# sourceMappingURL=dynamic_weight_series.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic_weight_series.js","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/dynamic_weight_series.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
declare function resolvePeNodes(peNodes?: any): any[];
|
|
3
|
-
declare function classifyHurstRegime(h: any, hurstZoneBand?: any): "TRENDING" | "MEAN_REVERTING" | "RANDOM";
|
|
4
|
-
declare function classifyPeRegime(pe: any, peNodes?: any): "STRUCTURED" | "NOISE" | "MIXED";
|
|
5
|
-
/**
|
|
6
|
-
* Bilinear interpolation over the 3×3 regime table.
|
|
7
|
-
*
|
|
8
|
-
* For a given (h, pe), find the enclosing cell in the node grid, compute the
|
|
9
|
-
* fractional position within that cell, and blend the four corner values.
|
|
10
|
-
* Inputs outside the node range are clamped to the table boundary.
|
|
11
|
-
*
|
|
12
|
-
* @param {number} h - Hurst exponent [0, 1]
|
|
13
|
-
* @param {number} pe - Normalized permutation entropy [0, 1]
|
|
14
|
-
* @param {Array} [regimeTable] - Optional override for regime table
|
|
15
|
-
* @param {Object} [opts] - Optional threshold overrides for interpolation
|
|
16
|
-
* @param {number} [opts.hurstZoneBand] – Override Hurst neutral-zone width
|
|
17
|
-
* @param {Array} [opts.peNodes] – Override entropy thresholds
|
|
18
|
-
* @returns {number} - Interpolated multiplier
|
|
19
|
-
*/
|
|
20
|
-
declare function bilinearInterpolate(h: any, pe: any, regimeTable?: any, opts?: any): number;
|
|
1
|
+
import { bilinearInterpolate } from './regime_interp.js';
|
|
21
2
|
/**
|
|
22
3
|
* Compute the Hurst+PE regime multiplier from a price series.
|
|
23
4
|
*
|
|
5
|
+
* Bilinear interpolation over the 3×3 regime table is delegated to the
|
|
6
|
+
* canonical pure implementation in strategies/regime_interp.ts (shared with the
|
|
7
|
+
* browser-embedded chart scripts).
|
|
8
|
+
*
|
|
24
9
|
* Feeds all prices through HurstAnalyzer and PermutationEntropyAnalyzer,
|
|
25
10
|
* then bilinear-interpolates the regime table to produce a multiplier that
|
|
26
11
|
* gates the AMA slope offset in production weight computation.
|
|
@@ -54,5 +39,5 @@ declare function computeRegimeMultiplier(closes: any, opts?: any): {
|
|
|
54
39
|
isReady: boolean;
|
|
55
40
|
series: number[];
|
|
56
41
|
};
|
|
57
|
-
export { computeRegimeMultiplier, bilinearInterpolate
|
|
42
|
+
export { computeRegimeMultiplier, bilinearInterpolate };
|
|
58
43
|
//# sourceMappingURL=regime_gate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regime_gate.d.ts","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/regime_gate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"regime_gate.d.ts","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/regime_gate.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAgCzD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,iBAAS,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,GAAE,GAAQ;;;;;;;;;;;;;;;;EAgE3D;AAED,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { HurstAnalyzer } from '
|
|
2
|
-
import { PermutationEntropyAnalyzer } from '
|
|
1
|
+
import { HurstAnalyzer } from '../signals/hurst_analyzer.js';
|
|
2
|
+
import { PermutationEntropyAnalyzer } from '../signals/permutation_entropy_analyzer.js';
|
|
3
3
|
import { MARKET_ADAPTER } from '../../../modules/constants.js';
|
|
4
4
|
import { roundTo } from '../../../modules/utils/math_utils.js';
|
|
5
|
+
import { bilinearInterpolate } from './regime_interp.js';
|
|
5
6
|
'use strict';
|
|
6
7
|
const HURST_CONFIG = MARKET_ADAPTER.HURST_CONFIG;
|
|
7
8
|
const PE_CONFIG = MARKET_ADAPTER.PE_CONFIG;
|
|
@@ -31,77 +32,13 @@ function classifyPeRegime(pe, peNodes = null) {
|
|
|
31
32
|
return 'NOISE';
|
|
32
33
|
return 'MIXED';
|
|
33
34
|
}
|
|
34
|
-
/**
|
|
35
|
-
* Bilinear interpolation over the 3×3 regime table.
|
|
36
|
-
*
|
|
37
|
-
* For a given (h, pe), find the enclosing cell in the node grid, compute the
|
|
38
|
-
* fractional position within that cell, and blend the four corner values.
|
|
39
|
-
* Inputs outside the node range are clamped to the table boundary.
|
|
40
|
-
*
|
|
41
|
-
* @param {number} h - Hurst exponent [0, 1]
|
|
42
|
-
* @param {number} pe - Normalized permutation entropy [0, 1]
|
|
43
|
-
* @param {Array} [regimeTable] - Optional override for regime table
|
|
44
|
-
* @param {Object} [opts] - Optional threshold overrides for interpolation
|
|
45
|
-
* @param {number} [opts.hurstZoneBand] – Override Hurst neutral-zone width
|
|
46
|
-
* @param {Array} [opts.peNodes] – Override entropy thresholds
|
|
47
|
-
* @returns {number} - Interpolated multiplier
|
|
48
|
-
*/
|
|
49
|
-
function bilinearInterpolate(h, pe, regimeTable = null, opts = {}) {
|
|
50
|
-
const table = regimeTable ?? MARKET_ADAPTER.REGIME_TABLE;
|
|
51
|
-
const H_NODES = resolveHNodes(opts.hurstZoneBand);
|
|
52
|
-
const PE_NODES = resolvePeNodes(opts.peNodes);
|
|
53
|
-
// --- Hurst axis (H_NODES derived from HURST_ZONE_BAND, decreasing) ---
|
|
54
|
-
// Find which interval h falls in: row r0, r1 = r0+1, fraction tRow toward r1
|
|
55
|
-
let r0, tRow;
|
|
56
|
-
if (h >= H_NODES[0]) {
|
|
57
|
-
r0 = 0;
|
|
58
|
-
tRow = 0; // at or above top node
|
|
59
|
-
}
|
|
60
|
-
else if (h <= H_NODES[2]) {
|
|
61
|
-
r0 = 1;
|
|
62
|
-
tRow = 1; // at or below bottom node
|
|
63
|
-
}
|
|
64
|
-
else if (h >= H_NODES[1]) {
|
|
65
|
-
r0 = 0;
|
|
66
|
-
tRow = (H_NODES[0] - h) / (H_NODES[0] - H_NODES[1]); // between nodes 0 and 1
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
r0 = 1;
|
|
70
|
-
tRow = (H_NODES[1] - h) / (H_NODES[1] - H_NODES[2]); // between nodes 1 and 2
|
|
71
|
-
}
|
|
72
|
-
const r1 = Math.min(2, r0 + 1);
|
|
73
|
-
// --- PE axis (PE_NODES from constants, increasing) ---
|
|
74
|
-
// Find which interval pe falls in: col c0, c1 = c0+1, fraction tCol toward c1
|
|
75
|
-
let c0, tCol;
|
|
76
|
-
if (pe <= PE_NODES[0]) {
|
|
77
|
-
c0 = 0;
|
|
78
|
-
tCol = 0;
|
|
79
|
-
}
|
|
80
|
-
else if (pe >= PE_NODES[2]) {
|
|
81
|
-
c0 = 1;
|
|
82
|
-
tCol = 1;
|
|
83
|
-
}
|
|
84
|
-
else if (pe <= PE_NODES[1]) {
|
|
85
|
-
c0 = 0;
|
|
86
|
-
tCol = (pe - PE_NODES[0]) / (PE_NODES[1] - PE_NODES[0]);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
c0 = 1;
|
|
90
|
-
tCol = (pe - PE_NODES[1]) / (PE_NODES[2] - PE_NODES[1]);
|
|
91
|
-
}
|
|
92
|
-
const c1 = Math.min(2, c0 + 1);
|
|
93
|
-
// --- Bilinear blend ---
|
|
94
|
-
const v00 = table[r0][c0];
|
|
95
|
-
const v01 = table[r0][c1];
|
|
96
|
-
const v10 = table[r1][c0];
|
|
97
|
-
const v11 = table[r1][c1];
|
|
98
|
-
const top = v00 * (1 - tCol) + v01 * tCol;
|
|
99
|
-
const bottom = v10 * (1 - tCol) + v11 * tCol;
|
|
100
|
-
return top * (1 - tRow) + bottom * tRow;
|
|
101
|
-
}
|
|
102
35
|
/**
|
|
103
36
|
* Compute the Hurst+PE regime multiplier from a price series.
|
|
104
37
|
*
|
|
38
|
+
* Bilinear interpolation over the 3×3 regime table is delegated to the
|
|
39
|
+
* canonical pure implementation in strategies/regime_interp.ts (shared with the
|
|
40
|
+
* browser-embedded chart scripts).
|
|
41
|
+
*
|
|
105
42
|
* Feeds all prices through HurstAnalyzer and PermutationEntropyAnalyzer,
|
|
106
43
|
* then bilinear-interpolates the regime table to produce a multiplier that
|
|
107
44
|
* gates the AMA slope offset in production weight computation.
|
|
@@ -120,9 +57,9 @@ function bilinearInterpolate(h, pe, regimeTable = null, opts = {}) {
|
|
|
120
57
|
*/
|
|
121
58
|
function computeRegimeMultiplier(closes, opts = {}) {
|
|
122
59
|
const sensitivity = Number.isFinite(opts.regimeSensitivity) ? opts.regimeSensitivity : 1.0;
|
|
123
|
-
const regimeTable = opts.regimeTable ??
|
|
124
|
-
const hurstZoneBand = Number.isFinite(opts.hurstZoneBand) ? opts.hurstZoneBand :
|
|
125
|
-
const peNodes = Array.isArray(opts.peNodes) ? opts.peNodes :
|
|
60
|
+
const regimeTable = opts.regimeTable ?? MARKET_ADAPTER.REGIME_TABLE;
|
|
61
|
+
const hurstZoneBand = Number.isFinite(opts.hurstZoneBand) ? opts.hurstZoneBand : MARKET_ADAPTER.HURST_ZONE_BAND;
|
|
62
|
+
const peNodes = Array.isArray(opts.peNodes) ? opts.peNodes : MARKET_ADAPTER.PE_NODES;
|
|
126
63
|
const hurstCfg = opts.hurstConfig ?? HURST_CONFIG;
|
|
127
64
|
const peCfg = opts.peConfig ?? PE_CONFIG;
|
|
128
65
|
const notReady = {
|
|
@@ -178,5 +115,5 @@ function computeRegimeMultiplier(closes, opts = {}) {
|
|
|
178
115
|
series: series.map((value) => roundTo(value, 1000)),
|
|
179
116
|
};
|
|
180
117
|
}
|
|
181
|
-
export { computeRegimeMultiplier, bilinearInterpolate
|
|
118
|
+
export { computeRegimeMultiplier, bilinearInterpolate };
|
|
182
119
|
//# sourceMappingURL=regime_gate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regime_gate.js","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/regime_gate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"regime_gate.js","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/regime_gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regime bilinear interpolation — canonical implementation shared by the live
|
|
3
|
+
* regime gate (regime_gate.ts) and the browser-embedded dynamic-weight chart
|
|
4
|
+
* script (injected via fn.toString()).
|
|
5
|
+
*
|
|
6
|
+
* Self-contained on purpose so the chart generator can inject this exact source
|
|
7
|
+
* into generated HTML — do not add imports referenced from the function body.
|
|
8
|
+
* Node-side defaults below mirror MARKET_ADAPTER.REGIME_TABLE /
|
|
9
|
+
* HURST_ZONE_BAND / PE_NODES; callers may pass explicit hNodes/pNodes/table.
|
|
10
|
+
*/
|
|
11
|
+
declare function bilinearInterpolate(h: any, pe: any, regimeTable?: any, opts?: any): number;
|
|
12
|
+
export { bilinearInterpolate };
|
|
13
|
+
//# sourceMappingURL=regime_interp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regime_interp.d.ts","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/regime_interp.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,iBAAS,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,GAAE,GAAU,EAAE,IAAI,GAAE,GAAQ,UAkDpF;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/**
|
|
3
|
+
* Regime bilinear interpolation — canonical implementation shared by the live
|
|
4
|
+
* regime gate (regime_gate.ts) and the browser-embedded dynamic-weight chart
|
|
5
|
+
* script (injected via fn.toString()).
|
|
6
|
+
*
|
|
7
|
+
* Self-contained on purpose so the chart generator can inject this exact source
|
|
8
|
+
* into generated HTML — do not add imports referenced from the function body.
|
|
9
|
+
* Node-side defaults below mirror MARKET_ADAPTER.REGIME_TABLE /
|
|
10
|
+
* HURST_ZONE_BAND / PE_NODES; callers may pass explicit hNodes/pNodes/table.
|
|
11
|
+
*/
|
|
12
|
+
function bilinearInterpolate(h, pe, regimeTable = null, opts = {}) {
|
|
13
|
+
const table = regimeTable ?? [
|
|
14
|
+
[1.0, 0.7, 0.3],
|
|
15
|
+
[0.6, 0.4, 0.15],
|
|
16
|
+
[0.3, 0.2, 0.05],
|
|
17
|
+
];
|
|
18
|
+
const band = Number.isFinite(opts.hurstZoneBand) ? opts.hurstZoneBand : 0.05;
|
|
19
|
+
const H_NODES = (Array.isArray(opts.hNodes) && opts.hNodes.length === 3 && opts.hNodes.every(Number.isFinite))
|
|
20
|
+
? opts.hNodes
|
|
21
|
+
: [0.5 + band, 0.5, 0.5 - band];
|
|
22
|
+
const PE_NODES = (Array.isArray(opts.peNodes) && opts.peNodes.length === 3 && opts.peNodes.every(Number.isFinite))
|
|
23
|
+
? opts.peNodes
|
|
24
|
+
: [0.60, 0.725, 0.85];
|
|
25
|
+
// --- Hurst axis (H_NODES decreasing) ---
|
|
26
|
+
// Find which interval h falls in: row r0, r1 = r0+1, fraction tRow toward r1
|
|
27
|
+
let r0, tRow;
|
|
28
|
+
if (h >= H_NODES[0]) {
|
|
29
|
+
r0 = 0;
|
|
30
|
+
tRow = 0; // at or above top node
|
|
31
|
+
}
|
|
32
|
+
else if (h <= H_NODES[2]) {
|
|
33
|
+
r0 = 1;
|
|
34
|
+
tRow = 1; // at or below bottom node
|
|
35
|
+
}
|
|
36
|
+
else if (h >= H_NODES[1]) {
|
|
37
|
+
r0 = 0;
|
|
38
|
+
tRow = (H_NODES[0] - h) / (H_NODES[0] - H_NODES[1]); // between nodes 0 and 1
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
r0 = 1;
|
|
42
|
+
tRow = (H_NODES[1] - h) / (H_NODES[1] - H_NODES[2]); // between nodes 1 and 2
|
|
43
|
+
}
|
|
44
|
+
const r1 = Math.min(2, r0 + 1);
|
|
45
|
+
// --- PE axis (PE_NODES increasing) ---
|
|
46
|
+
let c0, tCol;
|
|
47
|
+
if (pe <= PE_NODES[0]) {
|
|
48
|
+
c0 = 0;
|
|
49
|
+
tCol = 0;
|
|
50
|
+
}
|
|
51
|
+
else if (pe >= PE_NODES[2]) {
|
|
52
|
+
c0 = 1;
|
|
53
|
+
tCol = 1;
|
|
54
|
+
}
|
|
55
|
+
else if (pe <= PE_NODES[1]) {
|
|
56
|
+
c0 = 0;
|
|
57
|
+
tCol = (pe - PE_NODES[0]) / (PE_NODES[1] - PE_NODES[0]);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
c0 = 1;
|
|
61
|
+
tCol = (pe - PE_NODES[1]) / (PE_NODES[2] - PE_NODES[1]);
|
|
62
|
+
}
|
|
63
|
+
const c1 = Math.min(2, c0 + 1);
|
|
64
|
+
// --- Bilinear blend ---
|
|
65
|
+
const v00 = table[r0][c0];
|
|
66
|
+
const v01 = table[r0][c1];
|
|
67
|
+
const v10 = table[r1][c0];
|
|
68
|
+
const v11 = table[r1][c1];
|
|
69
|
+
const top = v00 * (1 - tCol) + v01 * tCol;
|
|
70
|
+
const bottom = v10 * (1 - tCol) + v11 * tCol;
|
|
71
|
+
return top * (1 - tRow) + bottom * tRow;
|
|
72
|
+
}
|
|
73
|
+
export { bilinearInterpolate };
|
|
74
|
+
//# sourceMappingURL=regime_interp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regime_interp.js","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/regime_interp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symmetric volatility shift — canonical implementation shared by the AMA slope
|
|
3
|
+
* model, the volatility research tool, and the browser-embedded chart scripts.
|
|
4
|
+
*
|
|
5
|
+
* Signal path (mirrors the live adapter):
|
|
6
|
+
* rawDelta = -weightVariance^exponent * scaleX
|
|
7
|
+
* clampedRawDelta = clamp(rawDelta, -clampValue, 0)
|
|
8
|
+
* symmetricDelta = |clampedRawDelta| < threshold ? 0 : clampedRawDelta
|
|
9
|
+
* effectiveWeight = clamp(baselineWeight + symmetricDelta, minWeight, maxWeight)
|
|
10
|
+
*
|
|
11
|
+
* Self-contained on purpose so the chart generators can inject this exact source
|
|
12
|
+
* into generated HTML — do not add imports referenced from the function body.
|
|
13
|
+
*/
|
|
14
|
+
declare function computeVolatilityShift(weightVariance: any, opts?: any): {
|
|
15
|
+
rawSymmetricDelta: number;
|
|
16
|
+
symmetricDelta: number;
|
|
17
|
+
effectiveWeight: number;
|
|
18
|
+
sellW: number;
|
|
19
|
+
buyW: number;
|
|
20
|
+
};
|
|
21
|
+
export { computeVolatilityShift };
|
|
22
|
+
//# sourceMappingURL=volatility_shift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volatility_shift.d.ts","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/volatility_shift.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,iBAAS,sBAAsB,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,GAAE,GAAQ;;;;;;EA+BlE;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/**
|
|
3
|
+
* Symmetric volatility shift — canonical implementation shared by the AMA slope
|
|
4
|
+
* model, the volatility research tool, and the browser-embedded chart scripts.
|
|
5
|
+
*
|
|
6
|
+
* Signal path (mirrors the live adapter):
|
|
7
|
+
* rawDelta = -weightVariance^exponent * scaleX
|
|
8
|
+
* clampedRawDelta = clamp(rawDelta, -clampValue, 0)
|
|
9
|
+
* symmetricDelta = |clampedRawDelta| < threshold ? 0 : clampedRawDelta
|
|
10
|
+
* effectiveWeight = clamp(baselineWeight + symmetricDelta, minWeight, maxWeight)
|
|
11
|
+
*
|
|
12
|
+
* Self-contained on purpose so the chart generators can inject this exact source
|
|
13
|
+
* into generated HTML — do not add imports referenced from the function body.
|
|
14
|
+
*/
|
|
15
|
+
function computeVolatilityShift(weightVariance, opts = {}) {
|
|
16
|
+
const { exponent = 1.0, scaleX = 10.0, threshold = 0.1, clampValue = 0.5, minWeight = -1, maxWeight = 2, baselineWeight = 0.5, } = opts;
|
|
17
|
+
const safeVariance = Number.isFinite(weightVariance) && weightVariance > 0 ? weightVariance : 0;
|
|
18
|
+
const safeExponent = Number.isFinite(exponent) && exponent >= 0 ? exponent : 1.0;
|
|
19
|
+
const safeScaleX = Number.isFinite(scaleX) && scaleX >= 0 ? scaleX : 10.0;
|
|
20
|
+
const safeThreshold = Number.isFinite(threshold) && threshold >= 0 ? threshold : 0.1;
|
|
21
|
+
const safeClamp = Number.isFinite(clampValue) && clampValue >= 0 ? clampValue : 0.5;
|
|
22
|
+
const effectiveExponent = Math.max(0.5, Math.min(1.0, safeExponent));
|
|
23
|
+
const effectiveScaleX = Math.max(1.0, Math.min(100.0, safeScaleX));
|
|
24
|
+
const rawDelta = -Math.pow(safeVariance, effectiveExponent) * effectiveScaleX;
|
|
25
|
+
const clampedRawDelta = Math.max(safeClamp * -1, Math.min(0, rawDelta));
|
|
26
|
+
const symmetricDelta = Math.abs(clampedRawDelta) < safeThreshold ? 0 : clampedRawDelta;
|
|
27
|
+
const effectiveWeight = Math.max(minWeight, Math.min(maxWeight, baselineWeight + symmetricDelta));
|
|
28
|
+
return {
|
|
29
|
+
rawSymmetricDelta: clampedRawDelta,
|
|
30
|
+
symmetricDelta,
|
|
31
|
+
effectiveWeight,
|
|
32
|
+
sellW: effectiveWeight,
|
|
33
|
+
buyW: effectiveWeight,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export { computeVolatilityShift };
|
|
37
|
+
//# sourceMappingURL=volatility_shift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volatility_shift.js","sourceRoot":"","sources":["../../../../market_adapter/core/strategies/volatility_shift.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;;;;;GAYG;AAEH,SAAS,sBAAsB,CAAC,cAAmB,EAAE,OAAY,EAAE;IAC/D,MAAM,EACF,QAAQ,GAAG,GAAG,EACd,MAAM,GAAG,IAAI,EACb,SAAS,GAAG,GAAG,EACf,UAAU,GAAG,GAAG,EAChB,SAAS,GAAG,CAAC,CAAC,EACd,SAAS,GAAG,CAAC,EACb,cAAc,GAAG,GAAG,GACvB,GAAG,IAAI,CAAC;IAET,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IACrF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IACpF,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEnE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,eAAe,CAAC;IAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IACvF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC;IAElG,OAAO;QACH,iBAAiB,EAAE,eAAe;QAClC,cAAc;QACd,eAAe;QACf,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,eAAe;KACxB,CAAC;AACN,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAA"}
|
|
@@ -3,8 +3,8 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
const require = createRequire(import.meta.url);
|
|
4
4
|
'use strict';
|
|
5
5
|
/**
|
|
6
|
-
* Probe public CEX APIs for
|
|
7
|
-
*
|
|
6
|
+
* Probe public CEX APIs for a base/quote cross and synthesize candles from
|
|
7
|
+
* the two legs against a common quote (e.g. XRP/USDT + XAUT/USDT).
|
|
8
8
|
*
|
|
9
9
|
* This is intended as a seed generator for brand-new market_adapter files.
|
|
10
10
|
* It does not rely on TradingView or Kibana.
|
|
@@ -21,7 +21,7 @@ const PROJECT_ROOT = PATHS.PROJECT_ROOT;
|
|
|
21
21
|
const { MARKET_ADAPTER } = require('../../modules/constants');
|
|
22
22
|
const { getAmaWarmupBars } = require('../core/strategies/ama');
|
|
23
23
|
const { getErrorMessage } = require('../../modules/utils/errors');
|
|
24
|
-
const { DEFAULTS: MARKET_ADAPTER_DEFAULTS, resolveAmaForBot, resolveBotCfg, } = require('../market_adapter');
|
|
24
|
+
const { DEFAULTS: MARKET_ADAPTER_DEFAULTS, resolveAmaForBot, resolveBotCfg, } = require('../market_adapter/market_adapter');
|
|
25
25
|
const DEFAULT_INTERVAL = '1h';
|
|
26
26
|
const DEFAULT_LIMIT = 1000;
|
|
27
27
|
const DEFAULT_BASE = 'XRP';
|
|
@@ -693,7 +693,6 @@ function parseArgs() {
|
|
|
693
693
|
limit: DEFAULT_LIMIT,
|
|
694
694
|
lookbackHours: null,
|
|
695
695
|
botName: null,
|
|
696
|
-
botIndex: null,
|
|
697
696
|
botsFile: DEFAULT_BOTS_FILE,
|
|
698
697
|
base: DEFAULT_BASE,
|
|
699
698
|
quote: DEFAULT_QUOTE,
|