@senpi/trading-recipe 1.0.21
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 +117 -0
- package/dist/actions/close-position/close-position.action.d.ts +16 -0
- package/dist/actions/close-position/close-position.action.d.ts.map +1 -0
- package/dist/actions/close-position/close-position.action.js +215 -0
- package/dist/actions/close-position/close-position.action.js.map +1 -0
- package/dist/actions/decision-engine.d.ts +32 -0
- package/dist/actions/decision-engine.d.ts.map +1 -0
- package/dist/actions/decision-engine.js +103 -0
- package/dist/actions/decision-engine.js.map +1 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts +12 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.js +74 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -0
- package/dist/actions/llm-decision/factory.d.ts +17 -0
- package/dist/actions/llm-decision/factory.d.ts.map +1 -0
- package/dist/actions/llm-decision/factory.js +29 -0
- package/dist/actions/llm-decision/factory.js.map +1 -0
- package/dist/actions/llm-decision/index.d.ts +8 -0
- package/dist/actions/llm-decision/index.d.ts.map +1 -0
- package/dist/actions/llm-decision/index.js +5 -0
- package/dist/actions/llm-decision/index.js.map +1 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts +14 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.js +58 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -0
- package/dist/actions/llm-decision/shared.d.ts +41 -0
- package/dist/actions/llm-decision/shared.d.ts.map +1 -0
- package/dist/actions/llm-decision/shared.js +117 -0
- package/dist/actions/llm-decision/shared.js.map +1 -0
- package/dist/actions/open-position/open-position.action.d.ts +16 -0
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -0
- package/dist/actions/open-position/open-position.action.js +275 -0
- package/dist/actions/open-position/open-position.action.js.map +1 -0
- package/dist/actions/types.d.ts +123 -0
- package/dist/actions/types.d.ts.map +1 -0
- package/dist/actions/types.js +3 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/cli/guide-commands.d.ts +26 -0
- package/dist/cli/guide-commands.d.ts.map +1 -0
- package/dist/cli/guide-commands.js +345 -0
- package/dist/cli/guide-commands.js.map +1 -0
- package/dist/cli/senpi-commands.d.ts +20 -0
- package/dist/cli/senpi-commands.d.ts.map +1 -0
- package/dist/cli/senpi-commands.js +115 -0
- package/dist/cli/senpi-commands.js.map +1 -0
- package/dist/constants/dsl/index.d.ts +45 -0
- package/dist/constants/dsl/index.d.ts.map +1 -0
- package/dist/constants/dsl/index.js +45 -0
- package/dist/constants/dsl/index.js.map +1 -0
- package/dist/context/context-builder.d.ts +14 -0
- package/dist/context/context-builder.d.ts.map +1 -0
- package/dist/context/context-builder.js +36 -0
- package/dist/context/context-builder.js.map +1 -0
- package/dist/context/index.d.ts +5 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +5 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/interpolate.d.ts +6 -0
- package/dist/context/interpolate.d.ts.map +1 -0
- package/dist/context/interpolate.js +15 -0
- package/dist/context/interpolate.js.map +1 -0
- package/dist/context/providers/asset-trend.provider.d.ts +42 -0
- package/dist/context/providers/asset-trend.provider.d.ts.map +1 -0
- package/dist/context/providers/asset-trend.provider.js +94 -0
- package/dist/context/providers/asset-trend.provider.js.map +1 -0
- package/dist/context/providers/index.d.ts +5 -0
- package/dist/context/providers/index.d.ts.map +1 -0
- package/dist/context/providers/index.js +5 -0
- package/dist/context/providers/index.js.map +1 -0
- package/dist/context/providers/regime.provider.d.ts +14 -0
- package/dist/context/providers/regime.provider.d.ts.map +1 -0
- package/dist/context/providers/regime.provider.js +29 -0
- package/dist/context/providers/regime.provider.js.map +1 -0
- package/dist/context/providers/signal.provider.d.ts +11 -0
- package/dist/context/providers/signal.provider.d.ts.map +1 -0
- package/dist/context/providers/signal.provider.js +27 -0
- package/dist/context/providers/signal.provider.js.map +1 -0
- package/dist/context/providers/strategy.provider.d.ts +14 -0
- package/dist/context/providers/strategy.provider.d.ts.map +1 -0
- package/dist/context/providers/strategy.provider.js +68 -0
- package/dist/context/providers/strategy.provider.js.map +1 -0
- package/dist/context/types.d.ts +30 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +2 -0
- package/dist/context/types.js.map +1 -0
- package/dist/dsl/config/index.d.ts +59 -0
- package/dist/dsl/config/index.d.ts.map +1 -0
- package/dist/dsl/config/index.js +171 -0
- package/dist/dsl/config/index.js.map +1 -0
- package/dist/dsl/constants/index.d.ts +3 -0
- package/dist/dsl/constants/index.d.ts.map +1 -0
- package/dist/dsl/constants/index.js +3 -0
- package/dist/dsl/constants/index.js.map +1 -0
- package/dist/dsl/engine/index.d.ts +7 -0
- package/dist/dsl/engine/index.d.ts.map +1 -0
- package/dist/dsl/engine/index.js +310 -0
- package/dist/dsl/engine/index.js.map +1 -0
- package/dist/dsl/events/bus-types.d.ts +7 -0
- package/dist/dsl/events/bus-types.d.ts.map +1 -0
- package/dist/dsl/events/bus-types.js +6 -0
- package/dist/dsl/events/bus-types.js.map +1 -0
- package/dist/dsl/events/guards.d.ts +17 -0
- package/dist/dsl/events/guards.d.ts.map +1 -0
- package/dist/dsl/events/guards.js +94 -0
- package/dist/dsl/events/guards.js.map +1 -0
- package/dist/dsl/events/handlers.d.ts +15 -0
- package/dist/dsl/events/handlers.d.ts.map +1 -0
- package/dist/dsl/events/handlers.js +252 -0
- package/dist/dsl/events/handlers.js.map +1 -0
- package/dist/dsl/events/index.d.ts +4 -0
- package/dist/dsl/events/index.d.ts.map +1 -0
- package/dist/dsl/events/index.js +4 -0
- package/dist/dsl/events/index.js.map +1 -0
- package/dist/dsl/index.d.ts +13 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +35 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl/monitor/index.d.ts +18 -0
- package/dist/dsl/monitor/index.d.ts.map +1 -0
- package/dist/dsl/monitor/index.js +310 -0
- package/dist/dsl/monitor/index.js.map +1 -0
- package/dist/dsl/plugin/index.d.ts +29 -0
- package/dist/dsl/plugin/index.d.ts.map +1 -0
- package/dist/dsl/plugin/index.js +85 -0
- package/dist/dsl/plugin/index.js.map +1 -0
- package/dist/dsl/types/index.d.ts +3 -0
- package/dist/dsl/types/index.d.ts.map +1 -0
- package/dist/dsl/types/index.js +3 -0
- package/dist/dsl/types/index.js.map +1 -0
- package/dist/health/index.d.ts +9 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +9 -0
- package/dist/health/index.js.map +1 -0
- package/dist/index.d.ts +95 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +235 -0
- package/dist/index.js.map +1 -0
- package/dist/leverage/max-leverage-cache.d.ts +10 -0
- package/dist/leverage/max-leverage-cache.d.ts.map +1 -0
- package/dist/leverage/max-leverage-cache.js +51 -0
- package/dist/leverage/max-leverage-cache.js.map +1 -0
- package/dist/leverage/resolve-leverage.d.ts +9 -0
- package/dist/leverage/resolve-leverage.d.ts.map +1 -0
- package/dist/leverage/resolve-leverage.js +15 -0
- package/dist/leverage/resolve-leverage.js.map +1 -0
- package/dist/risk/index.d.ts +9 -0
- package/dist/risk/index.d.ts.map +1 -0
- package/dist/risk/index.js +9 -0
- package/dist/risk/index.js.map +1 -0
- package/dist/runtime/action-registry.d.ts +12 -0
- package/dist/runtime/action-registry.d.ts.map +1 -0
- package/dist/runtime/action-registry.js +20 -0
- package/dist/runtime/action-registry.js.map +1 -0
- package/dist/runtime/build-action-scan-payload.d.ts +20 -0
- package/dist/runtime/build-action-scan-payload.d.ts.map +1 -0
- package/dist/runtime/build-action-scan-payload.js +40 -0
- package/dist/runtime/build-action-scan-payload.js.map +1 -0
- package/dist/runtime/bus.d.ts +6 -0
- package/dist/runtime/bus.d.ts.map +1 -0
- package/dist/runtime/bus.js +19 -0
- package/dist/runtime/bus.js.map +1 -0
- package/dist/runtime/create-action-context.d.ts +34 -0
- package/dist/runtime/create-action-context.d.ts.map +1 -0
- package/dist/runtime/create-action-context.js +22 -0
- package/dist/runtime/create-action-context.js.map +1 -0
- package/dist/runtime/create-actions.d.ts +30 -0
- package/dist/runtime/create-actions.d.ts.map +1 -0
- package/dist/runtime/create-actions.js +71 -0
- package/dist/runtime/create-actions.js.map +1 -0
- package/dist/runtime/create-runtime-context.d.ts +35 -0
- package/dist/runtime/create-runtime-context.d.ts.map +1 -0
- package/dist/runtime/create-runtime-context.js +33 -0
- package/dist/runtime/create-runtime-context.js.map +1 -0
- package/dist/runtime/create-scanner-module.d.ts +14 -0
- package/dist/runtime/create-scanner-module.d.ts.map +1 -0
- package/dist/runtime/create-scanner-module.js +26 -0
- package/dist/runtime/create-scanner-module.js.map +1 -0
- package/dist/runtime/create-scanner-providers-for-run.d.ts +20 -0
- package/dist/runtime/create-scanner-providers-for-run.d.ts.map +1 -0
- package/dist/runtime/create-scanner-providers-for-run.js +34 -0
- package/dist/runtime/create-scanner-providers-for-run.js.map +1 -0
- package/dist/runtime/default-state-dir.d.ts +10 -0
- package/dist/runtime/default-state-dir.d.ts.map +1 -0
- package/dist/runtime/default-state-dir.js +22 -0
- package/dist/runtime/default-state-dir.js.map +1 -0
- package/dist/runtime/env-resolve.d.ts +17 -0
- package/dist/runtime/env-resolve.d.ts.map +1 -0
- package/dist/runtime/env-resolve.js +45 -0
- package/dist/runtime/env-resolve.js.map +1 -0
- package/dist/runtime/hook-system.d.ts +7 -0
- package/dist/runtime/hook-system.d.ts.map +1 -0
- package/dist/runtime/hook-system.js +16 -0
- package/dist/runtime/hook-system.js.map +1 -0
- package/dist/runtime/index.d.ts +37 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +26 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/load-trading-strategy.d.ts +23 -0
- package/dist/runtime/load-trading-strategy.d.ts.map +1 -0
- package/dist/runtime/load-trading-strategy.js +130 -0
- package/dist/runtime/load-trading-strategy.js.map +1 -0
- package/dist/runtime/map-exit-config.d.ts +12 -0
- package/dist/runtime/map-exit-config.d.ts.map +1 -0
- package/dist/runtime/map-exit-config.js +91 -0
- package/dist/runtime/map-exit-config.js.map +1 -0
- package/dist/runtime/map-strategies-registration.d.ts +12 -0
- package/dist/runtime/map-strategies-registration.d.ts.map +1 -0
- package/dist/runtime/map-strategies-registration.js +52 -0
- package/dist/runtime/map-strategies-registration.js.map +1 -0
- package/dist/runtime/map-strategies.d.ts +12 -0
- package/dist/runtime/map-strategies.d.ts.map +1 -0
- package/dist/runtime/map-strategies.js +66 -0
- package/dist/runtime/map-strategies.js.map +1 -0
- package/dist/runtime/notifications.d.ts +12 -0
- package/dist/runtime/notifications.d.ts.map +1 -0
- package/dist/runtime/notifications.js +83 -0
- package/dist/runtime/notifications.js.map +1 -0
- package/dist/runtime/parse-interval.d.ts +11 -0
- package/dist/runtime/parse-interval.d.ts.map +1 -0
- package/dist/runtime/parse-interval.js +35 -0
- package/dist/runtime/parse-interval.js.map +1 -0
- package/dist/runtime/reconcile-state.d.ts +25 -0
- package/dist/runtime/reconcile-state.d.ts.map +1 -0
- package/dist/runtime/reconcile-state.js +112 -0
- package/dist/runtime/reconcile-state.js.map +1 -0
- package/dist/runtime/risk-guard.d.ts +6 -0
- package/dist/runtime/risk-guard.d.ts.map +1 -0
- package/dist/runtime/risk-guard.js +14 -0
- package/dist/runtime/risk-guard.js.map +1 -0
- package/dist/runtime/run.d.ts +21 -0
- package/dist/runtime/run.d.ts.map +1 -0
- package/dist/runtime/run.js +35 -0
- package/dist/runtime/run.js.map +1 -0
- package/dist/runtime/runtime.d.ts +40 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +251 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/scanner-registry.d.ts +22 -0
- package/dist/runtime/scanner-registry.d.ts.map +1 -0
- package/dist/runtime/scanner-registry.js +83 -0
- package/dist/runtime/scanner-registry.js.map +1 -0
- package/dist/runtime/strategy-registry.d.ts +49 -0
- package/dist/runtime/strategy-registry.d.ts.map +1 -0
- package/dist/runtime/strategy-registry.js +156 -0
- package/dist/runtime/strategy-registry.js.map +1 -0
- package/dist/runtime/trading-strategy-config.d.ts +6 -0
- package/dist/runtime/trading-strategy-config.d.ts.map +1 -0
- package/dist/runtime/trading-strategy-config.js +5 -0
- package/dist/runtime/trading-strategy-config.js.map +1 -0
- package/dist/runtime/trading-strategy-schema.d.ts +20093 -0
- package/dist/runtime/trading-strategy-schema.d.ts.map +1 -0
- package/dist/runtime/trading-strategy-schema.js +115 -0
- package/dist/runtime/trading-strategy-schema.js.map +1 -0
- package/dist/scanners/__tests__/fixtures/index.d.ts +3 -0
- package/dist/scanners/__tests__/fixtures/index.d.ts.map +1 -0
- package/dist/scanners/__tests__/fixtures/index.js +3 -0
- package/dist/scanners/__tests__/fixtures/index.js.map +1 -0
- package/dist/scanners/__tests__/fixtures/scan-results.d.ts +23 -0
- package/dist/scanners/__tests__/fixtures/scan-results.d.ts.map +1 -0
- package/dist/scanners/__tests__/fixtures/scan-results.js +128 -0
- package/dist/scanners/__tests__/fixtures/scan-results.js.map +1 -0
- package/dist/scanners/__tests__/fixtures/signals.d.ts +18 -0
- package/dist/scanners/__tests__/fixtures/signals.d.ts.map +1 -0
- package/dist/scanners/__tests__/fixtures/signals.js +84 -0
- package/dist/scanners/__tests__/fixtures/signals.js.map +1 -0
- package/dist/scanners/__tests__/test-helpers.d.ts +4 -0
- package/dist/scanners/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/scanners/__tests__/test-helpers.js +23 -0
- package/dist/scanners/__tests__/test-helpers.js.map +1 -0
- package/dist/scanners/artifacts.d.ts +119 -0
- package/dist/scanners/artifacts.d.ts.map +1 -0
- package/dist/scanners/artifacts.js +72 -0
- package/dist/scanners/artifacts.js.map +1 -0
- package/dist/scanners/create-scanner.d.ts +13 -0
- package/dist/scanners/create-scanner.d.ts.map +1 -0
- package/dist/scanners/create-scanner.js +11 -0
- package/dist/scanners/create-scanner.js.map +1 -0
- package/dist/scanners/engine/config-validator.d.ts +7 -0
- package/dist/scanners/engine/config-validator.d.ts.map +1 -0
- package/dist/scanners/engine/config-validator.js +16 -0
- package/dist/scanners/engine/config-validator.js.map +1 -0
- package/dist/scanners/engine/data-providers.d.ts +47 -0
- package/dist/scanners/engine/data-providers.d.ts.map +1 -0
- package/dist/scanners/engine/data-providers.js +8 -0
- package/dist/scanners/engine/data-providers.js.map +1 -0
- package/dist/scanners/engine/engine.d.ts +76 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -0
- package/dist/scanners/engine/engine.js +399 -0
- package/dist/scanners/engine/engine.js.map +1 -0
- package/dist/scanners/engine/index.d.ts +9 -0
- package/dist/scanners/engine/index.d.ts.map +1 -0
- package/dist/scanners/engine/index.js +7 -0
- package/dist/scanners/engine/index.js.map +1 -0
- package/dist/scanners/engine/input-resolver.d.ts +21 -0
- package/dist/scanners/engine/input-resolver.d.ts.map +1 -0
- package/dist/scanners/engine/input-resolver.js +149 -0
- package/dist/scanners/engine/input-resolver.js.map +1 -0
- package/dist/scanners/engine/lifecycle.d.ts +21 -0
- package/dist/scanners/engine/lifecycle.d.ts.map +1 -0
- package/dist/scanners/engine/lifecycle.js +2 -0
- package/dist/scanners/engine/lifecycle.js.map +1 -0
- package/dist/scanners/engine/result-builder.d.ts +30 -0
- package/dist/scanners/engine/result-builder.d.ts.map +1 -0
- package/dist/scanners/engine/result-builder.js +129 -0
- package/dist/scanners/engine/result-builder.js.map +1 -0
- package/dist/scanners/engine/strategy-registry.d.ts +45 -0
- package/dist/scanners/engine/strategy-registry.d.ts.map +1 -0
- package/dist/scanners/engine/strategy-registry.js +93 -0
- package/dist/scanners/engine/strategy-registry.js.map +1 -0
- package/dist/scanners/events.d.ts +41 -0
- package/dist/scanners/events.d.ts.map +1 -0
- package/dist/scanners/events.js +33 -0
- package/dist/scanners/events.js.map +1 -0
- package/dist/scanners/implementations/emerging-movers.d.ts +215 -0
- package/dist/scanners/implementations/emerging-movers.d.ts.map +1 -0
- package/dist/scanners/implementations/emerging-movers.js +709 -0
- package/dist/scanners/implementations/emerging-movers.js.map +1 -0
- package/dist/scanners/implementations/index.d.ts +8 -0
- package/dist/scanners/implementations/index.d.ts.map +1 -0
- package/dist/scanners/implementations/index.js +8 -0
- package/dist/scanners/implementations/index.js.map +1 -0
- package/dist/scanners/implementations/indicators.d.ts +40 -0
- package/dist/scanners/implementations/indicators.d.ts.map +1 -0
- package/dist/scanners/implementations/indicators.js +114 -0
- package/dist/scanners/implementations/indicators.js.map +1 -0
- package/dist/scanners/implementations/liquidation-watchdog.d.ts +74 -0
- package/dist/scanners/implementations/liquidation-watchdog.d.ts.map +1 -0
- package/dist/scanners/implementations/liquidation-watchdog.js +268 -0
- package/dist/scanners/implementations/liquidation-watchdog.js.map +1 -0
- package/dist/scanners/implementations/market-regime.d.ts +52 -0
- package/dist/scanners/implementations/market-regime.d.ts.map +1 -0
- package/dist/scanners/implementations/market-regime.js +201 -0
- package/dist/scanners/implementations/market-regime.js.map +1 -0
- package/dist/scanners/implementations/momentum.d.ts +21 -0
- package/dist/scanners/implementations/momentum.d.ts.map +1 -0
- package/dist/scanners/implementations/momentum.js +128 -0
- package/dist/scanners/implementations/momentum.js.map +1 -0
- package/dist/scanners/implementations/oi-tracker.d.ts +13 -0
- package/dist/scanners/implementations/oi-tracker.d.ts.map +1 -0
- package/dist/scanners/implementations/oi-tracker.js +67 -0
- package/dist/scanners/implementations/oi-tracker.js.map +1 -0
- package/dist/scanners/implementations/opportunity.d.ts +104 -0
- package/dist/scanners/implementations/opportunity.d.ts.map +1 -0
- package/dist/scanners/implementations/opportunity.js +441 -0
- package/dist/scanners/implementations/opportunity.js.map +1 -0
- package/dist/scanners/implementations/prescreener.d.ts +20 -0
- package/dist/scanners/implementations/prescreener.d.ts.map +1 -0
- package/dist/scanners/implementations/prescreener.js +97 -0
- package/dist/scanners/implementations/prescreener.js.map +1 -0
- package/dist/scanners/implementations/sm-flip.d.ts +43 -0
- package/dist/scanners/implementations/sm-flip.d.ts.map +1 -0
- package/dist/scanners/implementations/sm-flip.js +200 -0
- package/dist/scanners/implementations/sm-flip.js.map +1 -0
- package/dist/scanners/index.d.ts +25 -0
- package/dist/scanners/index.d.ts.map +1 -0
- package/dist/scanners/index.js +18 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/input-descriptors.d.ts +61 -0
- package/dist/scanners/input-descriptors.d.ts.map +1 -0
- package/dist/scanners/input-descriptors.js +43 -0
- package/dist/scanners/input-descriptors.js.map +1 -0
- package/dist/scanners/protocol/context.d.ts +75 -0
- package/dist/scanners/protocol/context.d.ts.map +1 -0
- package/dist/scanners/protocol/context.js +2 -0
- package/dist/scanners/protocol/context.js.map +1 -0
- package/dist/scanners/protocol/hooks.d.ts +18 -0
- package/dist/scanners/protocol/hooks.d.ts.map +1 -0
- package/dist/scanners/protocol/hooks.js +12 -0
- package/dist/scanners/protocol/hooks.js.map +1 -0
- package/dist/scanners/protocol/index.d.ts +5 -0
- package/dist/scanners/protocol/index.d.ts.map +1 -0
- package/dist/scanners/protocol/index.js +2 -0
- package/dist/scanners/protocol/index.js.map +1 -0
- package/dist/scanners/protocol/scanner.d.ts +47 -0
- package/dist/scanners/protocol/scanner.d.ts.map +1 -0
- package/dist/scanners/protocol/scanner.js +2 -0
- package/dist/scanners/protocol/scanner.js.map +1 -0
- package/dist/scanners/providers/adapter.d.ts +23 -0
- package/dist/scanners/providers/adapter.d.ts.map +1 -0
- package/dist/scanners/providers/adapter.js +227 -0
- package/dist/scanners/providers/adapter.js.map +1 -0
- package/dist/scanners/providers/cache.d.ts +20 -0
- package/dist/scanners/providers/cache.d.ts.map +1 -0
- package/dist/scanners/providers/cache.js +61 -0
- package/dist/scanners/providers/cache.js.map +1 -0
- package/dist/scanners/providers/client.d.ts +53 -0
- package/dist/scanners/providers/client.d.ts.map +1 -0
- package/dist/scanners/providers/client.js +174 -0
- package/dist/scanners/providers/client.js.map +1 -0
- package/dist/scanners/providers/factory.d.ts +43 -0
- package/dist/scanners/providers/factory.d.ts.map +1 -0
- package/dist/scanners/providers/factory.js +192 -0
- package/dist/scanners/providers/factory.js.map +1 -0
- package/dist/scanners/providers/types.d.ts +61 -0
- package/dist/scanners/providers/types.d.ts.map +1 -0
- package/dist/scanners/providers/types.js +6 -0
- package/dist/scanners/providers/types.js.map +1 -0
- package/dist/scanners/runtime-module.d.ts +54 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -0
- package/dist/scanners/runtime-module.js +90 -0
- package/dist/scanners/runtime-module.js.map +1 -0
- package/dist/scanners/scanner-definition.d.ts +58 -0
- package/dist/scanners/scanner-definition.d.ts.map +1 -0
- package/dist/scanners/scanner-definition.js +19 -0
- package/dist/scanners/scanner-definition.js.map +1 -0
- package/dist/scanners/schema-utils.d.ts +6 -0
- package/dist/scanners/schema-utils.d.ts.map +1 -0
- package/dist/scanners/schema-utils.js +14 -0
- package/dist/scanners/schema-utils.js.map +1 -0
- package/dist/scanners/score-utils.d.ts +19 -0
- package/dist/scanners/score-utils.d.ts.map +1 -0
- package/dist/scanners/score-utils.js +47 -0
- package/dist/scanners/score-utils.js.map +1 -0
- package/dist/scanners/store/fs-utils.d.ts +12 -0
- package/dist/scanners/store/fs-utils.d.ts.map +1 -0
- package/dist/scanners/store/fs-utils.js +47 -0
- package/dist/scanners/store/fs-utils.js.map +1 -0
- package/dist/scanners/store/index.d.ts +5 -0
- package/dist/scanners/store/index.d.ts.map +1 -0
- package/dist/scanners/store/index.js +5 -0
- package/dist/scanners/store/index.js.map +1 -0
- package/dist/scanners/store/runtime-store.d.ts +50 -0
- package/dist/scanners/store/runtime-store.d.ts.map +1 -0
- package/dist/scanners/store/runtime-store.js +91 -0
- package/dist/scanners/store/runtime-store.js.map +1 -0
- package/dist/scanners/store/shared-artifact-store.d.ts +31 -0
- package/dist/scanners/store/shared-artifact-store.d.ts.map +1 -0
- package/dist/scanners/store/shared-artifact-store.js +89 -0
- package/dist/scanners/store/shared-artifact-store.js.map +1 -0
- package/dist/scanners/store/signal-store.d.ts +36 -0
- package/dist/scanners/store/signal-store.d.ts.map +1 -0
- package/dist/scanners/store/signal-store.js +135 -0
- package/dist/scanners/store/signal-store.js.map +1 -0
- package/dist/scanners/types.d.ts +115 -0
- package/dist/scanners/types.d.ts.map +1 -0
- package/dist/scanners/types.js +3 -0
- package/dist/scanners/types.js.map +1 -0
- package/dist/scripts/run-dsl-standalone-live.d.ts +27 -0
- package/dist/scripts/run-dsl-standalone-live.d.ts.map +1 -0
- package/dist/scripts/run-dsl-standalone-live.js +207 -0
- package/dist/scripts/run-dsl-standalone-live.js.map +1 -0
- package/dist/scripts/run-dsl-standalone-mock.d.ts +13 -0
- package/dist/scripts/run-dsl-standalone-mock.d.ts.map +1 -0
- package/dist/scripts/run-dsl-standalone-mock.js +255 -0
- package/dist/scripts/run-dsl-standalone-mock.js.map +1 -0
- package/dist/senpi/client.d.ts +77 -0
- package/dist/senpi/client.d.ts.map +1 -0
- package/dist/senpi/client.js +523 -0
- package/dist/senpi/client.js.map +1 -0
- package/dist/senpi/constants.d.ts +7 -0
- package/dist/senpi/constants.d.ts.map +1 -0
- package/dist/senpi/constants.js +7 -0
- package/dist/senpi/constants.js.map +1 -0
- package/dist/senpi/index.d.ts +3 -0
- package/dist/senpi/index.d.ts.map +1 -0
- package/dist/senpi/index.js +2 -0
- package/dist/senpi/index.js.map +1 -0
- package/dist/senpi/types.d.ts +132 -0
- package/dist/senpi/types.d.ts.map +1 -0
- package/dist/senpi/types.js +3 -0
- package/dist/senpi/types.js.map +1 -0
- package/dist/state/index.d.ts +3 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +3 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/paths.d.ts +8 -0
- package/dist/state/paths.d.ts.map +1 -0
- package/dist/state/paths.js +19 -0
- package/dist/state/paths.js.map +1 -0
- package/dist/state/state-manager.d.ts +58 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +221 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/strategy/index.d.ts +2 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +2 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/strategy/strategy-state.d.ts +48 -0
- package/dist/strategy/strategy-state.d.ts.map +1 -0
- package/dist/strategy/strategy-state.js +185 -0
- package/dist/strategy/strategy-state.js.map +1 -0
- package/dist/types/action.d.ts +15 -0
- package/dist/types/action.d.ts.map +1 -0
- package/dist/types/action.js +2 -0
- package/dist/types/action.js.map +1 -0
- package/dist/types/dsl/index.d.ts +215 -0
- package/dist/types/dsl/index.d.ts.map +1 -0
- package/dist/types/dsl/index.js +5 -0
- package/dist/types/dsl/index.js.map +1 -0
- package/dist/types/event-bus.d.ts +11 -0
- package/dist/types/event-bus.d.ts.map +1 -0
- package/dist/types/event-bus.js +6 -0
- package/dist/types/event-bus.js.map +1 -0
- package/dist/types/hooks.d.ts +27 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +15 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/notification.d.ts +4 -0
- package/dist/types/notification.d.ts.map +1 -0
- package/dist/types/notification.js +3 -0
- package/dist/types/notification.js.map +1 -0
- package/dist/types/runtime.d.ts +18 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/runtime.js +2 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/scanner.d.ts +59 -0
- package/dist/types/scanner.d.ts.map +1 -0
- package/dist/types/scanner.js +13 -0
- package/dist/types/scanner.js.map +1 -0
- package/dist/types/strategy.d.ts +100 -0
- package/dist/types/strategy.d.ts.map +1 -0
- package/dist/types/strategy.js +2 -0
- package/dist/types/strategy.js.map +1 -0
- package/dist/utils/logger/dsl.d.ts +8 -0
- package/dist/utils/logger/dsl.d.ts.map +1 -0
- package/dist/utils/logger/dsl.js +7 -0
- package/dist/utils/logger/dsl.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +65 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/response.d.ts +14 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +44 -0
- package/dist/utils/response.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/examples/.env.example +15 -0
- package/examples/README.md +75 -0
- package/examples/scanners-consumer-quickstart.mjs +134 -0
- package/examples/scanners-emerging-movers-v4.mjs +285 -0
- package/examples/scanners-liquidation-watchdog.mjs +331 -0
- package/examples/scanners-live-mcp.mjs +208 -0
- package/examples/scanners-multi-strategy.mjs +165 -0
- package/examples/scanners-scheduled-events.mjs +95 -0
- package/examples/scanners-senpi-provider-client.mjs +182 -0
- package/examples/scanners-single-strategy.mjs +198 -0
- package/examples/strategies/README.md +45 -0
- package/examples/strategies/dsl-showcase.yaml +60 -0
- package/examples/strategies/fox-minimal-loosened.yaml +201 -0
- package/examples/strategies/fox-minimal.yaml +209 -0
- package/examples/strategies/minimal.yaml +49 -0
- package/examples/strategies/viper.yaml +64 -0
- package/examples/strategies/wolf.yaml +62 -0
- package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +116 -0
- package/openclaw.plugin.json +15 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config parsing and validation from playbook exit block.
|
|
3
|
+
*/
|
|
4
|
+
import type { DslPluginConfig } from "../../types/dsl/index.js";
|
|
5
|
+
export interface ExitBlockConfig {
|
|
6
|
+
engine?: string;
|
|
7
|
+
interval_seconds?: number;
|
|
8
|
+
preset?: string;
|
|
9
|
+
dsl_presets?: Record<string, RawPreset>;
|
|
10
|
+
}
|
|
11
|
+
interface RawPreset {
|
|
12
|
+
tiers?: RawTier[];
|
|
13
|
+
max_loss_pct?: number;
|
|
14
|
+
phase1?: RawPhase1;
|
|
15
|
+
phase2_trigger_tier?: number;
|
|
16
|
+
phase2?: RawPhase2;
|
|
17
|
+
lock_mode?: string;
|
|
18
|
+
}
|
|
19
|
+
interface RawTier {
|
|
20
|
+
trigger_pct?: number;
|
|
21
|
+
triggerPct?: number;
|
|
22
|
+
lock_pct?: number;
|
|
23
|
+
lockPct?: number;
|
|
24
|
+
lock_hw_pct?: number;
|
|
25
|
+
lockHwPct?: number;
|
|
26
|
+
breaches?: number;
|
|
27
|
+
retrace?: number;
|
|
28
|
+
}
|
|
29
|
+
interface RawPhase1 {
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
consecutiveBreachesRequired?: number;
|
|
32
|
+
consecutive_breaches_required?: number;
|
|
33
|
+
max_loss_pct?: number;
|
|
34
|
+
hard_timeout?: {
|
|
35
|
+
enabled?: boolean;
|
|
36
|
+
interval_in_minutes?: number;
|
|
37
|
+
};
|
|
38
|
+
weak_peak_cut?: {
|
|
39
|
+
enabled?: boolean;
|
|
40
|
+
interval_in_minutes?: number;
|
|
41
|
+
min_value?: number;
|
|
42
|
+
};
|
|
43
|
+
dead_weight_cut?: {
|
|
44
|
+
enabled?: boolean;
|
|
45
|
+
interval_in_minutes?: number;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
interface RawPhase2 {
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
retraceThreshold?: number;
|
|
51
|
+
retrace_threshold?: number;
|
|
52
|
+
consecutiveBreachesRequired?: number;
|
|
53
|
+
consecutive_breaches_required?: number;
|
|
54
|
+
tiers?: RawTier[];
|
|
55
|
+
}
|
|
56
|
+
export declare function parseDslPluginConfig(raw: ExitBlockConfig): DslPluginConfig;
|
|
57
|
+
export declare function getDefaultIntervalMs(): number;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,eAAe,EAMhB,MAAM,0BAA0B,CAAC;AAWlC,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACzC;AAED,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,OAAO;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,aAAa,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,eAAe,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AA0JD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA2B1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config parsing and validation from playbook exit block.
|
|
3
|
+
*/
|
|
4
|
+
import { MIN_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS } from "../../constants/dsl/index.js";
|
|
5
|
+
/** Parse lock_mode from config (accepts snake_case from YAML or camelCase). Default pctOfHighWater. */
|
|
6
|
+
function parseLockMode(raw) {
|
|
7
|
+
const v = raw?.toLowerCase();
|
|
8
|
+
if (v === "fixed_roe" || v === "fixedroe")
|
|
9
|
+
return "fixedRoe";
|
|
10
|
+
if (v === "pct_of_high_water" || v === "pctofhighwater")
|
|
11
|
+
return "pctOfHighWater";
|
|
12
|
+
return "pctOfHighWater";
|
|
13
|
+
}
|
|
14
|
+
/** Clamp interval to at least minIntervalMinutes (cron run interval). */
|
|
15
|
+
function clampInterval(intervalInMinutes, minIntervalMinutes) {
|
|
16
|
+
return Math.max(intervalInMinutes, minIntervalMinutes);
|
|
17
|
+
}
|
|
18
|
+
function parsePhase1HardTimeout(raw, minIntervalMinutes) {
|
|
19
|
+
if (!raw?.enabled)
|
|
20
|
+
return undefined;
|
|
21
|
+
const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
|
|
22
|
+
if (!(intervalInMinutes > 0))
|
|
23
|
+
return undefined;
|
|
24
|
+
return { enabled: true, intervalInMinutes };
|
|
25
|
+
}
|
|
26
|
+
function parsePhase1WeakPeakCut(raw, minIntervalMinutes) {
|
|
27
|
+
if (!raw?.enabled)
|
|
28
|
+
return undefined;
|
|
29
|
+
const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
|
|
30
|
+
if (!(intervalInMinutes > 0))
|
|
31
|
+
return undefined;
|
|
32
|
+
const minValue = typeof raw.min_value === "number" ? raw.min_value : 3.0;
|
|
33
|
+
return { enabled: true, intervalInMinutes, minValue };
|
|
34
|
+
}
|
|
35
|
+
function parsePhase1DeadWeightCut(raw, minIntervalMinutes) {
|
|
36
|
+
if (!raw?.enabled)
|
|
37
|
+
return undefined;
|
|
38
|
+
const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
|
|
39
|
+
if (!(intervalInMinutes > 0))
|
|
40
|
+
return undefined;
|
|
41
|
+
return { enabled: true, intervalInMinutes };
|
|
42
|
+
}
|
|
43
|
+
function parseTier(raw, defaultBreaches = 1) {
|
|
44
|
+
const triggerPct = Number(raw.trigger_pct ?? raw.triggerPct);
|
|
45
|
+
const lockPctRaw = raw.lock_pct ?? raw.lockPct;
|
|
46
|
+
const lockHwPctRaw = raw.lock_hw_pct ?? raw.lockHwPct;
|
|
47
|
+
const lockPct = lockPctRaw != null ? Number(lockPctRaw) : undefined;
|
|
48
|
+
const lockHwPct = lockHwPctRaw != null ? Number(lockHwPctRaw) : undefined;
|
|
49
|
+
const breaches = Number(raw.breaches) || defaultBreaches;
|
|
50
|
+
if (!(triggerPct > 0))
|
|
51
|
+
throw new Error("tier trigger_pct must be > 0");
|
|
52
|
+
if (lockPct == null && lockHwPct == null) {
|
|
53
|
+
throw new Error("tier must have either lock_pct or lock_hw_pct");
|
|
54
|
+
}
|
|
55
|
+
if (lockPct != null && (!(lockPct > 0) || lockPct > 100)) {
|
|
56
|
+
throw new Error("tier lock_pct must be in (0, 100]");
|
|
57
|
+
}
|
|
58
|
+
if (lockHwPct != null && (lockHwPct < 0 || lockHwPct > 100)) {
|
|
59
|
+
throw new Error("tier lock_hw_pct must be in [0, 100]");
|
|
60
|
+
}
|
|
61
|
+
if (!(breaches >= 1))
|
|
62
|
+
throw new Error("tier breaches must be >= 1");
|
|
63
|
+
const retraceRaw = raw.retrace ?? raw.retraceFromHW;
|
|
64
|
+
const retraceFromHW = typeof retraceRaw === "number" && retraceRaw > 0 ? retraceRaw : undefined;
|
|
65
|
+
const tier = { triggerPct, breaches, ...(retraceFromHW != null && { retraceFromHW }) };
|
|
66
|
+
if (lockPct != null)
|
|
67
|
+
tier.lockPct = lockPct;
|
|
68
|
+
if (lockHwPct != null)
|
|
69
|
+
tier.lockHwPct = lockHwPct;
|
|
70
|
+
return tier;
|
|
71
|
+
}
|
|
72
|
+
function parsePreset(name, raw, minIntervalMinutes = 0) {
|
|
73
|
+
const hasPhase2Tiers = raw.phase2?.tiers && Array.isArray(raw.phase2.tiers) && raw.phase2.tiers.length > 0;
|
|
74
|
+
if (hasPhase2Tiers) {
|
|
75
|
+
return parsePresetPhaseFormat(name, raw, minIntervalMinutes);
|
|
76
|
+
}
|
|
77
|
+
const tiersRaw = raw.tiers;
|
|
78
|
+
if (!Array.isArray(tiersRaw) || tiersRaw.length === 0) {
|
|
79
|
+
throw new Error(`preset "${name}" must have tiers or phase2.tiers`);
|
|
80
|
+
}
|
|
81
|
+
const tiers = tiersRaw.map((t) => parseTier(t));
|
|
82
|
+
for (let i = 1; i < tiers.length; i++) {
|
|
83
|
+
if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
|
|
84
|
+
throw new Error(`preset "${name}": tiers must be sorted ascending by trigger_pct`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const maxLossPct = Number(raw.max_loss_pct);
|
|
88
|
+
if (!(maxLossPct > 0))
|
|
89
|
+
throw new Error(`preset "${name}": max_loss_pct must be > 0`);
|
|
90
|
+
const lockMode = parseLockMode(raw.lock_mode);
|
|
91
|
+
return { tiers, maxLossPct, lockMode };
|
|
92
|
+
}
|
|
93
|
+
function parsePresetPhaseFormat(name, raw, minIntervalMinutes = 0) {
|
|
94
|
+
const phase2 = raw.phase2;
|
|
95
|
+
if (!phase2?.tiers || !Array.isArray(phase2.tiers) || phase2.tiers.length === 0) {
|
|
96
|
+
throw new Error(`preset "${name}": phase2.tiers must be a non-empty array`);
|
|
97
|
+
}
|
|
98
|
+
const phase2BreachesDefault = typeof phase2.consecutiveBreachesRequired === "number"
|
|
99
|
+
? phase2.consecutiveBreachesRequired
|
|
100
|
+
: typeof phase2.consecutive_breaches_required === "number"
|
|
101
|
+
? phase2.consecutive_breaches_required
|
|
102
|
+
: 1;
|
|
103
|
+
const tiers = phase2.tiers.map((t) => parseTier(t, phase2BreachesDefault));
|
|
104
|
+
for (let i = 1; i < tiers.length; i++) {
|
|
105
|
+
if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
|
|
106
|
+
throw new Error(`preset "${name}": phase2.tiers must be sorted ascending by trigger_pct`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const phase1 = raw.phase1;
|
|
110
|
+
const maxLossPct = Number(phase1?.max_loss_pct ?? raw.max_loss_pct);
|
|
111
|
+
if (!(maxLossPct > 0)) {
|
|
112
|
+
throw new Error(`preset "${name}": phase1.max_loss_pct or max_loss_pct must be > 0`);
|
|
113
|
+
}
|
|
114
|
+
const phase2TriggerTier = typeof raw.phase2_trigger_tier === "number" ? raw.phase2_trigger_tier : 0;
|
|
115
|
+
const phase2Retrace = typeof phase2.retraceThreshold === "number"
|
|
116
|
+
? phase2.retraceThreshold
|
|
117
|
+
: typeof phase2.retrace_threshold === "number"
|
|
118
|
+
? phase2.retrace_threshold
|
|
119
|
+
: undefined;
|
|
120
|
+
const phase1Breaches = typeof phase1?.consecutiveBreachesRequired === "number"
|
|
121
|
+
? phase1.consecutiveBreachesRequired
|
|
122
|
+
: typeof phase1?.consecutive_breaches_required === "number"
|
|
123
|
+
? phase1.consecutive_breaches_required
|
|
124
|
+
: undefined;
|
|
125
|
+
const phase2Breaches = phase2BreachesDefault;
|
|
126
|
+
const lockMode = parseLockMode(raw.lock_mode);
|
|
127
|
+
const phase1HardTimeout = parsePhase1HardTimeout(phase1?.hard_timeout, minIntervalMinutes);
|
|
128
|
+
const phase1WeakPeakCut = parsePhase1WeakPeakCut(phase1?.weak_peak_cut, minIntervalMinutes);
|
|
129
|
+
const phase1DeadWeightCut = parsePhase1DeadWeightCut(phase1?.dead_weight_cut, minIntervalMinutes);
|
|
130
|
+
return {
|
|
131
|
+
tiers,
|
|
132
|
+
maxLossPct,
|
|
133
|
+
phase2TriggerTier,
|
|
134
|
+
phase2RetraceFromHW: phase2Retrace,
|
|
135
|
+
phase1BreachesRequired: phase1Breaches,
|
|
136
|
+
phase2BreachesRequired: phase2Breaches,
|
|
137
|
+
lockMode,
|
|
138
|
+
...(phase1HardTimeout && { phase1HardTimeout }),
|
|
139
|
+
...(phase1WeakPeakCut && { phase1WeakPeakCut }),
|
|
140
|
+
...(phase1DeadWeightCut && { phase1DeadWeightCut }),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export function parseDslPluginConfig(raw) {
|
|
144
|
+
const intervalSeconds = raw.interval_seconds ?? 30;
|
|
145
|
+
if (typeof intervalSeconds !== "number" ||
|
|
146
|
+
!Number.isInteger(intervalSeconds) ||
|
|
147
|
+
intervalSeconds < MIN_INTERVAL_SECONDS) {
|
|
148
|
+
throw new Error(`interval_seconds must be a positive integer >= ${MIN_INTERVAL_SECONDS}, got: ${String(raw.interval_seconds)}`);
|
|
149
|
+
}
|
|
150
|
+
const intervalMs = intervalSeconds * 1000;
|
|
151
|
+
const minIntervalMinutes = intervalMs / 60_000;
|
|
152
|
+
const presetsRaw = raw.dsl_presets ?? {};
|
|
153
|
+
const presets = {};
|
|
154
|
+
for (const [name, p] of Object.entries(presetsRaw)) {
|
|
155
|
+
if (p && typeof p === "object")
|
|
156
|
+
presets[name] = parsePreset(name, p, minIntervalMinutes);
|
|
157
|
+
}
|
|
158
|
+
const presetKeys = Object.keys(presets);
|
|
159
|
+
if (presetKeys.length === 0) {
|
|
160
|
+
throw new Error("At least one dsl_presets entry is required");
|
|
161
|
+
}
|
|
162
|
+
const preset = typeof raw.preset === "string" ? raw.preset : presetKeys[0];
|
|
163
|
+
if (!presets[preset]) {
|
|
164
|
+
throw new Error(`Preset "${preset}" not found in dsl_presets`);
|
|
165
|
+
}
|
|
166
|
+
return { intervalMs, preset, presets };
|
|
167
|
+
}
|
|
168
|
+
export function getDefaultIntervalMs() {
|
|
169
|
+
return DEFAULT_INTERVAL_MS;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/constants/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/constants/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure DSL tick: state + price → next state and actions.
|
|
3
|
+
*/
|
|
4
|
+
import type { DslState, DslTickResult } from "../../types/dsl/index.js";
|
|
5
|
+
export declare function roundTo(value: number, decimals?: number): number;
|
|
6
|
+
export declare function dslTick(state: DslState, price: number, now: string): DslTickResult;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGxE,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAuB,GAAG,MAAM,CAGhF;AAwLD,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAoJlF"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure DSL tick: state + price → next state and actions.
|
|
3
|
+
*/
|
|
4
|
+
import { CLOSE_REASON, PRICE_DECIMALS } from "../../constants/dsl/index.js";
|
|
5
|
+
export function roundTo(value, decimals = PRICE_DECIMALS) {
|
|
6
|
+
const f = 10 ** decimals;
|
|
7
|
+
return Math.round(value * f) / f;
|
|
8
|
+
}
|
|
9
|
+
/** ROE % at given price. */
|
|
10
|
+
function computeCurrentROE(state, price) {
|
|
11
|
+
return state.direction === "LONG"
|
|
12
|
+
? ((price - state.entryPrice) / state.entryPrice) * state.leverage * 100
|
|
13
|
+
: ((state.entryPrice - price) / state.entryPrice) * state.leverage * 100;
|
|
14
|
+
}
|
|
15
|
+
/** Convert floor ROE % to price (LONG: entry*(1+roe/100/lev), SHORT: entry*(1-roe/100/lev)). */
|
|
16
|
+
function roeToPriceFloor(state, floorRoe) {
|
|
17
|
+
const pct = floorRoe / 100 / state.leverage;
|
|
18
|
+
if (state.direction === "LONG")
|
|
19
|
+
return roundTo(state.entryPrice * (1 + pct));
|
|
20
|
+
return roundTo(state.entryPrice * (1 - pct));
|
|
21
|
+
}
|
|
22
|
+
/** Fixed ROE mode: lock lockPct % of (entry → HW) range. Uses actual HW at trigger time. */
|
|
23
|
+
function lockPctFloor(state, lockPct) {
|
|
24
|
+
const hw = state.highWaterPrice;
|
|
25
|
+
const pct = lockPct / 100;
|
|
26
|
+
if (state.direction === "LONG") {
|
|
27
|
+
return roundTo(state.entryPrice + (hw - state.entryPrice) * pct);
|
|
28
|
+
}
|
|
29
|
+
return roundTo(state.entryPrice - (state.entryPrice - hw) * pct);
|
|
30
|
+
}
|
|
31
|
+
/** Tier floor: HW mode (lockHwPct) or fixedRoe (lockPct). */
|
|
32
|
+
function computeTierFloor(state, tierIndex) {
|
|
33
|
+
const tier = state.tiers[tierIndex];
|
|
34
|
+
if (!tier)
|
|
35
|
+
return state.phase1.absoluteFloor;
|
|
36
|
+
if (state.lockMode === "pctOfHighWater" && tier.lockHwPct != null) {
|
|
37
|
+
const floorRoe = state.highWaterRoe * (tier.lockHwPct / 100);
|
|
38
|
+
return roeToPriceFloor(state, floorRoe);
|
|
39
|
+
}
|
|
40
|
+
if (tier.lockPct != null)
|
|
41
|
+
return lockPctFloor(state, tier.lockPct);
|
|
42
|
+
return state.phase1.absoluteFloor;
|
|
43
|
+
}
|
|
44
|
+
/** Phase 1 trailing floor: HW retrace (phase1.retraceThreshold as ROE % → price fraction). Matches Python effective_floor Phase 1. */
|
|
45
|
+
function phase1TrailingFloor(state) {
|
|
46
|
+
const hw = state.highWaterPrice;
|
|
47
|
+
const retraceRoePct = state.phase1.retraceThreshold;
|
|
48
|
+
const retracePrice = retraceRoePct / 100 / state.leverage;
|
|
49
|
+
if (state.direction === "LONG")
|
|
50
|
+
return roundTo(hw * (1 - retracePrice));
|
|
51
|
+
return roundTo(hw * (1 + retracePrice));
|
|
52
|
+
}
|
|
53
|
+
/** Phase 2 floor from high-water retrace. Retrace is ROE % → divide by leverage for price fraction (matches Python). */
|
|
54
|
+
function phase2Floor(state) {
|
|
55
|
+
const tier = state.currentTierIndex != null ? state.tiers[state.currentTierIndex] : undefined;
|
|
56
|
+
const retracePct = tier?.retraceFromHW ?? state.phase2.retraceFromHW;
|
|
57
|
+
const pct = retracePct / 100 / state.leverage;
|
|
58
|
+
if (state.direction === "LONG") {
|
|
59
|
+
return roundTo(state.highWaterPrice * (1 - pct));
|
|
60
|
+
}
|
|
61
|
+
return roundTo(state.highWaterPrice * (1 + pct));
|
|
62
|
+
}
|
|
63
|
+
function effectiveFloor(state) {
|
|
64
|
+
if (state.phase === 1) {
|
|
65
|
+
const absFloor = state.phase1.absoluteFloor;
|
|
66
|
+
const trailing = phase1TrailingFloor(state);
|
|
67
|
+
return state.direction === "LONG" ? Math.max(absFloor, trailing) : Math.min(absFloor, trailing);
|
|
68
|
+
}
|
|
69
|
+
if (state.phase === 2 && state.currentTierIndex == null) {
|
|
70
|
+
return phase2Floor(state);
|
|
71
|
+
}
|
|
72
|
+
const fromTier = state.tierFloorPrice;
|
|
73
|
+
const fromHw = phase2Floor(state);
|
|
74
|
+
if (state.direction === "LONG")
|
|
75
|
+
return Math.max(fromTier, fromHw);
|
|
76
|
+
return Math.min(fromTier, fromHw);
|
|
77
|
+
}
|
|
78
|
+
function isBreach(state, price) {
|
|
79
|
+
if (state.direction === "LONG")
|
|
80
|
+
return price <= state.floorPrice;
|
|
81
|
+
return price >= state.floorPrice;
|
|
82
|
+
}
|
|
83
|
+
/** Effective consecutive breaches required (tier override or phase default). */
|
|
84
|
+
function resolveBreachesRequired(state) {
|
|
85
|
+
const tier = state.currentTierIndex != null ? state.tiers[state.currentTierIndex] : undefined;
|
|
86
|
+
if (tier != null)
|
|
87
|
+
return tier.breaches;
|
|
88
|
+
return state.phase === 1
|
|
89
|
+
? state.phase1.consecutiveBreachesRequired
|
|
90
|
+
: state.phase2.consecutiveBreachesRequired;
|
|
91
|
+
}
|
|
92
|
+
/** Tier floor as ROE %; 0 when no tier. */
|
|
93
|
+
function computeLockedProfitPct(state) {
|
|
94
|
+
if (state.currentTierIndex == null)
|
|
95
|
+
return 0;
|
|
96
|
+
const floorPrice = state.tierFloorPrice;
|
|
97
|
+
return state.direction === "LONG"
|
|
98
|
+
? ((floorPrice - state.entryPrice) / state.entryPrice) * state.leverage * 100
|
|
99
|
+
: ((state.entryPrice - floorPrice) / state.entryPrice) * state.leverage * 100;
|
|
100
|
+
}
|
|
101
|
+
/** ROE % to next tier trigger; null at max tier. Clamped to 0 when already past trigger (same tick). */
|
|
102
|
+
function computeDistanceToNextTierPct(state, currentROE) {
|
|
103
|
+
const idx = state.currentTierIndex ?? -1;
|
|
104
|
+
const nextIdx = idx + 1;
|
|
105
|
+
if (nextIdx >= state.tiers.length)
|
|
106
|
+
return null;
|
|
107
|
+
const nextTier = state.tiers[nextIdx];
|
|
108
|
+
return Math.max(0, nextTier.triggerPct - currentROE);
|
|
109
|
+
}
|
|
110
|
+
function updateHighWater(state, price, now) {
|
|
111
|
+
let hw = state.highWaterPrice;
|
|
112
|
+
if (state.direction === "LONG" && price > hw)
|
|
113
|
+
hw = price;
|
|
114
|
+
if (state.direction === "SHORT" && price < hw)
|
|
115
|
+
hw = price;
|
|
116
|
+
const highWaterRoe = state.direction === "LONG"
|
|
117
|
+
? ((hw - state.entryPrice) / state.entryPrice) * state.leverage * 100
|
|
118
|
+
: ((state.entryPrice - hw) / state.entryPrice) * state.leverage * 100;
|
|
119
|
+
return {
|
|
120
|
+
...state,
|
|
121
|
+
highWaterPrice: hw,
|
|
122
|
+
hwTimestamp: hw !== state.highWaterPrice ? now : state.hwTimestamp,
|
|
123
|
+
lastCheck: now,
|
|
124
|
+
lastPrice: price,
|
|
125
|
+
peakROE: Math.max(state.peakROE, highWaterRoe),
|
|
126
|
+
highWaterRoe,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function tierIndexFromPrice(state, price) {
|
|
130
|
+
// triggerPct is ROE % (see dsl-reference.md); price move % * leverage = ROE %
|
|
131
|
+
const movePct = state.direction === "LONG"
|
|
132
|
+
? ((price - state.entryPrice) / state.entryPrice) * state.leverage * 100
|
|
133
|
+
: ((state.entryPrice - price) / state.entryPrice) * state.leverage * 100;
|
|
134
|
+
let idx = -1;
|
|
135
|
+
for (let i = 0; i < state.tiers.length; i++) {
|
|
136
|
+
if (movePct >= state.tiers[i].triggerPct)
|
|
137
|
+
idx = i;
|
|
138
|
+
}
|
|
139
|
+
return idx;
|
|
140
|
+
}
|
|
141
|
+
/** Write all tick-updated derived fields onto state. Call after floor/tier/phase are final. */
|
|
142
|
+
function writeDerivedFields(next, price, now) {
|
|
143
|
+
const hw = next.highWaterPrice;
|
|
144
|
+
const floor = next.floorPrice;
|
|
145
|
+
const direction = next.direction;
|
|
146
|
+
const currentROE = computeCurrentROE(next, price);
|
|
147
|
+
const trailingFloor = next.phase === 1
|
|
148
|
+
? (next.direction === "LONG"
|
|
149
|
+
? Math.max(next.phase1.absoluteFloor, phase1TrailingFloor(next))
|
|
150
|
+
: Math.min(next.phase1.absoluteFloor, phase1TrailingFloor(next)))
|
|
151
|
+
: phase2Floor(next);
|
|
152
|
+
const distanceToFloor = direction === "LONG" ? price - floor : floor - price;
|
|
153
|
+
const distancePct = floor > 0 ? (distanceToFloor / floor) * 100 : 0;
|
|
154
|
+
const retracePct = hw > 0
|
|
155
|
+
? direction === "LONG"
|
|
156
|
+
? ((hw - price) / hw) * 100
|
|
157
|
+
: ((price - hw) / hw) * 100
|
|
158
|
+
: 0;
|
|
159
|
+
const elapsedMinutes = (new Date(now).getTime() - new Date(next.createdAt).getTime()) / 60_000;
|
|
160
|
+
const breachesRequired = resolveBreachesRequired(next);
|
|
161
|
+
const lockedProfitPct = next.currentTierIndex != null ? Math.max(0, computeLockedProfitPct(next)) : 0;
|
|
162
|
+
const distanceToNextTierPct = computeDistanceToNextTierPct(next, currentROE);
|
|
163
|
+
return {
|
|
164
|
+
...next,
|
|
165
|
+
currentROE,
|
|
166
|
+
trailingFloor,
|
|
167
|
+
distanceToFloor,
|
|
168
|
+
distancePct,
|
|
169
|
+
retracePct,
|
|
170
|
+
elapsedMinutes,
|
|
171
|
+
breachesRequired,
|
|
172
|
+
lockedProfitPct,
|
|
173
|
+
distanceToNextTierPct,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
export function dslTick(state, price, now) {
|
|
177
|
+
const prevFloorPrice = state.floorPrice;
|
|
178
|
+
let next = updateHighWater(state, price, now);
|
|
179
|
+
let floor = effectiveFloor(next);
|
|
180
|
+
let action = "none";
|
|
181
|
+
let closeReason;
|
|
182
|
+
const newTierIndexForBreach = tierIndexFromPrice(next, price);
|
|
183
|
+
const prevTierIndexForBreach = next.currentTierIndex ?? -1;
|
|
184
|
+
// Breach counting: increment on breach, close only when count >= required.
|
|
185
|
+
// Reset count only when not in breach and not advancing tier (Python: reset on phase transition, not on tier advance).
|
|
186
|
+
if (isBreach(next, price)) {
|
|
187
|
+
const breachesRequired = resolveBreachesRequired(next);
|
|
188
|
+
const newCount = (next.currentBreachCount ?? 0) + 1;
|
|
189
|
+
next = { ...next, currentBreachCount: newCount };
|
|
190
|
+
if (newCount >= breachesRequired) {
|
|
191
|
+
action = "close";
|
|
192
|
+
closeReason = CLOSE_REASON.DSL_BREACH;
|
|
193
|
+
next = { ...next, floorPrice: floor };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
const advancingTier = newTierIndexForBreach > prevTierIndexForBreach;
|
|
198
|
+
if (!advancingTier)
|
|
199
|
+
next = { ...next, currentBreachCount: 0 };
|
|
200
|
+
}
|
|
201
|
+
// Phase 1 time-based cuts (only when phase === 1 and not already closing)
|
|
202
|
+
if (action === "none" && next.phase === 1) {
|
|
203
|
+
const elapsedMinutes = (new Date(now).getTime() - new Date(next.createdAt).getTime()) / 60_000;
|
|
204
|
+
const p1 = next.phase1;
|
|
205
|
+
const peakROE = next.peakROE;
|
|
206
|
+
const currentROE = computeCurrentROE(next, price);
|
|
207
|
+
if (p1.hardTimeout?.enabled && elapsedMinutes >= p1.hardTimeout.intervalInMinutes) {
|
|
208
|
+
action = "close";
|
|
209
|
+
closeReason = CLOSE_REASON.PHASE1_TIMEOUT;
|
|
210
|
+
}
|
|
211
|
+
else if (p1.weakPeakCut?.enabled &&
|
|
212
|
+
elapsedMinutes >= p1.weakPeakCut.intervalInMinutes) {
|
|
213
|
+
const minVal = p1.weakPeakCut.minValue;
|
|
214
|
+
if (peakROE < minVal && currentROE < peakROE) {
|
|
215
|
+
action = "close";
|
|
216
|
+
closeReason = CLOSE_REASON.WEAK_PEAK_CUT;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else if (p1.deadWeightCut?.enabled &&
|
|
220
|
+
elapsedMinutes >= p1.deadWeightCut.intervalInMinutes) {
|
|
221
|
+
const neverPositive = next.direction === "LONG"
|
|
222
|
+
? next.highWaterPrice <= next.entryPrice
|
|
223
|
+
: next.highWaterPrice >= next.entryPrice;
|
|
224
|
+
if (neverPositive) {
|
|
225
|
+
action = "close";
|
|
226
|
+
closeReason = CLOSE_REASON.DEAD_WEIGHT_CUT;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (action === "close") {
|
|
231
|
+
next = writeDerivedFields(next, price, now);
|
|
232
|
+
next = { ...next, closeReason: closeReason ?? null };
|
|
233
|
+
const floorChanged = next.floorPrice !== prevFloorPrice;
|
|
234
|
+
return {
|
|
235
|
+
tierChanged: false,
|
|
236
|
+
phaseChanged: false,
|
|
237
|
+
action: "close",
|
|
238
|
+
newFloorPrice: undefined,
|
|
239
|
+
newTierIndex: undefined,
|
|
240
|
+
newPhase: undefined,
|
|
241
|
+
state: next,
|
|
242
|
+
floorChanged,
|
|
243
|
+
closeReason,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
const newTierIndex = newTierIndexForBreach;
|
|
247
|
+
const prevTierIndex = next.currentTierIndex;
|
|
248
|
+
let tierChanged = false;
|
|
249
|
+
let phaseChanged = false;
|
|
250
|
+
let newFloorPrice = floor;
|
|
251
|
+
let newPhase = next.phase;
|
|
252
|
+
if (newTierIndex > (prevTierIndex ?? -1)) {
|
|
253
|
+
tierChanged = true;
|
|
254
|
+
const tierFloor = computeTierFloor(next, newTierIndex);
|
|
255
|
+
const effFloor = next.phase === 1 ? effectiveFloor(next) : phase2Floor(next);
|
|
256
|
+
const floorPrice = next.direction === "LONG"
|
|
257
|
+
? Math.max(effFloor, tierFloor)
|
|
258
|
+
: Math.min(effFloor, tierFloor);
|
|
259
|
+
next = {
|
|
260
|
+
...next,
|
|
261
|
+
currentTierIndex: newTierIndex,
|
|
262
|
+
tierFloorPrice: tierFloor,
|
|
263
|
+
floorPrice,
|
|
264
|
+
tierSince: now,
|
|
265
|
+
};
|
|
266
|
+
newFloorPrice = next.floorPrice;
|
|
267
|
+
if (next.phase === 1 && newTierIndex >= next.phase2TriggerTier) {
|
|
268
|
+
phaseChanged = true;
|
|
269
|
+
newPhase = 2;
|
|
270
|
+
next = { ...next, phase: 2, phaseSince: now, currentBreachCount: 0 };
|
|
271
|
+
next.floorPrice =
|
|
272
|
+
next.direction === "LONG"
|
|
273
|
+
? Math.max(next.floorPrice, phase2Floor(next))
|
|
274
|
+
: Math.min(next.floorPrice, phase2Floor(next));
|
|
275
|
+
newFloorPrice = next.floorPrice;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Per-tick floor recalculation in HW mode (Phase 2, tier active)
|
|
279
|
+
if (next.phase === 2 &&
|
|
280
|
+
next.currentTierIndex != null &&
|
|
281
|
+
next.currentTierIndex >= 0 &&
|
|
282
|
+
next.lockMode === "pctOfHighWater") {
|
|
283
|
+
const newTierFloor = computeTierFloor(next, next.currentTierIndex);
|
|
284
|
+
const ratcheted = next.tierFloorPrice === 0
|
|
285
|
+
? newTierFloor
|
|
286
|
+
: next.direction === "LONG"
|
|
287
|
+
? Math.max(newTierFloor, next.tierFloorPrice)
|
|
288
|
+
: Math.min(newTierFloor, next.tierFloorPrice);
|
|
289
|
+
next = { ...next, tierFloorPrice: ratcheted };
|
|
290
|
+
floor = effectiveFloor(next);
|
|
291
|
+
next = { ...next, floorPrice: floor };
|
|
292
|
+
newFloorPrice = floor;
|
|
293
|
+
}
|
|
294
|
+
else if (!tierChanged && !phaseChanged) {
|
|
295
|
+
next = { ...next, floorPrice: floor };
|
|
296
|
+
}
|
|
297
|
+
next = writeDerivedFields(next, price, now);
|
|
298
|
+
const floorChanged = next.floorPrice !== prevFloorPrice;
|
|
299
|
+
return {
|
|
300
|
+
tierChanged,
|
|
301
|
+
phaseChanged,
|
|
302
|
+
action: "none",
|
|
303
|
+
newFloorPrice: tierChanged || phaseChanged ? newFloorPrice : undefined,
|
|
304
|
+
newTierIndex: tierChanged ? newTierIndex : undefined,
|
|
305
|
+
newPhase: phaseChanged ? newPhase : undefined,
|
|
306
|
+
state: next,
|
|
307
|
+
floorChanged: floorChanged || tierChanged || phaseChanged,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/engine/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event bus constants and re-export (SenpiEventBus lives in src/types/event-bus.ts).
|
|
3
|
+
*/
|
|
4
|
+
export { type SenpiEventBus } from "../../types/event-bus.js";
|
|
5
|
+
export declare const SENPI_COMPONENT_REGISTER = "senpi.component.register";
|
|
6
|
+
export declare const SENPI_PLAYBOOK_READY = "senpi.playbook.ready";
|
|
7
|
+
//# sourceMappingURL=bus-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus-types.d.ts","sourceRoot":"","sources":["../../../src/dsl/events/bus-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,oBAAoB,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus-types.js","sourceRoot":"","sources":["../../../src/dsl/events/bus-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC"}
|