hedgequantx 1.8.49 → 2.3.0

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 (103) hide show
  1. package/README.md +7 -6
  2. package/bin/cli.js +13 -7
  3. package/dist/algo/copy-engine.js +3 -0
  4. package/dist/algo/copy-engine.jsc +0 -0
  5. package/dist/algo/engine.js +3 -0
  6. package/dist/algo/engine.jsc +0 -0
  7. package/dist/algo/market-data-rithmic.js +3 -0
  8. package/dist/algo/market-data-rithmic.jsc +0 -0
  9. package/dist/algo/market-data.js +3 -0
  10. package/dist/algo/market-data.jsc +0 -0
  11. package/dist/algo/rithmic/connection.js +3 -0
  12. package/dist/algo/rithmic/connection.jsc +0 -0
  13. package/dist/algo/rithmic/constants.js +3 -0
  14. package/dist/algo/rithmic/constants.jsc +0 -0
  15. package/dist/algo/rithmic/index.js +3 -0
  16. package/dist/algo/rithmic/index.jsc +0 -0
  17. package/dist/algo/rithmic/market-data.js +3 -0
  18. package/dist/algo/rithmic/market-data.jsc +0 -0
  19. package/dist/algo/rithmic/pnl.js +3 -0
  20. package/dist/algo/rithmic/pnl.jsc +0 -0
  21. package/dist/algo/rithmic/pool.js +3 -0
  22. package/dist/algo/rithmic/pool.jsc +0 -0
  23. package/dist/algo/rithmic/trading.js +3 -0
  24. package/dist/algo/rithmic/trading.jsc +0 -0
  25. package/dist/algo/rithmic-decoder.js +3 -0
  26. package/dist/algo/rithmic-decoder.jsc +0 -0
  27. package/dist/algo/strategies/ultra-scalping-v2.js +3 -0
  28. package/dist/algo/strategies/ultra-scalping-v2.jsc +0 -0
  29. package/dist/algo/strategies/ultra-scalping.js +3 -0
  30. package/dist/algo/strategies/ultra-scalping.jsc +0 -0
  31. package/dist/algo/trading-api-rithmic.js +3 -0
  32. package/dist/algo/trading-api-rithmic.jsc +0 -0
  33. package/dist/algo/trading-api.js +3 -0
  34. package/dist/algo/trading-api.jsc +0 -0
  35. package/dist/algo/utils/smart-logger.js +3 -0
  36. package/dist/algo/utils/smart-logger.jsc +0 -0
  37. package/dist/algo/utils/smart-logs.js +3 -0
  38. package/dist/algo/utils/smart-logs.jsc +0 -0
  39. package/package.json +33 -10
  40. package/protos/rithmic/account_pnl_position_update.proto +59 -0
  41. package/protos/rithmic/base.proto +7 -0
  42. package/protos/rithmic/best_bid_offer.proto +39 -0
  43. package/protos/rithmic/exchange_order_notification.proto +140 -0
  44. package/protos/rithmic/instrument_pnl_position_update.proto +50 -0
  45. package/protos/rithmic/last_trade.proto +53 -0
  46. package/protos/rithmic/request_account_list.proto +20 -0
  47. package/protos/rithmic/request_cancel_all_orders.proto +15 -0
  48. package/protos/rithmic/request_front_month_contract.proto +10 -0
  49. package/protos/rithmic/request_heartbeat.proto +13 -0
  50. package/protos/rithmic/request_login.proto +28 -0
  51. package/protos/rithmic/request_login_info.proto +10 -0
  52. package/protos/rithmic/request_logout.proto +10 -0
  53. package/protos/rithmic/request_market_data_update.proto +42 -0
  54. package/protos/rithmic/request_new_order.proto +84 -0
  55. package/protos/rithmic/request_pnl_position_snapshot.proto +14 -0
  56. package/protos/rithmic/request_pnl_position_updates.proto +20 -0
  57. package/protos/rithmic/request_product_codes.proto +9 -0
  58. package/protos/rithmic/request_rithmic_system_info.proto +8 -0
  59. package/protos/rithmic/request_show_order_history.proto +16 -0
  60. package/protos/rithmic/request_show_order_history_dates.proto +10 -0
  61. package/protos/rithmic/request_show_order_history_summary.proto +14 -0
  62. package/protos/rithmic/request_show_orders.proto +14 -0
  63. package/protos/rithmic/request_subscribe_for_order_updates.proto +14 -0
  64. package/protos/rithmic/request_tick_bar_replay.proto +48 -0
  65. package/protos/rithmic/request_trade_routes.proto +11 -0
  66. package/protos/rithmic/response_account_list.proto +18 -0
  67. package/protos/rithmic/response_front_month_contract.proto +13 -0
  68. package/protos/rithmic/response_heartbeat.proto +14 -0
  69. package/protos/rithmic/response_login.proto +18 -0
  70. package/protos/rithmic/response_login_info.proto +24 -0
  71. package/protos/rithmic/response_logout.proto +11 -0
  72. package/protos/rithmic/response_market_data_update.proto +9 -0
  73. package/protos/rithmic/response_new_order.proto +18 -0
  74. package/protos/rithmic/response_pnl_position_snapshot.proto +11 -0
  75. package/protos/rithmic/response_pnl_position_updates.proto +11 -0
  76. package/protos/rithmic/response_product_codes.proto +12 -0
  77. package/protos/rithmic/response_rithmic_system_info.proto +12 -0
  78. package/protos/rithmic/response_show_order_history.proto +11 -0
  79. package/protos/rithmic/response_show_order_history_dates.proto +13 -0
  80. package/protos/rithmic/response_show_order_history_summary.proto +11 -0
  81. package/protos/rithmic/response_show_orders.proto +11 -0
  82. package/protos/rithmic/response_subscribe_for_order_updates.proto +11 -0
  83. package/protos/rithmic/response_tick_bar_replay.proto +40 -0
  84. package/protos/rithmic/response_trade_routes.proto +19 -0
  85. package/protos/rithmic/rithmic_order_notification.proto +124 -0
  86. package/src/app.js +136 -89
  87. package/src/config/index.js +27 -8
  88. package/src/config/settings.js +155 -0
  89. package/src/pages/algo/copy-trading.js +293 -200
  90. package/src/pages/algo/one-account.js +1 -1
  91. package/src/security/encryption.js +81 -46
  92. package/src/security/index.js +12 -8
  93. package/src/security/rateLimit.js +68 -65
  94. package/src/security/validation.js +93 -79
  95. package/src/services/hqx-server.js +538 -206
  96. package/src/services/projectx/index.js +327 -204
  97. package/src/services/rithmic/index.js +288 -285
  98. package/src/services/session.js +184 -114
  99. package/src/services/tradovate/index.js +286 -297
  100. package/src/utils/http.js +236 -0
  101. package/src/utils/index.js +11 -2
  102. package/src/utils/logger.js +64 -33
  103. package/src/utils/prompts.js +79 -71
@@ -3,12 +3,12 @@
3
3
  * @module config
4
4
  */
5
5
 
6
- const {
7
- PROPFIRMS,
8
- PROPFIRM_CHOICES,
9
- getPropFirm,
6
+ const {
7
+ PROPFIRMS,
8
+ PROPFIRM_CHOICES,
9
+ getPropFirm,
10
10
  getPropFirmById,
11
- getPropFirmsByPlatform
11
+ getPropFirmsByPlatform,
12
12
  } = require('./propfirms');
13
13
 
14
14
  const {
@@ -17,9 +17,19 @@ const {
17
17
  ORDER_STATUS,
18
18
  ORDER_TYPE,
19
19
  ORDER_SIDE,
20
- FUTURES_SYMBOLS
20
+ FUTURES_SYMBOLS,
21
21
  } = require('./constants');
22
22
 
23
+ const {
24
+ TIMEOUTS,
25
+ RATE_LIMITS,
26
+ SECURITY,
27
+ VALIDATION,
28
+ HQX_SERVER,
29
+ CACHE,
30
+ DEBUG,
31
+ } = require('./settings');
32
+
23
33
  module.exports = {
24
34
  // PropFirms
25
35
  PROPFIRMS,
@@ -27,12 +37,21 @@ module.exports = {
27
37
  getPropFirm,
28
38
  getPropFirmById,
29
39
  getPropFirmsByPlatform,
30
-
40
+
31
41
  // Constants
32
42
  ACCOUNT_STATUS,
33
43
  ACCOUNT_TYPE,
34
44
  ORDER_STATUS,
35
45
  ORDER_TYPE,
36
46
  ORDER_SIDE,
37
- FUTURES_SYMBOLS
47
+ FUTURES_SYMBOLS,
48
+
49
+ // Settings
50
+ TIMEOUTS,
51
+ RATE_LIMITS,
52
+ SECURITY,
53
+ VALIDATION,
54
+ HQX_SERVER,
55
+ CACHE,
56
+ DEBUG,
38
57
  };
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @fileoverview Centralized application settings and constants
3
+ * @module config/settings
4
+ */
5
+
6
+ // ==================== TIMEOUTS ====================
7
+ const TIMEOUTS = {
8
+ // HTTP Requests
9
+ API_REQUEST: 15000,
10
+ LOGIN_REQUEST: 30000,
11
+
12
+ // WebSocket
13
+ WS_CONNECTION: 10000,
14
+ WS_HEARTBEAT: 5000,
15
+ WS_RECONNECT_BASE: 1000,
16
+ WS_RECONNECT_MAX: 30000,
17
+
18
+ // Rithmic Protocol
19
+ RITHMIC_LOGIN: 30000,
20
+ RITHMIC_PNL: 10000,
21
+ RITHMIC_TICKER: 10000,
22
+ RITHMIC_CONTRACTS: 5000,
23
+ RITHMIC_PRODUCTS: 8000,
24
+
25
+ // UI
26
+ SPINNER_INTERVAL: 250,
27
+ MENU_DEBOUNCE: 100,
28
+ };
29
+
30
+ // ==================== RATE LIMITS ====================
31
+ const RATE_LIMITS = {
32
+ API: { maxRequests: 60, windowMs: 60000, minInterval: 100 },
33
+ LOGIN: { maxRequests: 5, windowMs: 60000, minInterval: 2000 },
34
+ ORDERS: { maxRequests: 30, windowMs: 60000, minInterval: 200 },
35
+ DATA: { maxRequests: 120, windowMs: 60000, minInterval: 50 },
36
+ };
37
+
38
+ // ==================== SECURITY ====================
39
+ const SECURITY = {
40
+ // Encryption
41
+ ALGORITHM: 'aes-256-gcm',
42
+ IV_LENGTH: 16,
43
+ AUTH_TAG_LENGTH: 16,
44
+ SALT_LENGTH: 32,
45
+ KEY_LENGTH: 32,
46
+ PBKDF2_ITERATIONS: 100000,
47
+
48
+ // Password Policy
49
+ PASSWORD_MIN_LENGTH: 8,
50
+ PASSWORD_MAX_LENGTH: 128,
51
+ PASSWORD_REQUIRE_UPPERCASE: true,
52
+ PASSWORD_REQUIRE_NUMBER: true,
53
+ PASSWORD_REQUIRE_SPECIAL: false,
54
+
55
+ // Session
56
+ SESSION_DIR: '.hedgequantx',
57
+ SESSION_FILE: 'session.enc',
58
+ FILE_PERMISSIONS: 0o600,
59
+ DIR_PERMISSIONS: 0o700,
60
+
61
+ // Tokens
62
+ TOKEN_VISIBLE_CHARS: 4,
63
+ MAX_RECONNECT_ATTEMPTS: 5,
64
+ };
65
+
66
+ // ==================== VALIDATION ====================
67
+ const VALIDATION = {
68
+ USERNAME_MIN: 3,
69
+ USERNAME_MAX: 50,
70
+ USERNAME_PATTERN: /^[a-zA-Z0-9._@-]+$/,
71
+
72
+ API_KEY_MIN: 10,
73
+ API_KEY_MAX: 256,
74
+ API_KEY_PATTERN: /^[a-zA-Z0-9_-]+$/,
75
+
76
+ SYMBOL_MIN: 1,
77
+ SYMBOL_MAX: 20,
78
+ SYMBOL_PATTERN: /^[A-Z0-9]+$/,
79
+
80
+ QUANTITY_MIN: 1,
81
+ QUANTITY_MAX: 1000,
82
+
83
+ PRICE_MIN: 0,
84
+ PRICE_MAX: 1000000,
85
+
86
+ ACCOUNT_ID_MAX: Number.MAX_SAFE_INTEGER,
87
+
88
+ STRING_MAX_LENGTH: 1000,
89
+ };
90
+
91
+ // ==================== HQX SERVER (ULTRA LOW LATENCY) ====================
92
+ const HQX_SERVER = {
93
+ DEFAULT_HOST: '173.212.223.75',
94
+ DEFAULT_PORT: 3500,
95
+ VERSION: 'v1',
96
+
97
+ // Latency optimizations
98
+ CONNECT_TIMEOUT: 5000, // Fast connection timeout
99
+ AUTH_TIMEOUT: 5000, // Fast auth timeout
100
+ INITIAL_HEARTBEAT: 1000, // Start at 1s, adapts based on latency
101
+ MIN_HEARTBEAT: 250, // Minimum 250ms for high latency
102
+ MAX_HEARTBEAT: 2000, // Maximum 2s for low latency
103
+
104
+ // Reconnection (fast initial, then backoff)
105
+ RECONNECT_INITIAL: 100, // Start at 100ms
106
+ RECONNECT_MAX: 10000, // Max 10s
107
+ MAX_RECONNECT_ATTEMPTS: 10, // More attempts for trading
108
+
109
+ // Buffer sizes
110
+ MAX_PAYLOAD: 65536, // 64KB
111
+ SEND_BUFFER: 65536,
112
+ RECV_BUFFER: 65536,
113
+
114
+ // Latency thresholds (ms) for adaptive heartbeat
115
+ LATENCY_EXCELLENT: 10, // <10ms = 2s heartbeat
116
+ LATENCY_GOOD: 50, // <50ms = 1s heartbeat
117
+ LATENCY_FAIR: 100, // <100ms = 500ms heartbeat
118
+ // >100ms = 250ms heartbeat
119
+
120
+ get host() {
121
+ return process.env.HQX_HOST || this.DEFAULT_HOST;
122
+ },
123
+ get port() {
124
+ return parseInt(process.env.HQX_PORT, 10) || this.DEFAULT_PORT;
125
+ },
126
+ get wsUrl() {
127
+ if (process.env.HQX_WS_URL) return process.env.HQX_WS_URL;
128
+ const protocol = process.env.HQX_WS_SECURE === 'false' ? 'ws' : 'wss';
129
+ return `${protocol}://${this.host}:${this.port}/ws`;
130
+ },
131
+ };
132
+
133
+ // ==================== CACHE ====================
134
+ const CACHE = {
135
+ CONTRACTS_TTL: 300000, // 5 minutes
136
+ STATS_TTL: 60000, // 1 minute
137
+ };
138
+
139
+ // ==================== DEBUG ====================
140
+ const DEBUG = {
141
+ get enabled() {
142
+ return process.env.HQX_DEBUG === '1';
143
+ },
144
+ LOG_FILE: 'debug.log',
145
+ };
146
+
147
+ module.exports = {
148
+ TIMEOUTS,
149
+ RATE_LIMITS,
150
+ SECURITY,
151
+ VALIDATION,
152
+ HQX_SERVER,
153
+ CACHE,
154
+ DEBUG,
155
+ };