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.
- package/package.json +1 -1
- package/src/menus/ai-agent-connect.js +181 -0
- package/src/menus/ai-agent-models.js +219 -0
- package/src/menus/ai-agent-oauth.js +292 -0
- package/src/menus/ai-agent-ui.js +141 -0
- package/src/menus/ai-agent.js +88 -1489
- package/src/pages/algo/copy-engine.js +449 -0
- package/src/pages/algo/copy-trading.js +11 -543
- package/src/pages/algo/smart-logs-data.js +218 -0
- package/src/pages/algo/smart-logs.js +9 -214
- package/src/pages/algo/ui-constants.js +144 -0
- package/src/pages/algo/ui-summary.js +184 -0
- package/src/pages/algo/ui.js +42 -526
- package/src/pages/stats-calculations.js +191 -0
- package/src/pages/stats-ui.js +381 -0
- package/src/pages/stats.js +14 -507
- package/src/services/ai/client-analysis.js +194 -0
- package/src/services/ai/client-models.js +333 -0
- package/src/services/ai/client.js +6 -489
- package/src/services/ai/index.js +2 -257
- package/src/services/ai/providers/direct-providers.js +323 -0
- package/src/services/ai/providers/index.js +8 -472
- package/src/services/ai/providers/other-providers.js +104 -0
- package/src/services/ai/proxy-install.js +249 -0
- package/src/services/ai/proxy-manager.js +29 -411
- package/src/services/ai/proxy-remote.js +161 -0
- package/src/services/ai/supervisor-optimize.js +215 -0
- package/src/services/ai/supervisor-sync.js +178 -0
- package/src/services/ai/supervisor.js +50 -515
- package/src/services/ai/validation.js +250 -0
- package/src/services/hqx-server-events.js +110 -0
- package/src/services/hqx-server-handlers.js +217 -0
- package/src/services/hqx-server-latency.js +136 -0
- package/src/services/hqx-server.js +51 -403
- package/src/services/position-constants.js +28 -0
- package/src/services/position-exit-logic.js +174 -0
- package/src/services/position-manager.js +90 -629
- package/src/services/position-momentum.js +206 -0
- package/src/services/projectx/accounts.js +142 -0
- package/src/services/projectx/index.js +40 -289
- package/src/services/projectx/trading.js +180 -0
- package/src/services/rithmic/contracts.js +218 -0
- package/src/services/rithmic/handlers.js +2 -208
- package/src/services/rithmic/index.js +28 -712
- package/src/services/rithmic/latency-tracker.js +182 -0
- package/src/services/rithmic/market-data-decoders.js +229 -0
- package/src/services/rithmic/market-data.js +1 -278
- package/src/services/rithmic/orders-fast.js +246 -0
- package/src/services/rithmic/orders.js +1 -251
- package/src/services/rithmic/proto-decoders.js +403 -0
- package/src/services/rithmic/protobuf.js +7 -443
- package/src/services/rithmic/specs.js +146 -0
- package/src/services/rithmic/trade-history.js +254 -0
- package/src/services/strategy/hft-signal-calc.js +147 -0
- package/src/services/strategy/hft-tick.js +33 -133
- package/src/services/tradovate/index.js +6 -119
- 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
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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
|
+
};
|