@reefclaw/connect 0.1.12 → 0.1.13
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/assets/plugin/audit/mode-transition-audit.d.ts +11 -0
- package/assets/plugin/audit/mode-transition-audit.js +29 -0
- package/assets/plugin/balance-utils.d.ts +36 -0
- package/assets/plugin/balance-utils.js +98 -0
- package/assets/plugin/ccxt/binance-ban-gate.d.ts +47 -0
- package/assets/plugin/ccxt/binance-ban-gate.js +420 -0
- package/assets/plugin/ccxt/binance-private.d.ts +346 -0
- package/assets/plugin/ccxt/binance-private.js +1525 -0
- package/assets/plugin/ccxt/binance-public.d.ts +34 -0
- package/assets/plugin/ccxt/binance-public.js +180 -0
- package/assets/plugin/ccxt/intel-public.d.ts +25 -0
- package/assets/plugin/ccxt/intel-public.js +80 -0
- package/assets/plugin/ccxt/public-market-data-api.d.ts +26 -0
- package/assets/plugin/ccxt/public-market-data-api.js +23 -0
- package/assets/plugin/config/agent-config-client.d.ts +77 -0
- package/assets/plugin/config/agent-config-client.js +188 -0
- package/assets/plugin/config/agent-config-poller.d.ts +32 -0
- package/assets/plugin/config/agent-config-poller.js +101 -0
- package/assets/plugin/config/brackets-config.d.ts +22 -0
- package/assets/plugin/config/brackets-config.js +58 -0
- package/assets/plugin/config/entitlement-gate.d.ts +51 -0
- package/assets/plugin/config/entitlement-gate.js +137 -0
- package/assets/plugin/config/gate-store.d.ts +18 -0
- package/assets/plugin/config/gate-store.js +61 -0
- package/assets/plugin/config/plugin-config-io.d.ts +222 -0
- package/assets/plugin/config/plugin-config-io.js +126 -0
- package/assets/plugin/config/position-review-config.d.ts +35 -0
- package/assets/plugin/config/position-review-config.js +105 -0
- package/assets/plugin/config/tool-gate.d.ts +53 -0
- package/assets/plugin/config/tool-gate.js +128 -0
- package/assets/plugin/config/user-data-stream-config.d.ts +89 -0
- package/assets/plugin/config/user-data-stream-config.js +239 -0
- package/assets/plugin/connector-supervisor.d.ts +36 -0
- package/assets/plugin/connector-supervisor.js +149 -0
- package/assets/plugin/exchange-adapter.d.ts +65 -0
- package/assets/plugin/exchange-adapter.js +4 -0
- package/assets/plugin/index.d.ts +30 -0
- package/assets/plugin/index.js +2763 -0
- package/assets/plugin/ingest/pending-entry-metadata.d.ts +74 -0
- package/assets/plugin/ingest/pending-entry-metadata.js +236 -0
- package/assets/plugin/ingest/position-auto-capture.d.ts +171 -0
- package/assets/plugin/ingest/position-auto-capture.js +709 -0
- package/assets/plugin/ingest/position-decisions-client.d.ts +327 -0
- package/assets/plugin/ingest/position-decisions-client.js +306 -0
- package/assets/plugin/ingest/readiness-reporter.d.ts +42 -0
- package/assets/plugin/ingest/readiness-reporter.js +163 -0
- package/assets/plugin/ingest/reconcile-db-vs-exchange.d.ts +51 -0
- package/assets/plugin/ingest/reconcile-db-vs-exchange.js +170 -0
- package/assets/plugin/ingest/reconciler-cleanup.d.ts +37 -0
- package/assets/plugin/ingest/reconciler-cleanup.js +147 -0
- package/assets/plugin/ingest/rest-gap-filler.d.ts +191 -0
- package/assets/plugin/ingest/rest-gap-filler.js +565 -0
- package/assets/plugin/ingest/touched-symbols-store.d.ts +25 -0
- package/assets/plugin/ingest/touched-symbols-store.js +96 -0
- package/assets/plugin/ingest/trade-store-client.d.ts +40 -0
- package/assets/plugin/ingest/trade-store-client.js +125 -0
- package/assets/plugin/ingest/ws-ingest.d.ts +43 -0
- package/assets/plugin/ingest/ws-ingest.js +126 -0
- package/assets/plugin/learning/setup-family.d.ts +21 -0
- package/assets/plugin/learning/setup-family.js +103 -0
- package/assets/plugin/lifecycle/install-signal-handlers.d.ts +33 -0
- package/assets/plugin/lifecycle/install-signal-handlers.js +112 -0
- package/assets/plugin/lifecycle/shutdown-coordinator.d.ts +43 -0
- package/assets/plugin/lifecycle/shutdown-coordinator.js +131 -0
- package/assets/plugin/lifecycle/trading-operation-lock.d.ts +17 -0
- package/assets/plugin/lifecycle/trading-operation-lock.js +14 -0
- package/assets/plugin/live/bracket-id.d.ts +26 -0
- package/assets/plugin/live/bracket-id.js +112 -0
- package/assets/plugin/live/bracket-ledger.d.ts +54 -0
- package/assets/plugin/live/bracket-ledger.js +267 -0
- package/assets/plugin/live/bracket-manager.d.ts +82 -0
- package/assets/plugin/live/bracket-manager.js +478 -0
- package/assets/plugin/live/bracket-params.d.ts +22 -0
- package/assets/plugin/live/bracket-params.js +124 -0
- package/assets/plugin/live/bracket-reconciler.d.ts +95 -0
- package/assets/plugin/live/bracket-reconciler.js +573 -0
- package/assets/plugin/live/bracket-types.d.ts +102 -0
- package/assets/plugin/live/bracket-types.js +8 -0
- package/assets/plugin/live/deposit-tracker.d.ts +62 -0
- package/assets/plugin/live/deposit-tracker.js +97 -0
- package/assets/plugin/live/emergency-controls.d.ts +32 -0
- package/assets/plugin/live/emergency-controls.js +226 -0
- package/assets/plugin/live/exchange-errors.d.ts +12 -0
- package/assets/plugin/live/exchange-errors.js +130 -0
- package/assets/plugin/live/exchange-info-cache.d.ts +37 -0
- package/assets/plugin/live/exchange-info-cache.js +134 -0
- package/assets/plugin/live/fact-subscriber.d.ts +78 -0
- package/assets/plugin/live/fact-subscriber.js +182 -0
- package/assets/plugin/live/fill-price.d.ts +13 -0
- package/assets/plugin/live/fill-price.js +37 -0
- package/assets/plugin/live/intent-journal.d.ts +42 -0
- package/assets/plugin/live/intent-journal.js +122 -0
- package/assets/plugin/live/listen-key-manager.d.ts +70 -0
- package/assets/plugin/live/listen-key-manager.js +169 -0
- package/assets/plugin/live/live-adapter.d.ts +319 -0
- package/assets/plugin/live/live-adapter.js +1906 -0
- package/assets/plugin/live/live-balance-enricher.d.ts +32 -0
- package/assets/plugin/live/live-balance-enricher.js +104 -0
- package/assets/plugin/live/live-bracket-api.d.ts +13 -0
- package/assets/plugin/live/live-bracket-api.js +20 -0
- package/assets/plugin/live/live-state-store.d.ts +194 -0
- package/assets/plugin/live/live-state-store.js +450 -0
- package/assets/plugin/live/local-signal-service.d.ts +57 -0
- package/assets/plugin/live/local-signal-service.js +151 -0
- package/assets/plugin/live/local-strategy-evaluator.d.ts +62 -0
- package/assets/plugin/live/local-strategy-evaluator.js +131 -0
- package/assets/plugin/live/microstructure-assembler.d.ts +54 -0
- package/assets/plugin/live/microstructure-assembler.js +148 -0
- package/assets/plugin/live/order-poller.d.ts +29 -0
- package/assets/plugin/live/order-poller.js +125 -0
- package/assets/plugin/live/position-state-store.d.ts +87 -0
- package/assets/plugin/live/position-state-store.js +237 -0
- package/assets/plugin/live/proposal-decision-listener.d.ts +70 -0
- package/assets/plugin/live/proposal-decision-listener.js +292 -0
- package/assets/plugin/live/proposal-manager.d.ts +76 -0
- package/assets/plugin/live/proposal-manager.js +140 -0
- package/assets/plugin/live/rate-limiter.d.ts +47 -0
- package/assets/plugin/live/rate-limiter.js +159 -0
- package/assets/plugin/live/reconciler.d.ts +39 -0
- package/assets/plugin/live/reconciler.js +175 -0
- package/assets/plugin/live/setup-buckets.d.ts +7 -0
- package/assets/plugin/live/setup-buckets.js +33 -0
- package/assets/plugin/live/slippage-tracker.d.ts +45 -0
- package/assets/plugin/live/slippage-tracker.js +78 -0
- package/assets/plugin/live/stop-watcher.d.ts +67 -0
- package/assets/plugin/live/stop-watcher.js +218 -0
- package/assets/plugin/live/user-data-active-probe.d.ts +54 -0
- package/assets/plugin/live/user-data-active-probe.js +180 -0
- package/assets/plugin/live/user-data-stream-controller.d.ts +200 -0
- package/assets/plugin/live/user-data-stream-controller.js +579 -0
- package/assets/plugin/live/user-data-stream-ws.d.ts +22 -0
- package/assets/plugin/live/user-data-stream-ws.js +63 -0
- package/assets/plugin/live/user-data-stream.d.ts +243 -0
- package/assets/plugin/live/user-data-stream.js +704 -0
- package/assets/plugin/logger.d.ts +2 -0
- package/assets/plugin/logger.js +2 -0
- package/assets/plugin/mfe.d.ts +21 -0
- package/assets/plugin/mfe.js +68 -0
- package/assets/plugin/onboarding/mode-ladder.d.ts +1 -0
- package/assets/plugin/onboarding/mode-ladder.js +3 -0
- package/assets/plugin/onboarding/runtime.d.ts +102 -0
- package/assets/plugin/onboarding/runtime.js +215 -0
- package/assets/plugin/openclaw.plugin.json +92 -0
- package/assets/plugin/paper-adapter.d.ts +24 -0
- package/assets/plugin/paper-adapter.js +91 -0
- package/assets/plugin/persistence/state-manager.d.ts +66 -0
- package/assets/plugin/persistence/state-manager.js +222 -0
- package/assets/plugin/pinned-plan.d.ts +9 -0
- package/assets/plugin/pinned-plan.js +23 -0
- package/assets/plugin/portfolio/reentry-tracker.d.ts +36 -0
- package/assets/plugin/portfolio/reentry-tracker.js +127 -0
- package/assets/plugin/portfolio/wave9-admission.d.ts +67 -0
- package/assets/plugin/portfolio/wave9-admission.js +262 -0
- package/assets/plugin/portfolio/wave9-policy.d.ts +36 -0
- package/assets/plugin/portfolio/wave9-policy.js +183 -0
- package/assets/plugin/risk/pre-trade-check.d.ts +38 -0
- package/assets/plugin/risk/pre-trade-check.js +345 -0
- package/assets/plugin/risk/pre-trade-types.d.ts +60 -0
- package/assets/plugin/risk/pre-trade-types.js +3 -0
- package/assets/plugin/shadow/shadow-tracker.d.ts +36 -0
- package/assets/plugin/shadow/shadow-tracker.js +151 -0
- package/assets/plugin/shadow/types.d.ts +42 -0
- package/assets/plugin/shadow/types.js +20 -0
- package/assets/plugin/shared/indicators-extended.d.ts +52 -0
- package/assets/plugin/shared/indicators-extended.js +291 -0
- package/assets/plugin/shared/indicators.d.ts +15 -0
- package/assets/plugin/shared/indicators.js +114 -0
- package/assets/plugin/signals/conditions/registry.d.ts +16 -0
- package/assets/plugin/signals/conditions/registry.js +1333 -0
- package/assets/plugin/signals/conditions/types.d.ts +1 -0
- package/assets/plugin/signals/conditions/types.js +4 -0
- package/assets/plugin/signals/direction-rules.d.ts +3 -0
- package/assets/plugin/signals/direction-rules.js +24 -0
- package/assets/plugin/signals/entry-rules.d.ts +6 -0
- package/assets/plugin/signals/entry-rules.js +33 -0
- package/assets/plugin/signals/serialize-context.d.ts +4 -0
- package/assets/plugin/signals/serialize-context.js +39 -0
- package/assets/plugin/signals/stop-rules.d.ts +3 -0
- package/assets/plugin/signals/stop-rules.js +48 -0
- package/assets/plugin/signals/strategy-adapter.d.ts +47 -0
- package/assets/plugin/signals/strategy-adapter.js +209 -0
- package/assets/plugin/signals/types.d.ts +1 -0
- package/assets/plugin/signals/types.js +8 -0
- package/assets/plugin/simulator/exchange-simulator.d.ts +105 -0
- package/assets/plugin/simulator/exchange-simulator.js +759 -0
- package/assets/plugin/simulator/fill-engine.d.ts +53 -0
- package/assets/plugin/simulator/fill-engine.js +280 -0
- package/assets/plugin/simulator/paper-market-feed.d.ts +26 -0
- package/assets/plugin/simulator/paper-market-feed.js +104 -0
- package/assets/plugin/simulator/realistic-fills.d.ts +59 -0
- package/assets/plugin/simulator/realistic-fills.js +175 -0
- package/assets/plugin/simulator/types.d.ts +228 -0
- package/assets/plugin/simulator/types.js +43 -0
- package/assets/plugin/strategy/builtin-strategies.d.ts +2 -0
- package/assets/plugin/strategy/builtin-strategies.js +113 -0
- package/assets/plugin/strategy/condition-registry.d.ts +3 -0
- package/assets/plugin/strategy/condition-registry.js +153 -0
- package/assets/plugin/strategy/evaluator.d.ts +70 -0
- package/assets/plugin/strategy/evaluator.js +98 -0
- package/assets/plugin/tools/assessment-validation.d.ts +141 -0
- package/assets/plugin/tools/assessment-validation.js +473 -0
- package/assets/plugin/tools/attach-brackets.d.ts +39 -0
- package/assets/plugin/tools/attach-brackets.js +564 -0
- package/assets/plugin/tools/audit-bracket-protection.d.ts +49 -0
- package/assets/plugin/tools/audit-bracket-protection.js +683 -0
- package/assets/plugin/tools/bracket-control.d.ts +12 -0
- package/assets/plugin/tools/bracket-control.js +35 -0
- package/assets/plugin/tools/cancel-all-orders.d.ts +9 -0
- package/assets/plugin/tools/cancel-all-orders.js +8 -0
- package/assets/plugin/tools/cancel-order.d.ts +14 -0
- package/assets/plugin/tools/cancel-order.js +60 -0
- package/assets/plugin/tools/check-position-health.d.ts +46 -0
- package/assets/plugin/tools/check-position-health.js +194 -0
- package/assets/plugin/tools/clear-exchange-credentials.d.ts +24 -0
- package/assets/plugin/tools/clear-exchange-credentials.js +70 -0
- package/assets/plugin/tools/close-position.d.ts +45 -0
- package/assets/plugin/tools/close-position.js +722 -0
- package/assets/plugin/tools/create-order.d.ts +89 -0
- package/assets/plugin/tools/create-order.js +1555 -0
- package/assets/plugin/tools/exit-gate.d.ts +58 -0
- package/assets/plugin/tools/exit-gate.js +162 -0
- package/assets/plugin/tools/fetch-balance.d.ts +5 -0
- package/assets/plugin/tools/fetch-balance.js +4 -0
- package/assets/plugin/tools/fetch-ohlcv.d.ts +11 -0
- package/assets/plugin/tools/fetch-ohlcv.js +8 -0
- package/assets/plugin/tools/fetch-open-orders.d.ts +7 -0
- package/assets/plugin/tools/fetch-open-orders.js +4 -0
- package/assets/plugin/tools/fetch-positions.d.ts +7 -0
- package/assets/plugin/tools/fetch-positions.js +4 -0
- package/assets/plugin/tools/fetch-ticker.d.ts +11 -0
- package/assets/plugin/tools/fetch-ticker.js +5 -0
- package/assets/plugin/tools/get-agent-profile.d.ts +4 -0
- package/assets/plugin/tools/get-agent-profile.js +6 -0
- package/assets/plugin/tools/get-analytics.d.ts +6 -0
- package/assets/plugin/tools/get-analytics.js +7 -0
- package/assets/plugin/tools/get-backtest.d.ts +12 -0
- package/assets/plugin/tools/get-backtest.js +91 -0
- package/assets/plugin/tools/get-basis.d.ts +7 -0
- package/assets/plugin/tools/get-basis.js +7 -0
- package/assets/plugin/tools/get-bracket-config.d.ts +11 -0
- package/assets/plugin/tools/get-bracket-config.js +24 -0
- package/assets/plugin/tools/get-cascade-risk.d.ts +7 -0
- package/assets/plugin/tools/get-cascade-risk.js +8 -0
- package/assets/plugin/tools/get-crypto-metrics.d.ts +18 -0
- package/assets/plugin/tools/get-crypto-metrics.js +62 -0
- package/assets/plugin/tools/get-cvd.d.ts +6 -0
- package/assets/plugin/tools/get-cvd.js +6 -0
- package/assets/plugin/tools/get-divergences.d.ts +6 -0
- package/assets/plugin/tools/get-divergences.js +6 -0
- package/assets/plugin/tools/get-funding-context.d.ts +6 -0
- package/assets/plugin/tools/get-funding-context.js +16 -0
- package/assets/plugin/tools/get-liquidation-levels.d.ts +7 -0
- package/assets/plugin/tools/get-liquidation-levels.js +7 -0
- package/assets/plugin/tools/get-liquidation-pulse.d.ts +9 -0
- package/assets/plugin/tools/get-liquidation-pulse.js +22 -0
- package/assets/plugin/tools/get-market-breadth.d.ts +6 -0
- package/assets/plugin/tools/get-market-breadth.js +8 -0
- package/assets/plugin/tools/get-market-intel.d.ts +19 -0
- package/assets/plugin/tools/get-market-intel.js +116 -0
- package/assets/plugin/tools/get-market-structure.d.ts +47 -0
- package/assets/plugin/tools/get-market-structure.js +198 -0
- package/assets/plugin/tools/get-my-mined-patterns.d.ts +20 -0
- package/assets/plugin/tools/get-my-mined-patterns.js +61 -0
- package/assets/plugin/tools/get-my-proposed-learnings.d.ts +20 -0
- package/assets/plugin/tools/get-my-proposed-learnings.js +55 -0
- package/assets/plugin/tools/get-my-recent-reviews.d.ts +22 -0
- package/assets/plugin/tools/get-my-recent-reviews.js +66 -0
- package/assets/plugin/tools/get-orderbook.d.ts +21 -0
- package/assets/plugin/tools/get-orderbook.js +32 -0
- package/assets/plugin/tools/get-pattern-scan.d.ts +7 -0
- package/assets/plugin/tools/get-pattern-scan.js +8 -0
- package/assets/plugin/tools/get-regime.d.ts +6 -0
- package/assets/plugin/tools/get-regime.js +7 -0
- package/assets/plugin/tools/get-relevant-learnings.d.ts +21 -0
- package/assets/plugin/tools/get-relevant-learnings.js +65 -0
- package/assets/plugin/tools/get-resting-liquidity.d.ts +6 -0
- package/assets/plugin/tools/get-resting-liquidity.js +11 -0
- package/assets/plugin/tools/get-risk-scenario.d.ts +29 -0
- package/assets/plugin/tools/get-risk-scenario.js +47 -0
- package/assets/plugin/tools/get-risk-summary.d.ts +51 -0
- package/assets/plugin/tools/get-risk-summary.js +118 -0
- package/assets/plugin/tools/get-sentiment.d.ts +4 -0
- package/assets/plugin/tools/get-sentiment.js +6 -0
- package/assets/plugin/tools/get-session-review.d.ts +7 -0
- package/assets/plugin/tools/get-session-review.js +8 -0
- package/assets/plugin/tools/get-setup-detail.d.ts +7 -0
- package/assets/plugin/tools/get-setup-detail.js +322 -0
- package/assets/plugin/tools/get-signals.d.ts +15 -0
- package/assets/plugin/tools/get-signals.js +54 -0
- package/assets/plugin/tools/get-sizing.d.ts +6 -0
- package/assets/plugin/tools/get-sizing.js +6 -0
- package/assets/plugin/tools/get-trade-feedback.d.ts +7 -0
- package/assets/plugin/tools/get-trade-feedback.js +8 -0
- package/assets/plugin/tools/get-trade-flow.d.ts +7 -0
- package/assets/plugin/tools/get-trade-flow.js +7 -0
- package/assets/plugin/tools/get-volume-analysis.d.ts +21 -0
- package/assets/plugin/tools/get-volume-analysis.js +74 -0
- package/assets/plugin/tools/get-volume-profile.d.ts +7 -0
- package/assets/plugin/tools/get-volume-profile.js +7 -0
- package/assets/plugin/tools/get-wave9-status.d.ts +127 -0
- package/assets/plugin/tools/get-wave9-status.js +796 -0
- package/assets/plugin/tools/helpers.d.ts +26 -0
- package/assets/plugin/tools/helpers.js +39 -0
- package/assets/plugin/tools/intel-api.d.ts +34 -0
- package/assets/plugin/tools/intel-api.js +119 -0
- package/assets/plugin/tools/intel-cache.d.ts +25 -0
- package/assets/plugin/tools/intel-cache.js +148 -0
- package/assets/plugin/tools/list-strategies.d.ts +17 -0
- package/assets/plugin/tools/list-strategies.js +23 -0
- package/assets/plugin/tools/modify-stop.d.ts +21 -0
- package/assets/plugin/tools/modify-stop.js +120 -0
- package/assets/plugin/tools/modify-target.d.ts +21 -0
- package/assets/plugin/tools/modify-target.js +110 -0
- package/assets/plugin/tools/propose-learning.d.ts +22 -0
- package/assets/plugin/tools/propose-learning.js +65 -0
- package/assets/plugin/tools/query-review-outcomes.d.ts +30 -0
- package/assets/plugin/tools/query-review-outcomes.js +64 -0
- package/assets/plugin/tools/query-trades.d.ts +21 -0
- package/assets/plugin/tools/query-trades.js +37 -0
- package/assets/plugin/tools/record-position-reviews.d.ts +38 -0
- package/assets/plugin/tools/record-position-reviews.js +147 -0
- package/assets/plugin/tools/save-strategy.d.ts +16 -0
- package/assets/plugin/tools/save-strategy.js +46 -0
- package/assets/plugin/tools/scan-pairs.d.ts +22 -0
- package/assets/plugin/tools/scan-pairs.js +234 -0
- package/assets/plugin/tools/score-setup.d.ts +31 -0
- package/assets/plugin/tools/score-setup.js +268 -0
- package/assets/plugin/tools/set-bracket-requirement.d.ts +18 -0
- package/assets/plugin/tools/set-bracket-requirement.js +81 -0
- package/assets/plugin/tools/set-exchange-credentials.d.ts +25 -0
- package/assets/plugin/tools/set-exchange-credentials.js +80 -0
- package/assets/plugin/tools/set-trading-mode.d.ts +26 -0
- package/assets/plugin/tools/set-trading-mode.js +152 -0
- package/assets/plugin/tools/test-exchange-credentials.d.ts +16 -0
- package/assets/plugin/tools/test-exchange-credentials.js +100 -0
- package/assets/plugin/tools/toggle-strategy.d.ts +8 -0
- package/assets/plugin/tools/toggle-strategy.js +15 -0
- package/assets/plugin/trading-params-cache.d.ts +26 -0
- package/assets/plugin/trading-params-cache.js +52 -0
- package/assets/plugin/types.d.ts +134 -0
- package/assets/plugin/types.js +7 -0
- package/assets/plugin/util/plugin-paths.d.ts +3 -0
- package/assets/plugin/util/plugin-paths.js +15 -0
- package/assets/plugin/venues/hyperliquid/hl-balance.d.ts +116 -0
- package/assets/plugin/venues/hyperliquid/hl-balance.js +145 -0
- package/assets/plugin/venues/hyperliquid/hl-bracket-coordinator.d.ts +123 -0
- package/assets/plugin/venues/hyperliquid/hl-bracket-coordinator.js +533 -0
- package/assets/plugin/venues/hyperliquid/hl-brackets.d.ts +102 -0
- package/assets/plugin/venues/hyperliquid/hl-brackets.js +172 -0
- package/assets/plugin/venues/hyperliquid/hl-cloid.d.ts +22 -0
- package/assets/plugin/venues/hyperliquid/hl-cloid.js +82 -0
- package/assets/plugin/venues/hyperliquid/hl-info-cache.d.ts +46 -0
- package/assets/plugin/venues/hyperliquid/hl-info-cache.js +125 -0
- package/assets/plugin/venues/hyperliquid/hl-live-adapter.d.ts +146 -0
- package/assets/plugin/venues/hyperliquid/hl-live-adapter.js +728 -0
- package/assets/plugin/venues/hyperliquid/hl-precision.d.ts +61 -0
- package/assets/plugin/venues/hyperliquid/hl-precision.js +176 -0
- package/assets/plugin/venues/hyperliquid/hl-private.d.ts +88 -0
- package/assets/plugin/venues/hyperliquid/hl-private.js +357 -0
- package/assets/plugin/venues/hyperliquid/hl-public.d.ts +79 -0
- package/assets/plugin/venues/hyperliquid/hl-public.js +436 -0
- package/assets/plugin/venues/hyperliquid/hl-rate-gate.d.ts +57 -0
- package/assets/plugin/venues/hyperliquid/hl-rate-gate.js +220 -0
- package/assets/plugin/venues/hyperliquid/hl-user-stream.d.ts +90 -0
- package/assets/plugin/venues/hyperliquid/hl-user-stream.js +220 -0
- package/assets/plugin/venues/registry.d.ts +38 -0
- package/assets/plugin/venues/registry.js +46 -0
- package/assets/plugin/venues/symbols.d.ts +43 -0
- package/assets/plugin/venues/symbols.js +107 -0
- package/assets/plugin/wave9/live-account-capture.d.ts +67 -0
- package/assets/plugin/wave9/live-account-capture.js +435 -0
- package/assets/plugin/wave9/live-autonomous-protection.d.ts +39 -0
- package/assets/plugin/wave9/live-autonomous-protection.js +112 -0
- package/assets/plugin/wave9/live-durable-reconciliation-scheduler.d.ts +33 -0
- package/assets/plugin/wave9/live-durable-reconciliation-scheduler.js +115 -0
- package/assets/plugin/wave9/live-execution-ledger.d.ts +107 -0
- package/assets/plugin/wave9/live-execution-ledger.js +498 -0
- package/assets/plugin/wave9/live-position-confirmation.d.ts +18 -0
- package/assets/plugin/wave9/live-position-confirmation.js +111 -0
- package/assets/plugin/wave9/live-residual-protection.d.ts +18 -0
- package/assets/plugin/wave9/live-residual-protection.js +250 -0
- package/assets/plugin/wave9/live-startup-reconciliation.d.ts +38 -0
- package/assets/plugin/wave9/live-startup-reconciliation.js +454 -0
- package/assets/plugin/wave9/live-symbol-ownership.d.ts +20 -0
- package/assets/plugin/wave9/live-symbol-ownership.js +132 -0
- package/assets/plugin/wave9/paper-admission-guard.d.ts +199 -0
- package/assets/plugin/wave9/paper-admission-guard.js +650 -0
- package/assets/plugin/wave9/usdm-evidence-provider.d.ts +42 -0
- package/assets/plugin/wave9/usdm-evidence-provider.js +133 -0
- package/package.json +1 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// Phase 9a: Realistic fill simulation.
|
|
2
|
+
// Order book-aware VWAP fills, latency modeling, maker/taker fees.
|
|
3
|
+
import { DEFAULT_SIMULATION_CONFIG, priceToBps } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Walk the order book to compute a volume-weighted average fill price.
|
|
6
|
+
*
|
|
7
|
+
* For BUY: walks asks (sellers) from best ask upward.
|
|
8
|
+
* For SELL: walks bids (buyers) from best bid downward.
|
|
9
|
+
*
|
|
10
|
+
* If the order exceeds available depth, the remainder fills at the worst
|
|
11
|
+
* available price + 10 bps penalty (simulating thin-book impact).
|
|
12
|
+
*
|
|
13
|
+
* @returns { vwap, levelsConsumed, fillRatio } where fillRatio < 1 only
|
|
14
|
+
* if we want to model partial fills (currently always fills completely).
|
|
15
|
+
*/
|
|
16
|
+
export function computeBookAwareFillPrice(side, amount, orderbook) {
|
|
17
|
+
const levels = side === 'buy' ? orderbook.asks : orderbook.bids;
|
|
18
|
+
if (levels.length === 0) {
|
|
19
|
+
// No book data — caller should fall back to random slippage
|
|
20
|
+
return { vwap: 0, levelsConsumed: 0 };
|
|
21
|
+
}
|
|
22
|
+
let remaining = amount;
|
|
23
|
+
let totalCost = 0;
|
|
24
|
+
let levelsConsumed = 0;
|
|
25
|
+
for (const [price, quantity] of levels) {
|
|
26
|
+
if (remaining <= 0)
|
|
27
|
+
break;
|
|
28
|
+
const fillQty = Math.min(remaining, quantity);
|
|
29
|
+
totalCost += fillQty * price;
|
|
30
|
+
remaining -= fillQty;
|
|
31
|
+
levelsConsumed++;
|
|
32
|
+
}
|
|
33
|
+
if (remaining > 0) {
|
|
34
|
+
// Order exceeds available depth — fill remainder at worst price + penalty
|
|
35
|
+
const worstPrice = levels[levels.length - 1][0];
|
|
36
|
+
const penaltyMultiplier = side === 'buy' ? 1.001 : 0.999; // 10 bps penalty
|
|
37
|
+
totalCost += remaining * worstPrice * penaltyMultiplier;
|
|
38
|
+
remaining = 0;
|
|
39
|
+
}
|
|
40
|
+
const vwap = totalCost / amount;
|
|
41
|
+
return { vwap, levelsConsumed };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Simulate latency-induced price drift.
|
|
45
|
+
*
|
|
46
|
+
* During the latency window, the price can move against the trader.
|
|
47
|
+
* The drift is proportional to latency duration and current volatility.
|
|
48
|
+
*
|
|
49
|
+
* @param basePrice The VWAP price before latency adjustment
|
|
50
|
+
* @param side Order side (buy drift is positive, sell drift is negative)
|
|
51
|
+
* @param latencyMs Simulated latency in milliseconds
|
|
52
|
+
* @param volFactor Current volatility factor (1.0 = normal, >1 = elevated)
|
|
53
|
+
* @returns { adjustedPrice, latencyImpactBps }
|
|
54
|
+
*/
|
|
55
|
+
export function applyLatencyDrift(basePrice, side, latencyMs, volFactor) {
|
|
56
|
+
if (latencyMs <= 0) {
|
|
57
|
+
return { adjustedPrice: basePrice, latencyImpactBps: 0 };
|
|
58
|
+
}
|
|
59
|
+
// Base drift: up to 1 bps for 200ms latency, scaled by volatility
|
|
60
|
+
// Uses a random factor for direction — 70% of the time price moves against trader
|
|
61
|
+
const maxLatencyMs = 200;
|
|
62
|
+
const maxDriftBps = 1.0;
|
|
63
|
+
const latencyRatio = Math.min(latencyMs / maxLatencyMs, 1.0);
|
|
64
|
+
const randomFactor = Math.random();
|
|
65
|
+
// 70% adverse, 30% favorable (market more often moves against you in the latency window)
|
|
66
|
+
const adverseProb = 0.7;
|
|
67
|
+
const driftDirection = randomFactor < adverseProb ? 1 : -1;
|
|
68
|
+
const driftMagnitude = latencyRatio * maxDriftBps * volFactor * Math.random();
|
|
69
|
+
const driftBps = driftMagnitude * driftDirection;
|
|
70
|
+
// BUY: adverse = price goes UP (pay more)
|
|
71
|
+
// SELL: adverse = price goes DOWN (receive less)
|
|
72
|
+
const signedDriftBps = side === 'buy' ? driftBps : -driftBps;
|
|
73
|
+
const adjustedPrice = basePrice * (1 + signedDriftBps / 10_000);
|
|
74
|
+
return { adjustedPrice, latencyImpactBps: signedDriftBps };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generate a random simulated latency within the configured range.
|
|
78
|
+
*/
|
|
79
|
+
export function generateLatency(config) {
|
|
80
|
+
const { minMs, maxMs } = config.latency;
|
|
81
|
+
return minMs + Math.random() * (maxMs - minMs);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Compute the fee rate based on order type (maker vs taker).
|
|
85
|
+
* Market orders = taker. Limit orders = maker.
|
|
86
|
+
*/
|
|
87
|
+
export function getFeeRate(orderType, config) {
|
|
88
|
+
return orderType === 'market' ? config.fees.takerRate : config.fees.makerRate;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Compute a complete realistic fill for a market order.
|
|
92
|
+
*
|
|
93
|
+
* Combines: orderbook VWAP + latency drift + appropriate fee rate.
|
|
94
|
+
* Falls back to simple random slippage if no orderbook is available.
|
|
95
|
+
*
|
|
96
|
+
* @returns fillPrice and ExecutionQuality metrics
|
|
97
|
+
*/
|
|
98
|
+
export function computeRealisticMarketFill(side, amount, decisionPrice, orderbook, volFactor, config = DEFAULT_SIMULATION_CONFIG) {
|
|
99
|
+
const latencyMs = generateLatency(config);
|
|
100
|
+
const feeRate = getFeeRate('market', config);
|
|
101
|
+
let fillPrice;
|
|
102
|
+
let marketImpactBps;
|
|
103
|
+
let latencyImpactBps;
|
|
104
|
+
let bookLevelsConsumed;
|
|
105
|
+
let bookDepthAvailable;
|
|
106
|
+
if (orderbook && orderbook.asks.length > 0 && orderbook.bids.length > 0) {
|
|
107
|
+
// Book-aware VWAP fill
|
|
108
|
+
const { vwap, levelsConsumed } = computeBookAwareFillPrice(side, amount, orderbook);
|
|
109
|
+
bookLevelsConsumed = levelsConsumed;
|
|
110
|
+
bookDepthAvailable = true;
|
|
111
|
+
// Market impact: VWAP vs mid-price
|
|
112
|
+
const midPrice = (orderbook.bids[0][0] + orderbook.asks[0][0]) / 2;
|
|
113
|
+
marketImpactBps = priceToBps(vwap, midPrice);
|
|
114
|
+
// For sells, impact is negative (received less), so take absolute for the metric
|
|
115
|
+
// but keep signed for the actual price
|
|
116
|
+
// Apply latency drift on top of VWAP
|
|
117
|
+
const latencyResult = applyLatencyDrift(vwap, side, latencyMs, volFactor);
|
|
118
|
+
fillPrice = latencyResult.adjustedPrice;
|
|
119
|
+
latencyImpactBps = latencyResult.latencyImpactBps;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Fallback: random slippage (same as old behavior but with latency)
|
|
123
|
+
bookLevelsConsumed = 0;
|
|
124
|
+
bookDepthAvailable = false;
|
|
125
|
+
// Random 0-2 bps base slippage + latency drift
|
|
126
|
+
const baseBps = Math.random() * 2;
|
|
127
|
+
const signedBps = side === 'buy' ? baseBps : -baseBps;
|
|
128
|
+
const basePrice = decisionPrice * (1 + signedBps / 10_000);
|
|
129
|
+
marketImpactBps = signedBps;
|
|
130
|
+
const latencyResult = applyLatencyDrift(basePrice, side, latencyMs, volFactor);
|
|
131
|
+
fillPrice = latencyResult.adjustedPrice;
|
|
132
|
+
latencyImpactBps = latencyResult.latencyImpactBps;
|
|
133
|
+
}
|
|
134
|
+
// Total slippage vs decision price
|
|
135
|
+
const slippageBps = priceToBps(fillPrice, decisionPrice);
|
|
136
|
+
const notional = amount * fillPrice;
|
|
137
|
+
const feePaid = notional * feeRate;
|
|
138
|
+
const executionQuality = {
|
|
139
|
+
decisionPrice,
|
|
140
|
+
fillPrice,
|
|
141
|
+
slippageBps,
|
|
142
|
+
marketImpactBps,
|
|
143
|
+
latencyMs,
|
|
144
|
+
latencyImpactBps,
|
|
145
|
+
fillRatio: 1.0, // Market orders always fill completely
|
|
146
|
+
feeRate,
|
|
147
|
+
feePaid,
|
|
148
|
+
bookLevelsConsumed,
|
|
149
|
+
bookDepthAvailable,
|
|
150
|
+
};
|
|
151
|
+
return { fillPrice, executionQuality };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Compute execution quality metrics for a limit order fill.
|
|
155
|
+
* Limit orders fill at the limit price (maker) with no market impact.
|
|
156
|
+
*/
|
|
157
|
+
export function computeLimitFillQuality(side, amount, limitPrice, decisionPrice, config = DEFAULT_SIMULATION_CONFIG) {
|
|
158
|
+
const feeRate = getFeeRate('limit', config);
|
|
159
|
+
const notional = amount * limitPrice;
|
|
160
|
+
const feePaid = notional * feeRate;
|
|
161
|
+
const slippageBps = priceToBps(limitPrice, decisionPrice);
|
|
162
|
+
return {
|
|
163
|
+
decisionPrice,
|
|
164
|
+
fillPrice: limitPrice,
|
|
165
|
+
slippageBps,
|
|
166
|
+
marketImpactBps: 0, // Limit orders provide liquidity, no market impact
|
|
167
|
+
latencyMs: 0,
|
|
168
|
+
latencyImpactBps: 0,
|
|
169
|
+
fillRatio: 1.0,
|
|
170
|
+
feeRate,
|
|
171
|
+
feePaid,
|
|
172
|
+
bookLevelsConsumed: 0,
|
|
173
|
+
bookDepthAvailable: false, // N/A for limits
|
|
174
|
+
};
|
|
175
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
export interface FillError {
|
|
2
|
+
orderId: string;
|
|
3
|
+
symbol: string;
|
|
4
|
+
error: string;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
}
|
|
7
|
+
/** Simulation configuration for realistic fills. */
|
|
8
|
+
export interface SimulationConfig {
|
|
9
|
+
fees: {
|
|
10
|
+
makerRate: number;
|
|
11
|
+
takerRate: number;
|
|
12
|
+
};
|
|
13
|
+
latency: {
|
|
14
|
+
minMs: number;
|
|
15
|
+
maxMs: number;
|
|
16
|
+
};
|
|
17
|
+
partialFills: {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export declare const DEFAULT_SIMULATION_CONFIG: SimulationConfig;
|
|
22
|
+
/** Order book depth snapshot for realistic fill simulation. */
|
|
23
|
+
export interface OrderBookDepth {
|
|
24
|
+
bids: [number, number][];
|
|
25
|
+
asks: [number, number][];
|
|
26
|
+
timestamp: number;
|
|
27
|
+
}
|
|
28
|
+
/** Per-fill execution quality metrics (attached to Trade records). */
|
|
29
|
+
export interface ExecutionQuality {
|
|
30
|
+
decisionPrice: number;
|
|
31
|
+
fillPrice: number;
|
|
32
|
+
slippageBps: number;
|
|
33
|
+
marketImpactBps: number;
|
|
34
|
+
latencyMs: number;
|
|
35
|
+
latencyImpactBps: number;
|
|
36
|
+
fillRatio: number;
|
|
37
|
+
feeRate: number;
|
|
38
|
+
feePaid: number;
|
|
39
|
+
bookLevelsConsumed: number;
|
|
40
|
+
bookDepthAvailable: boolean;
|
|
41
|
+
/** Age of the quote the fill priced against (fill time − ticker.timestamp).
|
|
42
|
+
* Surfaces feed staleness (issue #202); absent on records from before the
|
|
43
|
+
* field existed or when the ticker carried no usable timestamp. */
|
|
44
|
+
quoteAgeMs?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface SimulatorState {
|
|
47
|
+
version: string;
|
|
48
|
+
config: {
|
|
49
|
+
startingBalance: number;
|
|
50
|
+
quoteCurrency: string;
|
|
51
|
+
};
|
|
52
|
+
wallet: Wallet;
|
|
53
|
+
positions: Position[];
|
|
54
|
+
openOrders: Order[];
|
|
55
|
+
tradeHistory: Trade[];
|
|
56
|
+
sessionStartNav?: number;
|
|
57
|
+
sessionDate?: string;
|
|
58
|
+
/** Cumulative execution quality stats for the session. */
|
|
59
|
+
executionStats?: ExecutionStats;
|
|
60
|
+
/** Epoch-ms stamp of the last in-memory mutation. Set on every
|
|
61
|
+
* emitStateChanged and persisted. Used by replaceState() to refuse a disk
|
|
62
|
+
* snapshot OLDER than the live in-memory state (which would revert a
|
|
63
|
+
* just-applied, not-yet-flushed mutation). Same host clock across both
|
|
64
|
+
* processes, so it is cross-process comparable. */
|
|
65
|
+
savedAt?: number;
|
|
66
|
+
}
|
|
67
|
+
/** Cumulative execution quality stats across all trades in a session. */
|
|
68
|
+
export interface ExecutionStats {
|
|
69
|
+
totalTrades: number;
|
|
70
|
+
totalSlippageBps: number;
|
|
71
|
+
totalFeesPaid: number;
|
|
72
|
+
worstSlippageBps: number;
|
|
73
|
+
avgSlippageBps: number;
|
|
74
|
+
avgLatencyMs: number;
|
|
75
|
+
}
|
|
76
|
+
export interface Wallet {
|
|
77
|
+
[currency: string]: CurrencyBalance;
|
|
78
|
+
}
|
|
79
|
+
export interface CurrencyBalance {
|
|
80
|
+
total: number;
|
|
81
|
+
available: number;
|
|
82
|
+
locked: number;
|
|
83
|
+
}
|
|
84
|
+
/** Who initiated a position close. Default (undefined) = 'agent'.
|
|
85
|
+
* - `stop_watcher`: paper-mode watcher fired the stop
|
|
86
|
+
* - `bracket_attach_failed`: LiveAdapter auto-flattened when bracket submission exhausted retries
|
|
87
|
+
* - `exchange_stop` / `exchange_target`: exchange-native STOP_MARKET / TAKE_PROFIT_MARKET triggered on Binance
|
|
88
|
+
* - `cancelled_auto`: bracket reconciler cleaned up after detecting the position closed externally
|
|
89
|
+
* - `operator` / `agent` / `emergency`: explicit initiator */
|
|
90
|
+
export type CloseReason = 'agent' | 'stop_watcher' | 'emergency' | 'operator' | 'bracket_attach_failed' | 'exchange_stop' | 'exchange_target' | 'cancelled_auto' | 'wave9_signal_reversal' | 'liquidated' | 'adl' | 'venue_delisted';
|
|
91
|
+
/** The agent's stated profit-realization plan, pinned at entry. PURE DATA /
|
|
92
|
+
* indication — the plugin does NOT enforce it; it is surfaced back so the agent
|
|
93
|
+
* can hold to its own plan instead of re-litigating. The agent fills the parts
|
|
94
|
+
* relevant to its plan; `note` is always allowed as a free-text summary. See
|
|
95
|
+
* the 2026-06-05 governing principle in docs/POSITION_MANAGEMENT_PLAN.md
|
|
96
|
+
* (tools + indication + learning; force only the safety floor). */
|
|
97
|
+
export interface RealizationRule {
|
|
98
|
+
type: 'fixed_target' | 'trail' | 'scale' | 'manual';
|
|
99
|
+
targetPrice?: number;
|
|
100
|
+
trailAfterR?: number;
|
|
101
|
+
trailDistanceR?: number;
|
|
102
|
+
scale?: Array<{
|
|
103
|
+
atR: number;
|
|
104
|
+
fraction: number;
|
|
105
|
+
}>;
|
|
106
|
+
note?: string;
|
|
107
|
+
}
|
|
108
|
+
/** Optional metadata attached at entry time — persisted in state.json.
|
|
109
|
+
* Most fields are immutable after entry. The MFE block + closeReason are the
|
|
110
|
+
* exceptions: MFE updates on every mark-price tick; closeReason is set at the
|
|
111
|
+
* moment of close. */
|
|
112
|
+
export interface PositionMetadata {
|
|
113
|
+
setupType?: string;
|
|
114
|
+
missionId?: string;
|
|
115
|
+
candidateId?: string;
|
|
116
|
+
strategy?: 'tsmom_28d_long_flat_reversal_1d' | 'tsmom_28d_short_flat_reversal_1d';
|
|
117
|
+
accruedFundingUsd?: number;
|
|
118
|
+
fundingThroughTime?: string;
|
|
119
|
+
thesis?: string;
|
|
120
|
+
stopPrice?: number;
|
|
121
|
+
targetPrice?: number;
|
|
122
|
+
regime?: string;
|
|
123
|
+
regimeConfidence?: number;
|
|
124
|
+
scorecardVerdict?: 'STRONG_GO' | 'GO' | 'MARGINAL' | 'NO_GO';
|
|
125
|
+
confluenceScore?: number;
|
|
126
|
+
closeReason?: CloseReason;
|
|
127
|
+
/** Price at which the entry thesis is INVALIDATED — the agent's pinned "I am
|
|
128
|
+
* wrong here" level (distinct from the protective stopPrice). Surfaced back
|
|
129
|
+
* as indication each heartbeat so the agent holds to its own plan instead of
|
|
130
|
+
* re-litigating. NOT enforced — the only forced thing is that a protective
|
|
131
|
+
* stop exists. */
|
|
132
|
+
invalidationPrice?: number;
|
|
133
|
+
/** The agent's stated profit-realization plan, pinned at entry (indication,
|
|
134
|
+
* not an enforced mechanic). */
|
|
135
|
+
realizationRule?: RealizationRule;
|
|
136
|
+
/** Entry price as it was at the moment of the FIRST fill, frozen. MFE-in-R is
|
|
137
|
+
* denominated against this (and originalStopPrice), never against the
|
|
138
|
+
* position's running averaged entryPrice — otherwise a scale-in would
|
|
139
|
+
* retroactively shrink an already-achieved excursion. Seeded on the new/flip
|
|
140
|
+
* fill; preserved through scale-ins. */
|
|
141
|
+
originalEntryPrice?: number;
|
|
142
|
+
/** Stop price as it was at the moment of fill, frozen. R-multiples are
|
|
143
|
+
* always denominated against this value, never against current stopPrice
|
|
144
|
+
* (which can ratchet). If the position opened without a stop, this is
|
|
145
|
+
* undefined and `mfeR` stays undefined. */
|
|
146
|
+
originalStopPrice?: number;
|
|
147
|
+
/** Highest favourable mark price seen since entry. For longs: max(mark);
|
|
148
|
+
* for shorts: min(mark). Updated on every mark-price tick. Seeded to
|
|
149
|
+
* entryPrice on first observation. */
|
|
150
|
+
mfePeakPrice?: number;
|
|
151
|
+
/** Maximum favourable excursion expressed in R-multiples, where
|
|
152
|
+
* R = |entryPrice − originalStopPrice|. Undefined if originalStopPrice
|
|
153
|
+
* is undefined. Always non-negative; recedes only via give-back semantics
|
|
154
|
+
* in `giveBackRatio`, never directly. */
|
|
155
|
+
mfeR?: number;
|
|
156
|
+
/** Fraction of MFE peak relative to current mark, in [0, 1+]. Defined as
|
|
157
|
+
* `(mfePeakPriceR - currentR) / mfePeakPriceR`, only meaningful when
|
|
158
|
+
* `mfePeakPriceR > 0`. Undefined when MFE has never been favourable. */
|
|
159
|
+
giveBackRatio?: number;
|
|
160
|
+
}
|
|
161
|
+
export interface Position {
|
|
162
|
+
symbol: string;
|
|
163
|
+
side: 'long' | 'short';
|
|
164
|
+
entryPrice: number;
|
|
165
|
+
quantity: number;
|
|
166
|
+
openedAt: string;
|
|
167
|
+
metadata?: PositionMetadata;
|
|
168
|
+
/** Cumulative open-side fees paid to establish (and add to) this position,
|
|
169
|
+
* in quote currency. Carried through to Trade records on close so realized
|
|
170
|
+
* P&L can include BOTH sides of the roundtrip. Older records without this
|
|
171
|
+
* field are treated as 0 at read time. */
|
|
172
|
+
openFee?: number;
|
|
173
|
+
}
|
|
174
|
+
export interface Order {
|
|
175
|
+
id: string;
|
|
176
|
+
symbol: string;
|
|
177
|
+
side: 'buy' | 'sell';
|
|
178
|
+
type: 'market' | 'limit';
|
|
179
|
+
status: 'open' | 'closed' | 'canceled';
|
|
180
|
+
amount: number;
|
|
181
|
+
price: number | null;
|
|
182
|
+
filled: number;
|
|
183
|
+
average: number | null;
|
|
184
|
+
cost: number;
|
|
185
|
+
fee: {
|
|
186
|
+
cost: number;
|
|
187
|
+
currency: string;
|
|
188
|
+
};
|
|
189
|
+
createdAt: string;
|
|
190
|
+
/** Entry metadata pinned to a RESTING limit order (stopPrice, thesis,
|
|
191
|
+
* invalidation, realizationRule, …). Lives on the Order — NOT only in the
|
|
192
|
+
* in-memory pendingOrderMetadata cache — so it is serialized in state.json
|
|
193
|
+
* and survives a restart / two-process reload. Without this, a resting limit
|
|
194
|
+
* that fills after a restart opened a position with no protective stop. */
|
|
195
|
+
metadata?: PositionMetadata;
|
|
196
|
+
}
|
|
197
|
+
export interface Trade {
|
|
198
|
+
id: string;
|
|
199
|
+
orderId: string;
|
|
200
|
+
symbol: string;
|
|
201
|
+
side: 'buy' | 'sell';
|
|
202
|
+
entryPrice: number;
|
|
203
|
+
exitPrice: number;
|
|
204
|
+
quantity: number;
|
|
205
|
+
realizedPnl: number;
|
|
206
|
+
/** CLOSE-side fee only. For backward compatibility. */
|
|
207
|
+
fee: number;
|
|
208
|
+
/** OPEN-side fee share attributable to the closed quantity (proportional for
|
|
209
|
+
* partial closes). Added Apr 2026 — older records will be undefined and must
|
|
210
|
+
* be treated as 0 by readers. Total roundtrip fee = `fee + (openFee ?? 0)`. */
|
|
211
|
+
openFee?: number;
|
|
212
|
+
openedAt: string;
|
|
213
|
+
closedAt: string;
|
|
214
|
+
executionQuality?: ExecutionQuality;
|
|
215
|
+
/** Entry metadata carried from the closing position. */
|
|
216
|
+
metadata?: PositionMetadata;
|
|
217
|
+
}
|
|
218
|
+
/** Max trades to keep in history (circular buffer) */
|
|
219
|
+
export declare const MAX_TRADE_HISTORY = 1000;
|
|
220
|
+
/** Fee rate for simulated trades (0.1% = Binance default) */
|
|
221
|
+
export declare const FEE_RATE = 0.001;
|
|
222
|
+
/**
|
|
223
|
+
* Convert a price difference to basis points.
|
|
224
|
+
* Positive = actual > reference (paid more / received more).
|
|
225
|
+
*/
|
|
226
|
+
export declare function priceToBps(actual: number, reference: number): number;
|
|
227
|
+
/** Default state for a fresh plugin */
|
|
228
|
+
export declare function createDefaultState(startingBalance: number, quoteCurrency: string): SimulatorState;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Internal simulator state types.
|
|
2
|
+
// These are persisted to state.json — must be JSON-serializable.
|
|
3
|
+
export const DEFAULT_SIMULATION_CONFIG = {
|
|
4
|
+
fees: {
|
|
5
|
+
makerRate: 0.0002, // 0.02% Binance Futures maker
|
|
6
|
+
takerRate: 0.0004, // 0.04% Binance Futures taker
|
|
7
|
+
},
|
|
8
|
+
latency: {
|
|
9
|
+
minMs: 50,
|
|
10
|
+
maxMs: 200,
|
|
11
|
+
},
|
|
12
|
+
partialFills: {
|
|
13
|
+
enabled: true,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
/** Max trades to keep in history (circular buffer) */
|
|
17
|
+
export const MAX_TRADE_HISTORY = 1000;
|
|
18
|
+
/** Fee rate for simulated trades (0.1% = Binance default) */
|
|
19
|
+
export const FEE_RATE = 0.001;
|
|
20
|
+
/**
|
|
21
|
+
* Convert a price difference to basis points.
|
|
22
|
+
* Positive = actual > reference (paid more / received more).
|
|
23
|
+
*/
|
|
24
|
+
export function priceToBps(actual, reference) {
|
|
25
|
+
return ((actual - reference) / reference) * 10_000;
|
|
26
|
+
}
|
|
27
|
+
/** Default state for a fresh plugin */
|
|
28
|
+
export function createDefaultState(startingBalance, quoteCurrency) {
|
|
29
|
+
return {
|
|
30
|
+
version: '1',
|
|
31
|
+
config: { startingBalance, quoteCurrency },
|
|
32
|
+
wallet: {
|
|
33
|
+
[quoteCurrency]: {
|
|
34
|
+
total: startingBalance,
|
|
35
|
+
available: startingBalance,
|
|
36
|
+
locked: 0,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
positions: [],
|
|
40
|
+
openOrders: [],
|
|
41
|
+
tradeHistory: [],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// LEGACY strategy configs — used ONLY as fixtures by the local-evaluator
|
|
2
|
+
// tests (strategy/__tests__/evaluator.test.ts). NOT seeded anywhere and NOT
|
|
3
|
+
// part of the product catalog: the shipped catalog lives in
|
|
4
|
+
// intelligence/src/signals/strategy-store.ts (exactly two template
|
|
5
|
+
// strategies since the 2026-07-06 trim — see CLAUDE.md), and the plugin's
|
|
6
|
+
// local evaluator (signals.evaluator, default 'central') receives its
|
|
7
|
+
// strategy set from the intel service, not from this file.
|
|
8
|
+
export const BUILTIN_STRATEGIES = [
|
|
9
|
+
{
|
|
10
|
+
name: 'trend_continuation',
|
|
11
|
+
description: 'Pullback entry in an established trend. Waits for price to pull back to EMA20, with MACD confirming direction, ADX showing trend strength, VWAP alignment, and non-crowded funding.',
|
|
12
|
+
version: 4,
|
|
13
|
+
regimeWhitelist: ['TREND_UP', 'TREND_DOWN'],
|
|
14
|
+
minConfidence: 0.50,
|
|
15
|
+
directionRule: 'from_regime',
|
|
16
|
+
conditions: [
|
|
17
|
+
{ type: 'ema_proximity', params: { period: 20, maxDistPct: 0.01 } },
|
|
18
|
+
{ type: 'macd_crossover', params: {} },
|
|
19
|
+
{ type: 'adx_trending', params: { minAdx: 25 } },
|
|
20
|
+
{ type: 'vwap_position', params: {} },
|
|
21
|
+
{ type: 'funding_not_crowded', params: { maxZScore: 2 } },
|
|
22
|
+
{ type: 'oi_slope', params: { lookbackSlots: 16, minSlope: 0 } },
|
|
23
|
+
],
|
|
24
|
+
entryRule: { type: 'ema_offset', params: { period: 20, atrFraction: 0.3 } },
|
|
25
|
+
stopRule: { type: 'swing_atr', params: { swingCount: 3, atrFraction: 0.5 } },
|
|
26
|
+
targetRMultiples: [1.5, 2.5, 3.5],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'mean_reversion',
|
|
30
|
+
description: 'Snap-back trade from extreme in a range-bound market. StochRSI at extreme, Bollinger breakout (overextended), contrarian funding, and elevated open interest show the setup is crowded and due to revert.',
|
|
31
|
+
version: 4,
|
|
32
|
+
regimeWhitelist: ['RANGE_TIGHT'],
|
|
33
|
+
minConfidence: 0.45,
|
|
34
|
+
directionRule: 'from_funding',
|
|
35
|
+
conditions: [
|
|
36
|
+
{ type: 'stoch_rsi_extreme', params: { oversold: 20, overbought: 80 } },
|
|
37
|
+
{ type: 'bollinger_breakout', params: {} },
|
|
38
|
+
{ type: 'funding_contrarian', params: { maxZScore: 1.5 } },
|
|
39
|
+
{ type: 'oi_elevated', params: { elevationRatio: 1.1 } },
|
|
40
|
+
],
|
|
41
|
+
entryRule: { type: 'atr_offset', params: { atrFraction: 0.2 } },
|
|
42
|
+
stopRule: { type: 'fixed_atr', params: { atrMultiple: 1.5 } },
|
|
43
|
+
targetRMultiples: [1.5, 2.5],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'breakout',
|
|
47
|
+
description: 'Volatility compression followed by expansion. Bollinger squeeze (tight bandwidth), ADX confirming trend building, Supertrend aligned, volume supporting the move.',
|
|
48
|
+
version: 4,
|
|
49
|
+
regimeWhitelist: ['RANGE_TIGHT', 'TREND_UP', 'TREND_DOWN', 'VOLATILITY_EXPANSION'],
|
|
50
|
+
minConfidence: 0.45,
|
|
51
|
+
directionRule: 'from_regime',
|
|
52
|
+
conditions: [
|
|
53
|
+
{ type: 'bollinger_squeeze', params: { maxBandwidth: 3.0 } },
|
|
54
|
+
{ type: 'adx_trending', params: { minAdx: 20 } },
|
|
55
|
+
{ type: 'supertrend_direction', params: {} },
|
|
56
|
+
{ type: 'vwap_position', params: {} },
|
|
57
|
+
],
|
|
58
|
+
entryRule: { type: 'atr_offset', params: { atrFraction: 0.15 } },
|
|
59
|
+
stopRule: { type: 'swing_atr', params: { swingCount: 3, atrFraction: 0.5 } },
|
|
60
|
+
targetRMultiples: [1.5, 2.5],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'sweep_reversal',
|
|
64
|
+
description: 'Liquidity grab reversal in a wide range. Price sweeps a key level, order flow shows absorption, OBV diverges (smart money accumulating), and funding is contrarian.',
|
|
65
|
+
version: 4,
|
|
66
|
+
regimeWhitelist: ['RANGE_WIDE'],
|
|
67
|
+
minConfidence: 0.40,
|
|
68
|
+
directionRule: 'from_sweep',
|
|
69
|
+
conditions: [
|
|
70
|
+
{ type: 'price_sweep', params: { swingLookback: 5, recentBars: 10 } },
|
|
71
|
+
{ type: 'order_flow_absorption', params: { maxRatio: 0.3 } },
|
|
72
|
+
{ type: 'funding_contrarian', params: { maxZScore: 1.5 } },
|
|
73
|
+
{ type: 'obv_divergence', params: {} },
|
|
74
|
+
],
|
|
75
|
+
entryRule: { type: 'sweep_range', params: {} },
|
|
76
|
+
stopRule: { type: 'recent_extreme_atr', params: { atrFraction: 0.3 } },
|
|
77
|
+
targetRMultiples: [1.5, 2.5],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'funding_reversion',
|
|
81
|
+
description: 'Mean reversion when funding hits extreme levels. Extreme funding (>2σ) indicates a crowded trade, elevated OI confirms positioning, price near a level adds confluence.',
|
|
82
|
+
version: 4,
|
|
83
|
+
regimeWhitelist: ['RANGE_TIGHT', 'RANGE_WIDE', 'TREND_UP', 'TREND_DOWN', 'VOLATILITY_EXPANSION'],
|
|
84
|
+
minConfidence: 0.40,
|
|
85
|
+
directionRule: 'from_funding',
|
|
86
|
+
conditions: [
|
|
87
|
+
{ type: 'funding_extreme', params: { minZScore: 2 } },
|
|
88
|
+
{ type: 'oi_elevated', params: { elevationRatio: 1.1 } },
|
|
89
|
+
{ type: 'price_at_level', params: { maxDistPct: 0.005 } },
|
|
90
|
+
{ type: 'stoch_rsi_extreme', params: { oversold: 20, overbought: 80 } },
|
|
91
|
+
],
|
|
92
|
+
entryRule: { type: 'atr_offset', params: { atrFraction: 0.2 } },
|
|
93
|
+
stopRule: { type: 'fixed_atr', params: { atrMultiple: 1.5 } },
|
|
94
|
+
targetRMultiples: [1.5, 2.5],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'momentum_divergence',
|
|
98
|
+
description: 'Trend exhaustion trade. MACD divergence (price vs momentum), OBV divergence (volume vs price), Ichimoku weakening, RSI not extreme. Catches the end of a trend before it reverses.',
|
|
99
|
+
version: 4,
|
|
100
|
+
regimeWhitelist: ['TREND_UP', 'TREND_DOWN'],
|
|
101
|
+
minConfidence: 0.42,
|
|
102
|
+
directionRule: 'from_regime',
|
|
103
|
+
conditions: [
|
|
104
|
+
{ type: 'macd_divergence', params: {} },
|
|
105
|
+
{ type: 'obv_divergence', params: {} },
|
|
106
|
+
{ type: 'ichimoku_cloud', params: {} },
|
|
107
|
+
{ type: 'stoch_rsi_extreme', params: { oversold: 30, overbought: 70 } },
|
|
108
|
+
],
|
|
109
|
+
entryRule: { type: 'atr_offset', params: { atrFraction: 0.3 } },
|
|
110
|
+
stopRule: { type: 'swing_atr', params: { swingCount: 3, atrFraction: 0.5 } },
|
|
111
|
+
targetRMultiples: [1.5, 2.5, 3.5],
|
|
112
|
+
},
|
|
113
|
+
];
|