hedgequantx 2.6.161 → 2.6.163

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 (57) hide show
  1. package/package.json +1 -1
  2. package/src/menus/ai-agent-connect.js +181 -0
  3. package/src/menus/ai-agent-models.js +219 -0
  4. package/src/menus/ai-agent-oauth.js +292 -0
  5. package/src/menus/ai-agent-ui.js +141 -0
  6. package/src/menus/ai-agent.js +88 -1489
  7. package/src/pages/algo/copy-engine.js +449 -0
  8. package/src/pages/algo/copy-trading.js +11 -543
  9. package/src/pages/algo/smart-logs-data.js +218 -0
  10. package/src/pages/algo/smart-logs.js +9 -214
  11. package/src/pages/algo/ui-constants.js +144 -0
  12. package/src/pages/algo/ui-summary.js +184 -0
  13. package/src/pages/algo/ui.js +42 -526
  14. package/src/pages/stats-calculations.js +191 -0
  15. package/src/pages/stats-ui.js +381 -0
  16. package/src/pages/stats.js +14 -507
  17. package/src/services/ai/client-analysis.js +194 -0
  18. package/src/services/ai/client-models.js +333 -0
  19. package/src/services/ai/client.js +6 -489
  20. package/src/services/ai/index.js +2 -257
  21. package/src/services/ai/providers/direct-providers.js +323 -0
  22. package/src/services/ai/providers/index.js +8 -472
  23. package/src/services/ai/providers/other-providers.js +104 -0
  24. package/src/services/ai/proxy-install.js +249 -0
  25. package/src/services/ai/proxy-manager.js +29 -411
  26. package/src/services/ai/proxy-remote.js +161 -0
  27. package/src/services/ai/supervisor-optimize.js +215 -0
  28. package/src/services/ai/supervisor-sync.js +178 -0
  29. package/src/services/ai/supervisor.js +50 -515
  30. package/src/services/ai/validation.js +250 -0
  31. package/src/services/hqx-server-events.js +110 -0
  32. package/src/services/hqx-server-handlers.js +217 -0
  33. package/src/services/hqx-server-latency.js +136 -0
  34. package/src/services/hqx-server.js +51 -403
  35. package/src/services/position-constants.js +28 -0
  36. package/src/services/position-exit-logic.js +174 -0
  37. package/src/services/position-manager.js +90 -629
  38. package/src/services/position-momentum.js +206 -0
  39. package/src/services/projectx/accounts.js +142 -0
  40. package/src/services/projectx/index.js +40 -289
  41. package/src/services/projectx/trading.js +180 -0
  42. package/src/services/rithmic/contracts.js +218 -0
  43. package/src/services/rithmic/handlers.js +2 -208
  44. package/src/services/rithmic/index.js +28 -712
  45. package/src/services/rithmic/latency-tracker.js +182 -0
  46. package/src/services/rithmic/market-data-decoders.js +229 -0
  47. package/src/services/rithmic/market-data.js +1 -278
  48. package/src/services/rithmic/orders-fast.js +246 -0
  49. package/src/services/rithmic/orders.js +1 -251
  50. package/src/services/rithmic/proto-decoders.js +403 -0
  51. package/src/services/rithmic/protobuf.js +7 -443
  52. package/src/services/rithmic/specs.js +146 -0
  53. package/src/services/rithmic/trade-history.js +254 -0
  54. package/src/services/strategy/hft-signal-calc.js +147 -0
  55. package/src/services/strategy/hft-tick.js +33 -133
  56. package/src/services/tradovate/index.js +6 -119
  57. package/src/services/tradovate/orders.js +145 -0
@@ -13,6 +13,7 @@ const { TIMEOUTS } = require('../../config/settings');
13
13
  const { TRADOVATE_URLS, API_PATHS, getBaseUrl, getTradingWebSocketUrl } = require('./constants');
14
14
  const { checkMarketHours, isDST } = require('./market');
15
15
  const { connectWebSocket, wsSend, disconnectWebSocket } = require('./websocket');
16
+ const { getOrders, placeOrder, cancelOrder, closePosition, getOrderHistory } = require('./orders');
16
17
  const { logger } = require('../../utils/logger');
17
18
 
18
19
  const log = logger.scope('Tradovate');
@@ -252,112 +253,10 @@ class TradovateService extends EventEmitter {
252
253
 
253
254
  // ==================== ORDERS ====================
254
255
 
255
- /**
256
- * Get orders
257
- * @param {number} [accountId] - Optional account filter
258
- * @returns {Promise<{success: boolean, orders: Array, error?: string}>}
259
- */
260
- async getOrders(accountId) {
261
- try {
262
- const result = await this._request(API_PATHS.ORDER_LIST, 'GET');
263
- const orders = Array.isArray(result.data) ? result.data : [];
264
-
265
- const filtered = accountId
266
- ? orders.filter(o => o.accountId === accountId)
267
- : orders;
268
-
269
- return {
270
- success: true,
271
- orders: filtered.map(o => ({
272
- orderId: o.id,
273
- accountId: o.accountId,
274
- symbol: o.contractId,
275
- side: o.action === 'Buy' ? 0 : 1,
276
- quantity: o.orderQty,
277
- filledQuantity: o.filledQty || 0,
278
- price: o.price,
279
- status: o.ordStatus === 'Working' ? 1 : (o.ordStatus === 'Filled' ? 2 : 0),
280
- orderType: o.orderType,
281
- })),
282
- };
283
- } catch (err) {
284
- return { success: false, error: err.message, orders: [] };
285
- }
286
- }
287
-
288
- /**
289
- * Place an order
290
- * @param {Object} orderData - Order details
291
- * @returns {Promise<{success: boolean, orderId?: number, error?: string}>}
292
- */
293
- async placeOrder(orderData) {
294
- try {
295
- const result = await this._request(API_PATHS.ORDER_PLACE, 'POST', {
296
- accountId: orderData.accountId,
297
- action: orderData.side === 0 ? 'Buy' : 'Sell',
298
- symbol: orderData.symbol,
299
- orderQty: orderData.size,
300
- orderType: orderData.type === 2 ? 'Market' : 'Limit',
301
- price: orderData.price,
302
- isAutomated: true,
303
- });
304
-
305
- if (result.data.errorText || result.data.failureReason) {
306
- return { success: false, error: result.data.errorText || result.data.failureText };
307
- }
308
-
309
- log.info('Order placed', { orderId: result.data.orderId });
310
- return { success: true, orderId: result.data.orderId };
311
- } catch (err) {
312
- return { success: false, error: err.message };
313
- }
314
- }
315
-
316
- /**
317
- * Cancel an order
318
- * @param {number} orderId - Order ID
319
- * @returns {Promise<{success: boolean, error?: string}>}
320
- */
321
- async cancelOrder(orderId) {
322
- try {
323
- const result = await this._request(API_PATHS.ORDER_CANCEL, 'POST', {
324
- orderId,
325
- isAutomated: true,
326
- });
327
-
328
- if (result.data.errorText) {
329
- return { success: false, error: result.data.errorText };
330
- }
331
-
332
- return { success: true };
333
- } catch (err) {
334
- return { success: false, error: err.message };
335
- }
336
- }
337
-
338
- /**
339
- * Close a position
340
- * @param {number} accountId - Account ID
341
- * @param {number} contractId - Contract ID
342
- * @returns {Promise<{success: boolean, error?: string}>}
343
- */
344
- async closePosition(accountId, contractId) {
345
- try {
346
- const result = await this._request(API_PATHS.ORDER_LIQUIDATE_POSITION, 'POST', {
347
- accountId,
348
- contractId,
349
- isAutomated: true,
350
- });
351
-
352
- if (result.data.errorText) {
353
- return { success: false, error: result.data.errorText };
354
- }
355
-
356
- return { success: true };
357
- } catch (err) {
358
- return { success: false, error: err.message };
359
- }
360
- }
256
+ async getOrders(accountId) { return getOrders(this, accountId); }
257
+ async placeOrder(orderData) { return placeOrder(this, orderData); }
258
+ async cancelOrder(orderId) { return cancelOrder(this, orderId); }
259
+ async closePosition(accountId, contractId) { return closePosition(this, accountId, contractId); }
361
260
 
362
261
  // ==================== TRADES ====================
363
262
 
@@ -404,19 +303,7 @@ class TradovateService extends EventEmitter {
404
303
  }
405
304
  }
406
305
 
407
- /**
408
- * Get order history
409
- * @param {number} [days=30] - Days of history
410
- * @returns {Promise<{success: boolean, orders: Array, error?: string}>}
411
- */
412
- async getOrderHistory(days = 30) {
413
- try {
414
- const result = await this._request(API_PATHS.ORDER_LIST, 'GET');
415
- return { success: true, orders: result.data || [] };
416
- } catch (err) {
417
- return { success: false, error: err.message, orders: [] };
418
- }
419
- }
306
+ async getOrderHistory(days = 30) { return getOrderHistory(this, days); }
420
307
 
421
308
  // ==================== CONTRACTS ====================
422
309
 
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Tradovate Orders Module
3
+ * @module services/tradovate/orders
4
+ *
5
+ * Order placement, cancellation, and queries
6
+ */
7
+
8
+ const { API_PATHS } = require('./constants');
9
+ const { logger } = require('../../utils/logger');
10
+
11
+ const log = logger.scope('TradovateOrders');
12
+
13
+ /**
14
+ * Get orders
15
+ * @param {TradovateService} service
16
+ * @param {number} [accountId]
17
+ * @returns {Promise<{success: boolean, orders: Array, error?: string}>}
18
+ */
19
+ async function getOrders(service, accountId) {
20
+ try {
21
+ const result = await service._request(API_PATHS.ORDER_LIST, 'GET');
22
+ const orders = Array.isArray(result.data) ? result.data : [];
23
+
24
+ const filtered = accountId
25
+ ? orders.filter(o => o.accountId === accountId)
26
+ : orders;
27
+
28
+ return {
29
+ success: true,
30
+ orders: filtered.map(o => ({
31
+ orderId: o.id,
32
+ accountId: o.accountId,
33
+ symbol: o.contractId,
34
+ side: o.action === 'Buy' ? 0 : 1,
35
+ quantity: o.orderQty,
36
+ filledQuantity: o.filledQty || 0,
37
+ price: o.price,
38
+ status: o.ordStatus === 'Working' ? 1 : (o.ordStatus === 'Filled' ? 2 : 0),
39
+ orderType: o.orderType,
40
+ })),
41
+ };
42
+ } catch (err) {
43
+ return { success: false, error: err.message, orders: [] };
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Place an order
49
+ * @param {TradovateService} service
50
+ * @param {Object} orderData
51
+ * @returns {Promise<{success: boolean, orderId?: number, error?: string}>}
52
+ */
53
+ async function placeOrder(service, orderData) {
54
+ try {
55
+ const result = await service._request(API_PATHS.ORDER_PLACE, 'POST', {
56
+ accountId: orderData.accountId,
57
+ action: orderData.side === 0 ? 'Buy' : 'Sell',
58
+ symbol: orderData.symbol,
59
+ orderQty: orderData.size,
60
+ orderType: orderData.type === 2 ? 'Market' : 'Limit',
61
+ price: orderData.price,
62
+ isAutomated: true,
63
+ });
64
+
65
+ if (result.data.errorText || result.data.failureReason) {
66
+ return { success: false, error: result.data.errorText || result.data.failureText };
67
+ }
68
+
69
+ log.info('Order placed', { orderId: result.data.orderId });
70
+ return { success: true, orderId: result.data.orderId };
71
+ } catch (err) {
72
+ return { success: false, error: err.message };
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Cancel an order
78
+ * @param {TradovateService} service
79
+ * @param {number} orderId
80
+ * @returns {Promise<{success: boolean, error?: string}>}
81
+ */
82
+ async function cancelOrder(service, orderId) {
83
+ try {
84
+ const result = await service._request(API_PATHS.ORDER_CANCEL, 'POST', {
85
+ orderId,
86
+ isAutomated: true,
87
+ });
88
+
89
+ if (result.data.errorText) {
90
+ return { success: false, error: result.data.errorText };
91
+ }
92
+
93
+ return { success: true };
94
+ } catch (err) {
95
+ return { success: false, error: err.message };
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Close a position
101
+ * @param {TradovateService} service
102
+ * @param {number} accountId
103
+ * @param {number} contractId
104
+ * @returns {Promise<{success: boolean, error?: string}>}
105
+ */
106
+ async function closePosition(service, accountId, contractId) {
107
+ try {
108
+ const result = await service._request(API_PATHS.ORDER_LIQUIDATE_POSITION, 'POST', {
109
+ accountId,
110
+ contractId,
111
+ isAutomated: true,
112
+ });
113
+
114
+ if (result.data.errorText) {
115
+ return { success: false, error: result.data.errorText };
116
+ }
117
+
118
+ return { success: true };
119
+ } catch (err) {
120
+ return { success: false, error: err.message };
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Get order history
126
+ * @param {TradovateService} service
127
+ * @param {number} [days=30]
128
+ * @returns {Promise<{success: boolean, orders: Array, error?: string}>}
129
+ */
130
+ async function getOrderHistory(service, days = 30) {
131
+ try {
132
+ const result = await service._request(API_PATHS.ORDER_LIST, 'GET');
133
+ return { success: true, orders: result.data || [] };
134
+ } catch (err) {
135
+ return { success: false, error: err.message, orders: [] };
136
+ }
137
+ }
138
+
139
+ module.exports = {
140
+ getOrders,
141
+ placeOrder,
142
+ cancelOrder,
143
+ closePosition,
144
+ getOrderHistory,
145
+ };