@123456btc/123456btc-cli 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/api/signals.d.ts +3 -3
  2. package/dist/api/signals.d.ts.map +1 -1
  3. package/dist/api/signals.js +3 -3
  4. package/dist/api/signals.js.map +1 -1
  5. package/dist/api/strategy-stream.d.ts +4 -9
  6. package/dist/api/strategy-stream.d.ts.map +1 -1
  7. package/dist/api/strategy-stream.js +14 -13
  8. package/dist/api/strategy-stream.js.map +1 -1
  9. package/dist/api/strategy.d.ts +3 -1
  10. package/dist/api/strategy.d.ts.map +1 -1
  11. package/dist/api/strategy.js +3 -1
  12. package/dist/api/strategy.js.map +1 -1
  13. package/dist/commands/exchange.d.ts +3 -0
  14. package/dist/commands/exchange.d.ts.map +1 -0
  15. package/dist/commands/exchange.js +141 -0
  16. package/dist/commands/exchange.js.map +1 -0
  17. package/dist/commands/signals.js +7 -7
  18. package/dist/commands/signals.js.map +1 -1
  19. package/dist/commands/strategy.d.ts.map +1 -1
  20. package/dist/commands/strategy.js +181 -8
  21. package/dist/commands/strategy.js.map +1 -1
  22. package/dist/commands/vault.d.ts.map +1 -1
  23. package/dist/commands/vault.js +5 -3
  24. package/dist/commands/vault.js.map +1 -1
  25. package/dist/config/strategy-exchange.d.ts +30 -0
  26. package/dist/config/strategy-exchange.d.ts.map +1 -0
  27. package/dist/config/strategy-exchange.js +130 -0
  28. package/dist/config/strategy-exchange.js.map +1 -0
  29. package/dist/exchange/index.d.ts +106 -0
  30. package/dist/exchange/index.d.ts.map +1 -0
  31. package/dist/exchange/index.js +43 -0
  32. package/dist/exchange/index.js.map +1 -0
  33. package/dist/exchange/v2/adapters/base.d.ts +130 -0
  34. package/dist/exchange/v2/adapters/base.d.ts.map +1 -0
  35. package/dist/exchange/v2/adapters/base.js +296 -0
  36. package/dist/exchange/v2/adapters/base.js.map +1 -0
  37. package/dist/exchange/v2/adapters/binance.d.ts +51 -0
  38. package/dist/exchange/v2/adapters/binance.d.ts.map +1 -0
  39. package/dist/exchange/v2/adapters/binance.js +549 -0
  40. package/dist/exchange/v2/adapters/binance.js.map +1 -0
  41. package/dist/exchange/v2/adapters/bitget.d.ts +43 -0
  42. package/dist/exchange/v2/adapters/bitget.d.ts.map +1 -0
  43. package/dist/exchange/v2/adapters/bitget.js +524 -0
  44. package/dist/exchange/v2/adapters/bitget.js.map +1 -0
  45. package/dist/exchange/v2/adapters/hyperliquid.d.ts +102 -0
  46. package/dist/exchange/v2/adapters/hyperliquid.d.ts.map +1 -0
  47. package/dist/exchange/v2/adapters/hyperliquid.js +536 -0
  48. package/dist/exchange/v2/adapters/hyperliquid.js.map +1 -0
  49. package/dist/exchange/v2/adapters/okx.d.ts +38 -0
  50. package/dist/exchange/v2/adapters/okx.d.ts.map +1 -0
  51. package/dist/exchange/v2/adapters/okx.js +437 -0
  52. package/dist/exchange/v2/adapters/okx.js.map +1 -0
  53. package/dist/exchange/v2/algorithms/index.d.ts +78 -0
  54. package/dist/exchange/v2/algorithms/index.d.ts.map +1 -0
  55. package/dist/exchange/v2/algorithms/index.js +441 -0
  56. package/dist/exchange/v2/algorithms/index.js.map +1 -0
  57. package/dist/exchange/v2/executor/circuit-breaker.d.ts +44 -0
  58. package/dist/exchange/v2/executor/circuit-breaker.d.ts.map +1 -0
  59. package/dist/exchange/v2/executor/circuit-breaker.js +90 -0
  60. package/dist/exchange/v2/executor/circuit-breaker.js.map +1 -0
  61. package/dist/exchange/v2/executor/core.d.ts +64 -0
  62. package/dist/exchange/v2/executor/core.d.ts.map +1 -0
  63. package/dist/exchange/v2/executor/core.js +458 -0
  64. package/dist/exchange/v2/executor/core.js.map +1 -0
  65. package/dist/exchange/v2/executor/risk.d.ts +29 -0
  66. package/dist/exchange/v2/executor/risk.d.ts.map +1 -0
  67. package/dist/exchange/v2/executor/risk.js +144 -0
  68. package/dist/exchange/v2/executor/risk.js.map +1 -0
  69. package/dist/exchange/v2/executor/state.d.ts +29 -0
  70. package/dist/exchange/v2/executor/state.d.ts.map +1 -0
  71. package/dist/exchange/v2/executor/state.js +171 -0
  72. package/dist/exchange/v2/executor/state.js.map +1 -0
  73. package/dist/exchange/v2/index.d.ts +50 -0
  74. package/dist/exchange/v2/index.d.ts.map +1 -0
  75. package/dist/exchange/v2/index.js +82 -0
  76. package/dist/exchange/v2/index.js.map +1 -0
  77. package/dist/exchange/v2/registry.d.ts +50 -0
  78. package/dist/exchange/v2/registry.d.ts.map +1 -0
  79. package/dist/exchange/v2/registry.js +101 -0
  80. package/dist/exchange/v2/registry.js.map +1 -0
  81. package/dist/exchange/v2/types.d.ts +413 -0
  82. package/dist/exchange/v2/types.d.ts.map +1 -0
  83. package/dist/exchange/v2/types.js +3 -0
  84. package/dist/exchange/v2/types.js.map +1 -0
  85. package/dist/index.d.ts +105 -22
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +40 -37
  88. package/dist/index.js.map +1 -1
  89. package/dist/types/financial.d.ts +14 -0
  90. package/dist/types/financial.d.ts.map +1 -0
  91. package/dist/types/financial.js +6 -0
  92. package/dist/types/financial.js.map +1 -0
  93. package/dist/vault/crypto.js +3 -3
  94. package/dist/vault/crypto.js.map +1 -1
  95. package/dist/vault/index.d.ts +28 -0
  96. package/dist/vault/index.d.ts.map +1 -1
  97. package/dist/vault/index.js +70 -0
  98. package/dist/vault/index.js.map +1 -1
  99. package/package.json +1 -1
@@ -0,0 +1,64 @@
1
+ /**
2
+ * OrderEngine — Core Execution Engine
3
+ * The main entry point for all order operations.
4
+ * Handles: pre-checks, order submission, retry with backoff, state tracking,
5
+ * callback notifications, and algo order dispatch.
6
+ */
7
+ import type { IExchangeAdapter } from '../adapters/base';
8
+ import type { Price, Quantity } from '../../../types/financial';
9
+ import type { EngineConfig, OrderRequest, OrderResponse, TrackedOrder, AlgoOrderResult, BracketOrderRequest, TwapParams, VwapParams, IcebergParams, AccountSnapshot, PositionInfo, TickerInfo, SymbolInfo, OHLCVBar, OrderBook, MarketType, BatchOrderRequest, AmendOrderRequest, OrderHistoryQuery, OrderHistoryResponse, TradeHistoryQuery, TradeHistoryResponse, CancelAllOrdersRequest, MarginModeRequest } from '../types';
10
+ export declare class OrderEngine {
11
+ private adapter;
12
+ private state;
13
+ private risk;
14
+ private config;
15
+ private retry;
16
+ private _twap?;
17
+ private _vwap?;
18
+ private _iceberg?;
19
+ private _bracket?;
20
+ private _trailing?;
21
+ private _rateLimiter;
22
+ private _circuitBreaker;
23
+ constructor(adapter: IExchangeAdapter, config: EngineConfig);
24
+ getTicker(symbol: string): Promise<TickerInfo>;
25
+ getSymbolInfo(symbol: string): Promise<SymbolInfo>;
26
+ getOHLCV(symbol: string, timeframe: string, limit?: number): Promise<OHLCVBar[]>;
27
+ getOrderBook(symbol: string, depth?: number): Promise<OrderBook>;
28
+ listSymbols(marketType: MarketType): Promise<string[]>;
29
+ getAccount(): Promise<AccountSnapshot>;
30
+ getPositions(symbol?: string): Promise<PositionInfo[]>;
31
+ setLeverage(symbol: string, leverage: number, marginMode?: 'cross' | 'isolated'): Promise<void>;
32
+ setMarginMode(request: MarginModeRequest): Promise<void>;
33
+ submitOrders(batch: BatchOrderRequest): Promise<TrackedOrder[]>;
34
+ amendOrder(request: AmendOrderRequest): Promise<TrackedOrder | null>;
35
+ cancelAllOrders(request?: CancelAllOrdersRequest): Promise<boolean>;
36
+ getOrderHistory(query: OrderHistoryQuery): Promise<OrderHistoryResponse>;
37
+ getFills(query: TradeHistoryQuery): Promise<TradeHistoryResponse>;
38
+ submitOrder(request: OrderRequest): Promise<TrackedOrder>;
39
+ cancelOrder(orderId: string, symbol: string): Promise<boolean>;
40
+ syncOrderStatus(orderId: string, symbol: string): Promise<TrackedOrder | null>;
41
+ getOpenOrders(symbol?: string): Promise<OrderResponse[]>;
42
+ executeTWAP(params: TwapParams): Promise<AlgoOrderResult>;
43
+ executeVWAP(params: VwapParams): Promise<AlgoOrderResult>;
44
+ executeIceberg(params: IcebergParams): Promise<AlgoOrderResult>;
45
+ executeBracket(request: BracketOrderRequest): Promise<import('../algorithms/index').BracketResult>;
46
+ monitorTrailingStop(params: {
47
+ symbol: string;
48
+ side: import('../types').OrderSide;
49
+ quantity: Quantity;
50
+ callbackRate: number;
51
+ activationPrice?: Price;
52
+ tickMs?: number;
53
+ maxDurationMs?: number;
54
+ }): Promise<import('../algorithms/index').TrailingStopState>;
55
+ getTrackedOrder(id: string): TrackedOrder | undefined;
56
+ listTrackedOrders(filter?: {
57
+ status?: import('../types').OrderStatus;
58
+ }): TrackedOrder[];
59
+ purgeOldOrders(maxAgeMs?: number): number;
60
+ getCircuitBreakerState(): import('./circuit-breaker').CircuitState;
61
+ getCircuitBreakerMetrics(): ReturnType<import('./circuit-breaker').CircuitBreaker['getMetrics']>;
62
+ private emitUpdate;
63
+ }
64
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/exchange/v2/executor/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAYzD,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACX,YAAY,EAEZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EAEjB,MAAM,UAAU,CAAC;AAWlB,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAc;IAG3B,OAAO,CAAC,KAAK,CAAC,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAC,CAAsB;IAGxC,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,eAAe,CAAiB;gBAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IA8B3D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI9C,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIlD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIhF,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIhE,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMtD,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAItC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIhD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/F,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxD,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoC/D,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAWpE,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBnE,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAOxE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IASjE,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IA8IzD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa9D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAa9E,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAMxD,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;IAKzD,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;IAKzD,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAK/D,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,qBAAqB,EAAE,aAAa,CAAC;IAalG,mBAAmB,CAAC,MAAM,EAAE;QACjC,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,OAAO,UAAU,EAAE,SAAS,CAAC;QACnC,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,KAAK,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,OAAO,qBAAqB,EAAE,iBAAiB,CAAC;IAO5D,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIrD,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,UAAU,EAAE,WAAW,CAAA;KAAE,GAAG,YAAY,EAAE;IAIvF,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIzC,sBAAsB,IAAI,OAAO,mBAAmB,EAAE,YAAY;IAIlE,wBAAwB,IAAI,UAAU,CAAC,OAAO,mBAAmB,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAMhG,OAAO,CAAC,UAAU;CAOlB"}
@@ -0,0 +1,458 @@
1
+ "use strict";
2
+ /**
3
+ * OrderEngine — Core Execution Engine
4
+ * The main entry point for all order operations.
5
+ * Handles: pre-checks, order submission, retry with backoff, state tracking,
6
+ * callback notifications, and algo order dispatch.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.OrderEngine = void 0;
10
+ const base_1 = require("../adapters/base");
11
+ const state_1 = require("./state");
12
+ const risk_1 = require("./risk");
13
+ const circuit_breaker_1 = require("./circuit-breaker");
14
+ const index_1 = require("../algorithms/index");
15
+ const DEFAULT_RETRY = {
16
+ maxAttempts: 3,
17
+ baseDelayMs: 500,
18
+ maxDelayMs: 10_000,
19
+ backoffFactor: 2,
20
+ retryOn: ['rate limit', 'timeout', 'network', '429', 'too many'],
21
+ noRetryOn: ['insufficient', 'invalid symbol', 'invalid order', 'minimum'],
22
+ };
23
+ class OrderEngine {
24
+ adapter;
25
+ state;
26
+ risk;
27
+ config;
28
+ retry;
29
+ // Algo executors (lazy-initialized)
30
+ _twap;
31
+ _vwap;
32
+ _iceberg;
33
+ _bracket;
34
+ _trailing;
35
+ // Rate limiter
36
+ _rateLimiter;
37
+ // Circuit breaker
38
+ _circuitBreaker;
39
+ constructor(adapter, config) {
40
+ this.adapter = adapter;
41
+ this.config = config;
42
+ this.state = new state_1.OrderStateManager();
43
+ this.risk = new risk_1.RiskGuard(config.riskLimits ?? {}, config.riskStatePersistence);
44
+ this.retry = { ...DEFAULT_RETRY, ...config.retryPolicy };
45
+ // Default: 10 orders/sec burst, 5 orders/sec sustained
46
+ this._rateLimiter = new TokenBucket(10, 5 / 1000);
47
+ this._circuitBreaker = new circuit_breaker_1.CircuitBreaker(config.circuitBreaker);
48
+ // Register rate limit callback for dynamic token bucket adjustment
49
+ if (adapter instanceof base_1.BaseExchangeAdapter) {
50
+ adapter['onRateLimit'] = (info) => {
51
+ const used = info.usedWeight ?? (info.weightLimit ?? 0) - (info.remaining ?? 0);
52
+ const limit = info.weightLimit ?? 1200;
53
+ const ratio = used / limit;
54
+ if (ratio > 0.8) {
55
+ // Reduce to 2 orders/sec sustained when near limit
56
+ this._rateLimiter.setRate(2 / 1000, 5);
57
+ console.warn(`[OrderEngine] Rate limit throttle: ${used}/${limit} (${(ratio * 100).toFixed(0)}%). Reduced to 2/s.`);
58
+ }
59
+ else if (ratio < 0.3) {
60
+ // Restore to normal when well below limit
61
+ this._rateLimiter.setRate(5 / 1000, 10);
62
+ }
63
+ };
64
+ }
65
+ }
66
+ // ─── Market Data Passthrough ──────────────────────────────────────────────
67
+ getTicker(symbol) {
68
+ return this.adapter.getTicker(symbol);
69
+ }
70
+ getSymbolInfo(symbol) {
71
+ return this.adapter.getSymbolInfo(symbol);
72
+ }
73
+ getOHLCV(symbol, timeframe, limit) {
74
+ return this.adapter.getOHLCV(symbol, timeframe, limit);
75
+ }
76
+ getOrderBook(symbol, depth) {
77
+ return this.adapter.getOrderBook(symbol, depth);
78
+ }
79
+ listSymbols(marketType) {
80
+ return this.adapter.listSymbols(marketType);
81
+ }
82
+ // ─── Account ──────────────────────────────────────────────────────────────
83
+ getAccount() {
84
+ return this.adapter.getAccount();
85
+ }
86
+ getPositions(symbol) {
87
+ return this.adapter.getPositions(symbol);
88
+ }
89
+ async setLeverage(symbol, leverage, marginMode) {
90
+ if (this.adapter.setLeverage) {
91
+ await this.adapter.setLeverage(symbol, leverage, marginMode);
92
+ }
93
+ }
94
+ async setMarginMode(request) {
95
+ if (this.adapter.setMarginMode) {
96
+ await this.adapter.setMarginMode(request);
97
+ }
98
+ }
99
+ // ─── Batch & Advanced Order Operations ────────────────────────────────────
100
+ async submitOrders(batch) {
101
+ if (!this.adapter.placeOrders) {
102
+ // Fallback to sequential submission
103
+ const tracked = [];
104
+ for (const req of batch.orders) {
105
+ try {
106
+ tracked.push(await this.submitOrder(req));
107
+ }
108
+ catch (err) {
109
+ // Continue with remaining orders; caller can inspect state
110
+ }
111
+ }
112
+ return tracked;
113
+ }
114
+ // Batch path
115
+ const results = [];
116
+ const rawBatch = { grouping: batch.grouping, orders: batch.orders.map(requestToRaw) };
117
+ const resp = await this.adapter.placeOrders(rawBatch);
118
+ for (let i = 0; i < resp.results.length; i++) {
119
+ const r = resp.results[i];
120
+ const clientOrderId = batch.orders[i].clientOrderId ?? (0, base_1.genClientOrderId)();
121
+ const tracked = this.state.register(clientOrderId, this.config.exchange, batch.orders[i]);
122
+ const bound = this.state.bind(clientOrderId, r.orderId) ?? tracked;
123
+ this.state.applyResponse(r.orderId, r);
124
+ this.risk.recordOrderOpened();
125
+ this.emitUpdate(bound);
126
+ results.push(bound);
127
+ }
128
+ for (const f of resp.failed) {
129
+ const clientOrderId = batch.orders[f.index].clientOrderId ?? '';
130
+ this.state.markError(clientOrderId, f.error);
131
+ const order = this.state.get(clientOrderId);
132
+ if (order)
133
+ this.emitUpdate(order);
134
+ }
135
+ return results;
136
+ }
137
+ async amendOrder(request) {
138
+ if (!this.adapter.amendOrder) {
139
+ throw new base_1.ExchangeError('amendOrder not supported by this exchange', this.config.exchange);
140
+ }
141
+ const resp = await this.adapter.amendOrder(request);
142
+ this.state.applyResponse(request.orderId, resp);
143
+ const tracked = this.state.get(request.orderId);
144
+ if (tracked)
145
+ this.emitUpdate(tracked);
146
+ return tracked ?? null;
147
+ }
148
+ async cancelAllOrders(request) {
149
+ if (!this.adapter.cancelAllOrders) {
150
+ throw new base_1.ExchangeError('cancelAllOrders not supported by this exchange', this.config.exchange);
151
+ }
152
+ const success = await this.adapter.cancelAllOrders(request);
153
+ if (success) {
154
+ // Mark all tracked open orders as cancelled for this symbol
155
+ const openOrders = this.state.list({ status: 'open' });
156
+ for (const o of openOrders) {
157
+ if (!request?.symbol || o.request.symbol === request.symbol) {
158
+ this.state.transition(o.orderId, 'cancelled');
159
+ this.risk.recordOrderClosed();
160
+ this.emitUpdate(o);
161
+ }
162
+ }
163
+ }
164
+ return success;
165
+ }
166
+ async getOrderHistory(query) {
167
+ if (!this.adapter.getOrderHistory) {
168
+ throw new base_1.ExchangeError('getOrderHistory not supported by this exchange', this.config.exchange);
169
+ }
170
+ return this.adapter.getOrderHistory(query);
171
+ }
172
+ async getFills(query) {
173
+ if (!this.adapter.getFills) {
174
+ throw new base_1.ExchangeError('getFills not supported by this exchange', this.config.exchange);
175
+ }
176
+ return this.adapter.getFills(query);
177
+ }
178
+ // ─── Standard Order Execution ─────────────────────────────────────────────
179
+ async submitOrder(request) {
180
+ const clientOrderId = request.clientOrderId ?? (0, base_1.genClientOrderId)();
181
+ request = { ...request, clientOrderId };
182
+ // 0. Circuit breaker check
183
+ if (!this._circuitBreaker.canExecute()) {
184
+ throw new base_1.ExchangeError('Circuit breaker is open', this.config.exchange);
185
+ }
186
+ // 1. Rate limit check
187
+ if (!this._rateLimiter.tryConsume(1)) {
188
+ this._circuitBreaker.recordFailure();
189
+ throw new base_1.ExchangeError('Order rate limit exceeded', this.config.exchange);
190
+ }
191
+ // 1. Register in state manager
192
+ const tracked = this.state.register(clientOrderId, this.config.exchange, request);
193
+ // 2. Fetch symbol info for validation & rounding
194
+ let symbolInfo = null;
195
+ try {
196
+ symbolInfo = await this.adapter.getSymbolInfo(request.symbol);
197
+ }
198
+ catch { /* proceed without symbol info */ }
199
+ // 3. Pre-flight validation (precision, min qty, etc.)
200
+ if (symbolInfo && this.adapter.validateOrder) {
201
+ const rawParams = requestToRaw(request);
202
+ const validationErrors = await this.adapter.validateOrder(rawParams, symbolInfo);
203
+ if (validationErrors.length > 0) {
204
+ const reason = validationErrors.join('; ');
205
+ this.state.markError(clientOrderId, `Validation failed: ${reason}`);
206
+ const order = this.state.get(clientOrderId);
207
+ this.emitUpdate(order);
208
+ throw new base_1.ExchangeError(`Order validation failed: ${reason}`, this.config.exchange);
209
+ }
210
+ }
211
+ // 4. Auto-round quantity and price to exchange precision
212
+ if (symbolInfo) {
213
+ if ('quantity' in request && request.quantity !== undefined) {
214
+ request.quantity = (0, base_1.roundToStep)(request.quantity, symbolInfo.stepSize);
215
+ }
216
+ if ('price' in request && request.price !== undefined) {
217
+ request.price = (0, base_1.roundToTick)(request.price, symbolInfo.tickSize);
218
+ }
219
+ if ('entryPrice' in request && request.entryPrice !== undefined) {
220
+ request.entryPrice = (0, base_1.roundToTick)(request.entryPrice, symbolInfo.tickSize);
221
+ }
222
+ if ('stopPrice' in request && request.stopPrice !== undefined) {
223
+ request.stopPrice = (0, base_1.roundToTick)(request.stopPrice, symbolInfo.tickSize);
224
+ }
225
+ }
226
+ // 5. Risk check
227
+ let ticker = null;
228
+ try {
229
+ ticker = await this.adapter.getTicker(request.symbol);
230
+ }
231
+ catch { /* proceed without ticker */ }
232
+ // Conservative mode: if ticker fails, reject market orders and warn on others
233
+ if (!ticker && request.type === 'market') {
234
+ this.state.markError(clientOrderId, 'Market order blocked: unable to fetch ticker for slippage check');
235
+ const order = this.state.get(clientOrderId);
236
+ this.emitUpdate(order);
237
+ throw new base_1.ExchangeError('Market order blocked: unable to fetch ticker for slippage check', this.config.exchange);
238
+ }
239
+ const riskResult = await this.risk.check(request, ticker);
240
+ if (!riskResult.passed) {
241
+ const reason = riskResult.results.map(r => r.message).join('; ');
242
+ this.state.markError(clientOrderId, `Risk block: ${reason}`);
243
+ const order = this.state.get(clientOrderId);
244
+ this.emitUpdate(order);
245
+ throw new base_1.ExchangeError(`Order blocked by risk guard: ${reason}`, this.config.exchange);
246
+ }
247
+ // Use adjusted request if risk guard reduced quantity
248
+ const effectiveRequest = riskResult.adjustedRequest ?? request;
249
+ // 6. Submit with retry
250
+ let lastError;
251
+ for (let attempt = 0; attempt < this.retry.maxAttempts; attempt++) {
252
+ if (attempt > 0) {
253
+ const delay = Math.min(this.retry.baseDelayMs * Math.pow(this.retry.backoffFactor, attempt - 1), this.retry.maxDelayMs);
254
+ await sleep(delay);
255
+ this.state.incrementRetry(clientOrderId);
256
+ }
257
+ try {
258
+ // Convert high-level request to raw adapter params
259
+ const rawParams = requestToRaw(effectiveRequest);
260
+ const response = await this.adapter.placeOrder(rawParams);
261
+ // Bind exchange orderId to our tracking
262
+ const bound = this.state.bind(clientOrderId, response.orderId) ?? tracked;
263
+ this.state.applyResponse(response.orderId, response);
264
+ this.risk.recordOrderOpened();
265
+ this._circuitBreaker.recordSuccess();
266
+ this.emitUpdate(bound);
267
+ return bound;
268
+ }
269
+ catch (err) {
270
+ lastError = err;
271
+ const msg = lastError.message?.toLowerCase() ?? '';
272
+ // Never retry on these
273
+ const noRetry = this.retry.noRetryOn?.some(s => msg.includes(s.toLowerCase()));
274
+ if (noRetry || err instanceof base_1.InsufficientFundsError) {
275
+ this.state.markError(clientOrderId, lastError.message);
276
+ this._circuitBreaker.recordFailure();
277
+ const order = this.state.get(clientOrderId);
278
+ this.emitUpdate(order);
279
+ throw lastError;
280
+ }
281
+ // Rate limit hit: halve the token bucket rate and retry
282
+ if (err instanceof base_1.RateLimitError) {
283
+ const currentRate = 5 / 1000; // default
284
+ this._rateLimiter.setRate(currentRate / 2, 5);
285
+ console.warn(`[OrderEngine] RateLimitError: halving rate to ${(currentRate / 2 * 1000).toFixed(1)}/s. Retry ${attempt + 1}/${this.retry.maxAttempts}`);
286
+ continue;
287
+ }
288
+ // Only retry on known transient errors
289
+ const shouldRetry = this.retry.retryOn?.some(s => msg.includes(s.toLowerCase()));
290
+ if (!shouldRetry) {
291
+ this.state.markError(clientOrderId, lastError.message);
292
+ this._circuitBreaker.recordFailure();
293
+ const order = this.state.get(clientOrderId);
294
+ this.emitUpdate(order);
295
+ throw lastError;
296
+ }
297
+ }
298
+ }
299
+ // All retries exhausted
300
+ this.state.markError(clientOrderId, lastError?.message ?? 'Max retries exceeded');
301
+ this._circuitBreaker.recordFailure();
302
+ const order = this.state.get(clientOrderId);
303
+ this.emitUpdate(order);
304
+ throw lastError ?? new Error('Order submission failed after max retries');
305
+ }
306
+ async cancelOrder(orderId, symbol) {
307
+ const success = await this.adapter.cancelOrder(orderId, symbol);
308
+ if (success) {
309
+ this.state.transition(orderId, 'cancelled');
310
+ const order = this.state.get(orderId);
311
+ if (order) {
312
+ this.risk.recordOrderClosed();
313
+ this.emitUpdate(order);
314
+ }
315
+ }
316
+ return success;
317
+ }
318
+ async syncOrderStatus(orderId, symbol) {
319
+ const response = await this.adapter.getOrderStatus(orderId, symbol);
320
+ this.state.applyResponse(orderId, response);
321
+ const tracked = this.state.get(orderId);
322
+ if (tracked) {
323
+ if (['filled', 'partially_filled', 'cancelled', 'rejected', 'expired'].includes(response.status)) {
324
+ this.risk.recordOrderClosed();
325
+ }
326
+ this.emitUpdate(tracked);
327
+ }
328
+ return tracked ?? null;
329
+ }
330
+ async getOpenOrders(symbol) {
331
+ return this.adapter.getOpenOrders(symbol);
332
+ }
333
+ // ─── Algo Order Dispatch ──────────────────────────────────────────────────
334
+ async executeTWAP(params) {
335
+ if (!this._twap)
336
+ this._twap = new index_1.TWAPExecutor(this.adapter);
337
+ return this._twap.execute(params);
338
+ }
339
+ async executeVWAP(params) {
340
+ if (!this._vwap)
341
+ this._vwap = new index_1.VWAPExecutor(this.adapter);
342
+ return this._vwap.execute(params);
343
+ }
344
+ async executeIceberg(params) {
345
+ if (!this._iceberg)
346
+ this._iceberg = new index_1.IcebergExecutor(this.adapter);
347
+ return this._iceberg.execute(params);
348
+ }
349
+ async executeBracket(request) {
350
+ if (!this._bracket)
351
+ this._bracket = new index_1.BracketOrchestrator(this.adapter);
352
+ return this._bracket.execute({
353
+ symbol: request.symbol,
354
+ side: request.side,
355
+ quantity: request.quantity,
356
+ entryType: request.entryType,
357
+ entryPrice: request.entryPrice,
358
+ takeProfitPrice: request.takeProfitPrice,
359
+ stopLossPrice: request.stopLossPrice,
360
+ });
361
+ }
362
+ async monitorTrailingStop(params) {
363
+ if (!this._trailing)
364
+ this._trailing = new index_1.TrailingStopMonitor(this.adapter);
365
+ return this._trailing.monitor(params);
366
+ }
367
+ // ─── State Queries ────────────────────────────────────────────────────────
368
+ getTrackedOrder(id) {
369
+ return this.state.get(id);
370
+ }
371
+ listTrackedOrders(filter) {
372
+ return this.state.list(filter);
373
+ }
374
+ purgeOldOrders(maxAgeMs) {
375
+ return this.state.purge(maxAgeMs);
376
+ }
377
+ getCircuitBreakerState() {
378
+ return this._circuitBreaker.getState();
379
+ }
380
+ getCircuitBreakerMetrics() {
381
+ return this._circuitBreaker.getMetrics();
382
+ }
383
+ // ─── Internal ────────────────────────────────────────────────────────────
384
+ emitUpdate(order) {
385
+ if (this.config.onOrderUpdate) {
386
+ Promise.resolve(this.config.onOrderUpdate(order)).catch(e => {
387
+ this.config.onError?.(e, order);
388
+ });
389
+ }
390
+ }
391
+ }
392
+ exports.OrderEngine = OrderEngine;
393
+ // ─── Request Conversion ───────────────────────────────────────────────────
394
+ function requestToRaw(req) {
395
+ const base = {
396
+ symbol: req.symbol,
397
+ side: req.side,
398
+ type: req.type,
399
+ reduceOnly: req.reduceOnly,
400
+ positionSide: req.positionSide,
401
+ clientOrderId: req.clientOrderId,
402
+ };
403
+ switch (req.type) {
404
+ case 'market':
405
+ return { ...base, quantity: req.quantity, quoteQuantity: req.quoteQuantity };
406
+ case 'limit':
407
+ return { ...base, quantity: req.quantity, price: req.price, timeInForce: req.timeInForce, postOnly: req.postOnly };
408
+ case 'stop_market':
409
+ case 'stop_limit':
410
+ case 'take_profit_market':
411
+ case 'take_profit_limit':
412
+ return { ...base, quantity: req.quantity, stopPrice: req.stopPrice, price: req.price, timeInForce: req.timeInForce };
413
+ case 'trailing_stop':
414
+ return { ...base, quantity: req.quantity, extra: { callbackRate: req.callbackRate, callbackValue: req.callbackValue, activationPrice: req.activationPrice } };
415
+ case 'bracket':
416
+ return {
417
+ ...base, quantity: req.quantity, price: req.entryPrice,
418
+ extra: { entryType: req.entryType, takeProfitPrice: req.takeProfitPrice, stopLossPrice: req.stopLossPrice },
419
+ };
420
+ case 'oco':
421
+ return { ...base, quantity: req.quantity, price: req.price, stopPrice: req.stopPrice, extra: { stopLimitPrice: req.stopLimitPrice } };
422
+ default:
423
+ return { ...base, quantity: req.quantity };
424
+ }
425
+ }
426
+ function sleep(ms) {
427
+ return new Promise(r => setTimeout(r, ms));
428
+ }
429
+ // ─── Token Bucket Rate Limiter ────────────────────────────────────────────
430
+ class TokenBucket {
431
+ maxTokens;
432
+ refillRatePerMs;
433
+ tokens;
434
+ lastRefill;
435
+ constructor(maxTokens, refillRatePerMs) {
436
+ this.maxTokens = maxTokens;
437
+ this.refillRatePerMs = refillRatePerMs;
438
+ this.tokens = maxTokens;
439
+ this.lastRefill = Date.now();
440
+ }
441
+ setRate(ratePerMs, maxTokens) {
442
+ this.refillRatePerMs = ratePerMs;
443
+ if (maxTokens !== undefined)
444
+ this.maxTokens = maxTokens;
445
+ }
446
+ tryConsume(amount = 1) {
447
+ const now = Date.now();
448
+ const elapsed = now - this.lastRefill;
449
+ this.tokens = Math.min(this.maxTokens, this.tokens + elapsed * this.refillRatePerMs);
450
+ this.lastRefill = now;
451
+ if (this.tokens >= amount) {
452
+ this.tokens -= amount;
453
+ return true;
454
+ }
455
+ return false;
456
+ }
457
+ }
458
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/exchange/v2/executor/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Risk Guard — Pre-execution checks
3
+ * Validates every order against configurable risk limits before sending to exchange.
4
+ */
5
+ import type { Pnl } from '../../../types/financial';
6
+ import type { OrderRequest, RiskLimits, RiskCheckResult, TickerInfo } from '../types';
7
+ export interface RiskStateSnapshot {
8
+ dailyLoss: number;
9
+ openOrders: number;
10
+ }
11
+ export interface RiskStatePersistence {
12
+ load: () => RiskStateSnapshot | Promise<RiskStateSnapshot>;
13
+ save: (state: RiskStateSnapshot) => void | Promise<void>;
14
+ }
15
+ export declare class RiskGuard {
16
+ private limits;
17
+ private dailyLoss;
18
+ private openOrderCount;
19
+ private persistence?;
20
+ constructor(limits: RiskLimits, persistence?: RiskStatePersistence);
21
+ private _save;
22
+ /** Update running daily loss tracker (call on each filled order PnL) */
23
+ recordPnl(pnl: Pnl): void;
24
+ recordOrderOpened(): void;
25
+ recordOrderClosed(): void;
26
+ resetDailyStats(): void;
27
+ check(order: OrderRequest, ticker: TickerInfo | null): Promise<RiskCheckResult>;
28
+ }
29
+ //# sourceMappingURL=risk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../../../src/exchange/v2/executor/risk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAmB,GAAG,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EAGf,UAAU,EACV,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,qBAAa,SAAS;IAKT,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,WAAW,CAAC,CAAuB;gBAEvB,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,oBAAoB;IAa1E,OAAO,CAAC,KAAK;IAOb,wEAAwE;IACxE,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAKzB,iBAAiB,IAAI,IAAI;IACzB,iBAAiB,IAAI,IAAI;IAEzB,eAAe,IAAI,IAAI;IAKjB,KAAK,CACV,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,UAAU,GAAG,IAAI,GACvB,OAAO,CAAC,eAAe,CAAC;CAyF3B"}