@3rd-eye-labs/openmm 0.1.5 → 0.1.7

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 (271) hide show
  1. package/dist/api/index.d.ts +3 -0
  2. package/dist/api/index.d.ts.map +1 -0
  3. package/dist/api/index.js +9 -0
  4. package/dist/api/index.js.map +1 -0
  5. package/dist/api/openapi.d.ts +3 -0
  6. package/dist/api/openapi.d.ts.map +1 -0
  7. package/dist/api/openapi.js +214 -0
  8. package/dist/api/openapi.js.map +1 -0
  9. package/dist/api/routes/balance.d.ts +3 -0
  10. package/dist/api/routes/balance.d.ts.map +1 -0
  11. package/dist/api/routes/balance.js +101 -0
  12. package/dist/api/routes/balance.js.map +1 -0
  13. package/dist/api/routes/cardano.d.ts +3 -0
  14. package/dist/api/routes/cardano.d.ts.map +1 -0
  15. package/dist/api/routes/cardano.js +177 -0
  16. package/dist/api/routes/cardano.js.map +1 -0
  17. package/dist/api/routes/health.d.ts +3 -0
  18. package/dist/api/routes/health.d.ts.map +1 -0
  19. package/dist/api/routes/health.js +115 -0
  20. package/dist/api/routes/health.js.map +1 -0
  21. package/dist/api/routes/index.d.ts +3 -0
  22. package/dist/api/routes/index.d.ts.map +1 -0
  23. package/dist/api/routes/index.js +39 -0
  24. package/dist/api/routes/index.js.map +1 -0
  25. package/dist/api/routes/orderbook.d.ts +3 -0
  26. package/dist/api/routes/orderbook.d.ts.map +1 -0
  27. package/dist/api/routes/orderbook.js +123 -0
  28. package/dist/api/routes/orderbook.js.map +1 -0
  29. package/dist/api/routes/orders.d.ts +3 -0
  30. package/dist/api/routes/orders.d.ts.map +1 -0
  31. package/dist/api/routes/orders.js +214 -0
  32. package/dist/api/routes/orders.js.map +1 -0
  33. package/dist/api/routes/price.d.ts +3 -0
  34. package/dist/api/routes/price.d.ts.map +1 -0
  35. package/dist/api/routes/price.js +124 -0
  36. package/dist/api/routes/price.js.map +1 -0
  37. package/dist/api/routes/strategy.d.ts +3 -0
  38. package/dist/api/routes/strategy.d.ts.map +1 -0
  39. package/dist/api/routes/strategy.js +345 -0
  40. package/dist/api/routes/strategy.js.map +1 -0
  41. package/dist/api/routes/ticker.d.ts +3 -0
  42. package/dist/api/routes/ticker.d.ts.map +1 -0
  43. package/dist/api/routes/ticker.js +91 -0
  44. package/dist/api/routes/ticker.js.map +1 -0
  45. package/dist/api/routes/trades.d.ts +3 -0
  46. package/dist/api/routes/trades.d.ts.map +1 -0
  47. package/dist/api/routes/trades.js +129 -0
  48. package/dist/api/routes/trades.js.map +1 -0
  49. package/dist/api/server.d.ts +11 -0
  50. package/dist/api/server.d.ts.map +1 -0
  51. package/dist/api/server.js +65 -0
  52. package/dist/api/server.js.map +1 -0
  53. package/dist/cli/cli.js +3 -1
  54. package/dist/cli/cli.js.map +1 -1
  55. package/dist/cli/commands/grid.d.ts +3 -0
  56. package/dist/cli/commands/grid.d.ts.map +1 -0
  57. package/dist/cli/commands/grid.js +103 -0
  58. package/dist/cli/commands/grid.js.map +1 -0
  59. package/dist/cli/commands/multi-trade.d.ts +3 -0
  60. package/dist/cli/commands/multi-trade.d.ts.map +1 -0
  61. package/dist/cli/commands/multi-trade.js +175 -0
  62. package/dist/cli/commands/multi-trade.js.map +1 -0
  63. package/dist/cli/commands/serve.d.ts +3 -0
  64. package/dist/cli/commands/serve.d.ts.map +1 -0
  65. package/dist/cli/commands/serve.js +53 -0
  66. package/dist/cli/commands/serve.js.map +1 -0
  67. package/dist/cli/pool-discovery.d.ts +56 -0
  68. package/dist/cli/pool-discovery.d.ts.map +1 -0
  69. package/dist/cli/pool-discovery.js +283 -0
  70. package/dist/cli/pool-discovery.js.map +1 -0
  71. package/dist/config/environment.d.ts +19 -0
  72. package/dist/config/environment.d.ts.map +1 -1
  73. package/dist/config/environment.js +87 -51
  74. package/dist/config/environment.js.map +1 -1
  75. package/dist/core/price-aggregation/price-cache.d.ts +55 -0
  76. package/dist/core/price-aggregation/price-cache.d.ts.map +1 -0
  77. package/dist/core/price-aggregation/price-cache.js +152 -0
  78. package/dist/core/price-aggregation/price-cache.js.map +1 -0
  79. package/dist/examples/mexc-connector-comprehensive-test.d.ts +15 -0
  80. package/dist/examples/mexc-connector-comprehensive-test.d.ts.map +1 -0
  81. package/dist/examples/mexc-connector-comprehensive-test.js +514 -0
  82. package/dist/examples/mexc-connector-comprehensive-test.js.map +1 -0
  83. package/dist/examples/mexc-order-update-test.d.ts +4 -0
  84. package/dist/examples/mexc-order-update-test.d.ts.map +1 -0
  85. package/dist/examples/mexc-order-update-test.js +186 -0
  86. package/dist/examples/mexc-order-update-test.js.map +1 -0
  87. package/dist/examples/mexc-test.d.ts +9 -0
  88. package/dist/examples/mexc-test.d.ts.map +1 -0
  89. package/dist/examples/mexc-test.js +218 -0
  90. package/dist/examples/mexc-test.js.map +1 -0
  91. package/dist/examples/mexc-trades-debug.d.ts +2 -0
  92. package/dist/examples/mexc-trades-debug.d.ts.map +1 -0
  93. package/dist/examples/mexc-trades-debug.js +101 -0
  94. package/dist/examples/mexc-trades-debug.js.map +1 -0
  95. package/dist/examples/mexc-trades-subscription-debug.d.ts +2 -0
  96. package/dist/examples/mexc-trades-subscription-debug.d.ts.map +1 -0
  97. package/dist/examples/mexc-trades-subscription-debug.js +150 -0
  98. package/dist/examples/mexc-trades-subscription-debug.js.map +1 -0
  99. package/dist/examples/mexc-websocket-test.d.ts +8 -0
  100. package/dist/examples/mexc-websocket-test.d.ts.map +1 -0
  101. package/dist/examples/mexc-websocket-test.js +115 -0
  102. package/dist/examples/mexc-websocket-test.js.map +1 -0
  103. package/dist/examples/test-protobuf-status-detection.d.ts +9 -0
  104. package/dist/examples/test-protobuf-status-detection.d.ts.map +1 -0
  105. package/dist/examples/test-protobuf-status-detection.js +83 -0
  106. package/dist/examples/test-protobuf-status-detection.js.map +1 -0
  107. package/dist/exchanges/base-exchange-connector.d.ts +33 -0
  108. package/dist/exchanges/base-exchange-connector.d.ts.map +1 -0
  109. package/dist/exchanges/base-exchange-connector.js +55 -0
  110. package/dist/exchanges/base-exchange-connector.js.map +1 -0
  111. package/dist/exchanges/kraken/test-kraken-websocket.d.ts +19 -0
  112. package/dist/exchanges/kraken/test-kraken-websocket.d.ts.map +1 -0
  113. package/dist/exchanges/kraken/test-kraken-websocket.js +413 -0
  114. package/dist/exchanges/kraken/test-kraken-websocket.js.map +1 -0
  115. package/dist/index.d.ts +1 -0
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +2 -0
  118. package/dist/index.js.map +1 -1
  119. package/dist/mcp/resources/index.d.ts +3 -0
  120. package/dist/mcp/resources/index.d.ts.map +1 -0
  121. package/dist/mcp/resources/index.js +11 -0
  122. package/dist/mcp/resources/index.js.map +1 -0
  123. package/dist/mcp/server.d.ts +4 -0
  124. package/dist/mcp/server.d.ts.map +1 -0
  125. package/dist/mcp/server.js +29 -0
  126. package/dist/mcp/server.js.map +1 -0
  127. package/dist/mcp/tools/index.d.ts +3 -0
  128. package/dist/mcp/tools/index.d.ts.map +1 -0
  129. package/dist/mcp/tools/index.js +12 -0
  130. package/dist/mcp/tools/index.js.map +1 -0
  131. package/dist/tests/fixtures/test-helpers.d.ts +5 -0
  132. package/dist/tests/fixtures/test-helpers.d.ts.map +1 -0
  133. package/dist/tests/fixtures/test-helpers.js +8 -0
  134. package/dist/tests/fixtures/test-helpers.js.map +1 -0
  135. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts +2 -0
  136. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts.map +1 -0
  137. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js +237 -0
  138. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js.map +1 -0
  139. package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts +2 -0
  140. package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts.map +1 -0
  141. package/dist/tests/integration/price-aggregation/cardano-price-service.test.js +57 -0
  142. package/dist/tests/integration/price-aggregation/cardano-price-service.test.js.map +1 -0
  143. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts +2 -0
  144. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts.map +1 -0
  145. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js +141 -0
  146. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js.map +1 -0
  147. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts +2 -0
  148. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts.map +1 -0
  149. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js +375 -0
  150. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js.map +1 -0
  151. package/dist/tests/unit/cli/exchange-factory.test.d.ts +2 -0
  152. package/dist/tests/unit/cli/exchange-factory.test.d.ts.map +1 -0
  153. package/dist/tests/unit/cli/exchange-factory.test.js +148 -0
  154. package/dist/tests/unit/cli/exchange-factory.test.js.map +1 -0
  155. package/dist/tests/unit/config/environment.test.d.ts +2 -0
  156. package/dist/tests/unit/config/environment.test.d.ts.map +1 -0
  157. package/dist/tests/unit/config/environment.test.js +158 -0
  158. package/dist/tests/unit/config/environment.test.js.map +1 -0
  159. package/dist/tests/unit/config/launcher-config.test.d.ts +2 -0
  160. package/dist/tests/unit/config/launcher-config.test.d.ts.map +1 -0
  161. package/dist/tests/unit/config/launcher-config.test.js +117 -0
  162. package/dist/tests/unit/config/launcher-config.test.js.map +1 -0
  163. package/dist/tests/unit/config/price-aggregation.test.d.ts +2 -0
  164. package/dist/tests/unit/config/price-aggregation.test.d.ts.map +1 -0
  165. package/dist/tests/unit/config/price-aggregation.test.js +144 -0
  166. package/dist/tests/unit/config/price-aggregation.test.js.map +1 -0
  167. package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts +2 -0
  168. package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts.map +1 -0
  169. package/dist/tests/unit/core/exchange/base-exchange-connector.test.js +191 -0
  170. package/dist/tests/unit/core/exchange/base-exchange-connector.test.js.map +1 -0
  171. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts +2 -0
  172. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts.map +1 -0
  173. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js +324 -0
  174. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js.map +1 -0
  175. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts +2 -0
  176. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts.map +1 -0
  177. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js +177 -0
  178. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js.map +1 -0
  179. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts +2 -0
  180. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts.map +1 -0
  181. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js +168 -0
  182. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js.map +1 -0
  183. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts +2 -0
  184. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts.map +1 -0
  185. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js +217 -0
  186. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js.map +1 -0
  187. package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts +2 -0
  188. package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts.map +1 -0
  189. package/dist/tests/unit/core/price-aggregation/price-calculator.test.js +229 -0
  190. package/dist/tests/unit/core/price-aggregation/price-calculator.test.js.map +1 -0
  191. package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts +2 -0
  192. package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts.map +1 -0
  193. package/dist/tests/unit/core/risk-management/risk-manager.test.js +194 -0
  194. package/dist/tests/unit/core/risk-management/risk-manager.test.js.map +1 -0
  195. package/dist/tests/unit/core/strategy/base-strategy.test.d.ts +2 -0
  196. package/dist/tests/unit/core/strategy/base-strategy.test.d.ts.map +1 -0
  197. package/dist/tests/unit/core/strategy/base-strategy.test.js +254 -0
  198. package/dist/tests/unit/core/strategy/base-strategy.test.js.map +1 -0
  199. package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts +2 -0
  200. package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts.map +1 -0
  201. package/dist/tests/unit/core/strategy/strategy-factory.test.js +213 -0
  202. package/dist/tests/unit/core/strategy/strategy-factory.test.js.map +1 -0
  203. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts +2 -0
  204. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts.map +1 -0
  205. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js +452 -0
  206. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js.map +1 -0
  207. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts +2 -0
  208. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts.map +1 -0
  209. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js +1419 -0
  210. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js.map +1 -0
  211. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts +2 -0
  212. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts.map +1 -0
  213. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js +435 -0
  214. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js.map +1 -0
  215. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts +2 -0
  216. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts.map +1 -0
  217. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js +314 -0
  218. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js.map +1 -0
  219. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts +2 -0
  220. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts.map +1 -0
  221. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js +178 -0
  222. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js.map +1 -0
  223. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts +2 -0
  224. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts.map +1 -0
  225. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js +502 -0
  226. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js.map +1 -0
  227. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts +2 -0
  228. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts.map +1 -0
  229. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js +317 -0
  230. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js.map +1 -0
  231. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts +2 -0
  232. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts.map +1 -0
  233. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js +843 -0
  234. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js.map +1 -0
  235. package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts +2 -0
  236. package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts.map +1 -0
  237. package/dist/tests/unit/strategies/grid/grid-calculator.test.js +67 -0
  238. package/dist/tests/unit/strategies/grid/grid-calculator.test.js.map +1 -0
  239. package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts +2 -0
  240. package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts.map +1 -0
  241. package/dist/tests/unit/strategies/grid/grid-order-manager.test.js +211 -0
  242. package/dist/tests/unit/strategies/grid/grid-order-manager.test.js.map +1 -0
  243. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts +2 -0
  244. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts.map +1 -0
  245. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js +197 -0
  246. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js.map +1 -0
  247. package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts +2 -0
  248. package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts.map +1 -0
  249. package/dist/tests/unit/strategies/grid/grid-strategy.test.js +429 -0
  250. package/dist/tests/unit/strategies/grid/grid-strategy.test.js.map +1 -0
  251. package/dist/tests/unit/utils/logger.test.d.ts +2 -0
  252. package/dist/tests/unit/utils/logger.test.d.ts.map +1 -0
  253. package/dist/tests/unit/utils/logger.test.js +260 -0
  254. package/dist/tests/unit/utils/logger.test.js.map +1 -0
  255. package/dist/tests/unit/utils/symbol-utils.test.d.ts +2 -0
  256. package/dist/tests/unit/utils/symbol-utils.test.d.ts.map +1 -0
  257. package/dist/tests/unit/utils/symbol-utils.test.js +178 -0
  258. package/dist/tests/unit/utils/symbol-utils.test.js.map +1 -0
  259. package/dist/types/price-aggregation.d.ts +31 -0
  260. package/dist/types/price-aggregation.d.ts.map +1 -0
  261. package/dist/types/price-aggregation.js +6 -0
  262. package/dist/types/price-aggregation.js.map +1 -0
  263. package/dist/utils/crypto.d.ts +15 -0
  264. package/dist/utils/crypto.d.ts.map +1 -0
  265. package/dist/utils/crypto.js +50 -0
  266. package/dist/utils/crypto.js.map +1 -0
  267. package/dist/utils/validation.d.ts +36 -0
  268. package/dist/utils/validation.d.ts.map +1 -0
  269. package/dist/utils/validation.js +174 -0
  270. package/dist/utils/validation.js.map +1 -0
  271. package/package.json +6 -2
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tradesRoutes = tradesRoutes;
4
+ const exchange_factory_1 = require("../../cli/exchange-factory");
5
+ async function tradesRoutes(app) {
6
+ app.get('/trades', {
7
+ schema: {
8
+ tags: ['Market Data'],
9
+ summary: 'Get recent trades',
10
+ description: 'Returns recent trades for a trading pair with buy/sell breakdown.',
11
+ querystring: {
12
+ type: 'object',
13
+ required: ['exchange', 'symbol'],
14
+ properties: {
15
+ exchange: {
16
+ type: 'string',
17
+ enum: ['mexc', 'gateio', 'bitget', 'kraken'],
18
+ description: 'Exchange to query',
19
+ },
20
+ symbol: {
21
+ type: 'string',
22
+ description: 'Trading pair (e.g., BTC/USDT)',
23
+ example: 'BTC/USDT',
24
+ },
25
+ limit: {
26
+ type: 'integer',
27
+ minimum: 1,
28
+ maximum: 500,
29
+ default: 50,
30
+ description: 'Number of trades to return (max 500)',
31
+ },
32
+ },
33
+ },
34
+ response: {
35
+ 200: {
36
+ type: 'object',
37
+ properties: {
38
+ exchange: { type: 'string' },
39
+ symbol: { type: 'string' },
40
+ trades: {
41
+ type: 'array',
42
+ items: {
43
+ type: 'object',
44
+ properties: {
45
+ id: { type: 'string' },
46
+ symbol: { type: 'string' },
47
+ side: { type: 'string', enum: ['buy', 'sell'] },
48
+ price: { type: 'number' },
49
+ amount: { type: 'number' },
50
+ cost: { type: 'number', description: 'price * amount' },
51
+ timestamp: { type: 'number' },
52
+ },
53
+ },
54
+ },
55
+ summary: {
56
+ type: 'object',
57
+ properties: {
58
+ totalTrades: { type: 'number' },
59
+ buyCount: { type: 'number' },
60
+ sellCount: { type: 'number' },
61
+ buyVolume: { type: 'number' },
62
+ sellVolume: { type: 'number' },
63
+ avgPrice: { type: 'number' },
64
+ },
65
+ },
66
+ },
67
+ },
68
+ 400: {
69
+ type: 'object',
70
+ properties: { error: { type: 'string' } },
71
+ },
72
+ 500: {
73
+ type: 'object',
74
+ properties: { error: { type: 'string' } },
75
+ },
76
+ },
77
+ },
78
+ }, async (request, reply) => {
79
+ const { exchange, symbol, limit = 50 } = request.query;
80
+ if (!exchange || !symbol) {
81
+ return reply.status(400).send({ error: 'Missing required parameters: exchange and symbol' });
82
+ }
83
+ const validExchanges = ['mexc', 'gateio', 'bitget', 'kraken'];
84
+ if (!validExchanges.includes(exchange)) {
85
+ return reply.status(400).send({ error: `Invalid exchange. Must be one of: ${validExchanges.join(', ')}` });
86
+ }
87
+ try {
88
+ const connector = await exchange_factory_1.ExchangeFactory.getExchange(exchange);
89
+ const rawTrades = await connector.getRecentTrades(symbol);
90
+ // Limit and transform trades
91
+ const trades = rawTrades.slice(0, limit).map((trade) => ({
92
+ id: trade.id,
93
+ symbol: trade.symbol,
94
+ side: trade.side,
95
+ price: trade.price,
96
+ amount: trade.amount,
97
+ cost: trade.price * trade.amount,
98
+ timestamp: trade.timestamp,
99
+ }));
100
+ // Calculate summary
101
+ const buyTrades = trades.filter(t => t.side === 'buy');
102
+ const sellTrades = trades.filter(t => t.side === 'sell');
103
+ const buyVolume = buyTrades.reduce((sum, t) => sum + t.amount, 0);
104
+ const sellVolume = sellTrades.reduce((sum, t) => sum + t.amount, 0);
105
+ const totalVolume = buyVolume + sellVolume;
106
+ const avgPrice = totalVolume > 0
107
+ ? trades.reduce((sum, t) => sum + t.price * t.amount, 0) / totalVolume
108
+ : 0;
109
+ return {
110
+ exchange,
111
+ symbol,
112
+ trades,
113
+ summary: {
114
+ totalTrades: trades.length,
115
+ buyCount: buyTrades.length,
116
+ sellCount: sellTrades.length,
117
+ buyVolume,
118
+ sellVolume,
119
+ avgPrice: Math.round(avgPrice * 100000000) / 100000000, // 8 decimal places
120
+ },
121
+ };
122
+ }
123
+ catch (error) {
124
+ const message = error instanceof Error ? error.message : 'Unknown error';
125
+ return reply.status(500).send({ error: `Failed to fetch trades: ${message}` });
126
+ }
127
+ });
128
+ }
129
+ //# sourceMappingURL=trades.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trades.js","sourceRoot":"","sources":["../../../src/api/routes/trades.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ export interface ApiServerOptions {
3
+ host?: string;
4
+ port?: number;
5
+ enableSwagger?: boolean;
6
+ enableCors?: boolean;
7
+ }
8
+ export declare function createApiServer(options?: ApiServerOptions): Promise<FastifyInstance>;
9
+ export declare function startApiServer(options?: ApiServerOptions): Promise<FastifyInstance>;
10
+ export { FastifyInstance };
11
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAUnD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6C9F;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAc7F;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createApiServer = createApiServer;
7
+ exports.startApiServer = startApiServer;
8
+ const fastify_1 = __importDefault(require("fastify"));
9
+ const cors_1 = __importDefault(require("@fastify/cors"));
10
+ const swagger_1 = __importDefault(require("@fastify/swagger"));
11
+ const swagger_ui_1 = __importDefault(require("@fastify/swagger-ui"));
12
+ const utils_1 = require("../utils");
13
+ const routes_1 = require("./routes");
14
+ const openapi_1 = require("./openapi");
15
+ const logger = (0, utils_1.createLogger)('api-server', './logs/api.log');
16
+ async function createApiServer(options = {}) {
17
+ const { host = '0.0.0.0', port = 3000, enableSwagger = true, enableCors = true, } = options;
18
+ const app = (0, fastify_1.default)({
19
+ logger: false, // We use our own logger
20
+ ajv: {
21
+ customOptions: {
22
+ strict: 'log', // Allow unknown keywords like 'example'
23
+ keywords: ['example'], // Explicitly allow 'example' keyword
24
+ },
25
+ },
26
+ });
27
+ // CORS
28
+ if (enableCors) {
29
+ await app.register(cors_1.default, {
30
+ origin: true,
31
+ methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],
32
+ });
33
+ }
34
+ // OpenAPI / Swagger
35
+ if (enableSwagger) {
36
+ await app.register(swagger_1.default, openapi_1.openApiConfig);
37
+ await app.register(swagger_ui_1.default, {
38
+ routePrefix: '/docs',
39
+ uiConfig: {
40
+ docExpansion: 'list',
41
+ deepLinking: true,
42
+ },
43
+ });
44
+ }
45
+ // Register all routes
46
+ await (0, routes_1.registerRoutes)(app);
47
+ // Store options for later use
48
+ app.decorate('apiOptions', { host, port });
49
+ return app;
50
+ }
51
+ async function startApiServer(options = {}) {
52
+ const { host = '0.0.0.0', port = 3000 } = options;
53
+ const app = await createApiServer(options);
54
+ try {
55
+ await app.listen({ host, port });
56
+ logger.info(`OpenMM API server running at http://${host}:${port}`);
57
+ logger.info(`OpenAPI docs available at http://${host}:${port}/docs`);
58
+ return app;
59
+ }
60
+ catch (err) {
61
+ logger.error('Failed to start API server: ' + (err instanceof Error ? err.message : String(err)));
62
+ throw err;
63
+ }
64
+ }
65
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":";;;;;AAiBA,0CA6CC;AAED,wCAcC;AA9ED,sDAAmD;AACnD,yDAAiC;AACjC,+DAAuC;AACvC,qEAA4C;AAC5C,oCAAwC;AACxC,qCAA0C;AAC1C,uCAA0C;AAE1C,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AASrD,KAAK,UAAU,eAAe,CAAC,UAA4B,EAAE;IAClE,MAAM,EACJ,IAAI,GAAG,SAAS,EAChB,IAAI,GAAG,IAAI,EACX,aAAa,GAAG,IAAI,EACpB,UAAU,GAAG,IAAI,GAClB,GAAG,OAAO,CAAC;IAEZ,MAAM,GAAG,GAAG,IAAA,iBAAO,EAAC;QAClB,MAAM,EAAE,KAAK,EAAE,wBAAwB;QACvC,GAAG,EAAE;YACH,aAAa,EAAE;gBACb,MAAM,EAAE,KAAK,EAAE,wCAAwC;gBACvD,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,qCAAqC;aAC7D;SACF;KACF,CAAC,CAAC;IAEH,OAAO;IACP,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,CAAC,QAAQ,CAAC,cAAI,EAAE;YACvB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,GAAG,CAAC,QAAQ,CAAC,iBAAO,EAAE,uBAAa,CAAC,CAAC;QAC3C,MAAM,GAAG,CAAC,QAAQ,CAAC,oBAAS,EAAE;YAC5B,WAAW,EAAE,OAAO;YACpB,QAAQ,EAAE;gBACR,YAAY,EAAE,MAAM;gBACpB,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,MAAM,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;IAE1B,8BAA8B;IAC9B,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,UAA4B,EAAE;IACjE,MAAM,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAElD,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,uCAAuC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,oCAAoC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;QACrE,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClG,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
package/dist/cli/cli.js CHANGED
@@ -29,6 +29,7 @@ async function runCli() {
29
29
  const { priceComparisonCommand } = await import('./commands/price-comparison.js');
30
30
  const { walletCommand } = await import('./commands/wallet.js');
31
31
  const { setupCommand } = await import('./commands/setup.js');
32
+ const { serveCommand } = await import('./commands/serve.js');
32
33
  const program = new Command();
33
34
  program.name('openmm').description('OpenMM - Universal Market Making Toolkit').version('1.0.0');
34
35
  program.addCommand(setupCommand);
@@ -42,13 +43,14 @@ async function runCli() {
42
43
  program.addCommand(tradeCommand);
43
44
  program.addCommand(priceComparisonCommand);
44
45
  program.addCommand(walletCommand);
46
+ program.addCommand(serveCommand);
45
47
  program.exitOverride(err => {
46
48
  if (err.code === 'commander.unknownCommand') {
47
49
  console.error(chalk.red(`Unknown command: ${err.message}`));
48
50
  console.log(chalk.yellow('Run "openmm --help" to see available commands'));
49
51
  process.exit(1);
50
52
  }
51
- if (err.code === 'commander.helpDisplayed') {
53
+ if (err.code === 'commander.helpDisplayed' || err.code === 'commander.version') {
52
54
  process.exit(0);
53
55
  }
54
56
  throw err;
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const gridCommand: Command;
3
+ //# sourceMappingURL=grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,WAAW,SAiFpB,CAAC"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.gridCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const exchange_factory_1 = require("../exchange-factory");
9
+ const error_handler_1 = require("../utils/error-handler");
10
+ const strategy_factory_1 = require("../../core/strategy/strategy-factory");
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ exports.gridCommand = new commander_1.Command('grid')
13
+ .description('Start grid trading strategy on specified exchange and symbol')
14
+ .requiredOption('-e, --exchange <exchange>', 'Exchange to trade on (mexc)')
15
+ .requiredOption('-s, --symbol <symbol>', 'Trading pair (INDYUSDT, INDY/USDT, BTCUSDT, etc.)')
16
+ .option('--levels <number>', 'Number of grid levels each side', '5')
17
+ .option('--spacing <decimal>', 'Spacing between levels as decimal (0.02 = 2%)', '0.02')
18
+ .option('--size <number>', 'Order size in quote currency', '50')
19
+ .option('--confidence <decimal>', 'Minimum price confidence (0.6 = 60%)', '0.6')
20
+ .option('--deviation <decimal>', 'Price deviation threshold (0.015 = 1.5%)', '0.015')
21
+ .option('--debounce <ms>', 'Adjustment debounce time in ms', '2000')
22
+ .option('--max-position <decimal>', 'Maximum position size as % of balance (0.8 = 80%)', '0.8')
23
+ .option('--safety-reserve <decimal>', 'Safety reserve as % of balance (0.2 = 20%)', '0.2')
24
+ .option('--dry-run', 'Simulate trading without placing real orders')
25
+ .action(async (options) => {
26
+ let strategy = null;
27
+ const shutdown = async (signal) => {
28
+ console.log(chalk_1.default.yellow(`\n${signal} received. Stopping grid strategy...`));
29
+ if (strategy) {
30
+ try {
31
+ await strategy.stop();
32
+ console.log(chalk_1.default.green('Grid strategy stopped successfully.'));
33
+ }
34
+ catch (error) {
35
+ console.error(chalk_1.default.red('Error stopping strategy:'), error);
36
+ }
37
+ }
38
+ await exchange_factory_1.ExchangeFactory.disconnectAll();
39
+ process.exit(0);
40
+ };
41
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
42
+ process.on('SIGINT', () => shutdown('SIGINT'));
43
+ await (0, error_handler_1.executeCommand)(async () => {
44
+ try {
45
+ console.log(chalk_1.default.blue('šŸš€ Starting Grid Trading Strategy'));
46
+ console.log(chalk_1.default.gray(`Exchange: ${options.exchange.toUpperCase()}`));
47
+ console.log(chalk_1.default.gray(`Symbol: ${options.symbol.toUpperCase()}`));
48
+ console.log(chalk_1.default.gray(`Grid Levels: ${options.levels} each side`));
49
+ console.log(chalk_1.default.gray(`Grid Spacing: ${(parseFloat(options.spacing) * 100).toFixed(1)}%`));
50
+ console.log(chalk_1.default.gray(`Order Size: $${options.size}`));
51
+ console.log(chalk_1.default.gray(`Max Position: ${(parseFloat(options.maxPosition) * 100).toFixed(0)}%`));
52
+ console.log(chalk_1.default.gray(`Safety Reserve: ${(parseFloat(options.safetyReserve) * 100).toFixed(0)}%`));
53
+ if (options.dryRun) {
54
+ console.log(chalk_1.default.yellow('āš ļø DRY RUN MODE - No real orders will be placed'));
55
+ }
56
+ const config = {
57
+ strategy: 'grid',
58
+ exchange: options.exchange,
59
+ symbol: options.symbol
60
+ };
61
+ const params = {
62
+ gridLevels: parseInt(options.levels),
63
+ gridSpacing: parseFloat(options.spacing),
64
+ orderSize: parseFloat(options.size),
65
+ minConfidence: parseFloat(options.confidence),
66
+ priceDeviationThreshold: parseFloat(options.deviation),
67
+ adjustmentDebounce: parseInt(options.debounce),
68
+ maxPositionSize: parseFloat(options.maxPosition),
69
+ safetyReservePercentage: parseFloat(options.safetyReserve)
70
+ };
71
+ strategy = await strategy_factory_1.StrategyFactory.create(config, params);
72
+ console.log(chalk_1.default.green('āœ… Grid strategy initialized successfully'));
73
+ console.log(chalk_1.default.blue('šŸ”„ Starting grid strategy...'));
74
+ await strategy.start();
75
+ console.log(chalk_1.default.green('āœ… Grid strategy is now running!'));
76
+ console.log(chalk_1.default.gray('Press Ctrl+C to stop the strategy gracefully'));
77
+ await new Promise(() => { });
78
+ }
79
+ catch (error) {
80
+ (0, error_handler_1.handleError)(error, 'Grid Strategy');
81
+ }
82
+ }, 'grid strategy');
83
+ });
84
+ exports.gridCommand.addHelpText('after', `
85
+ Examples:
86
+ $ openmm grid --exchange mexc --symbol INDYUSDT # Start INDY/USDT grid with defaults
87
+ $ openmm grid --exchange mexc --symbol INDY/USDT --levels 7 --size 100 # Custom parameters
88
+ $ openmm grid --exchange mexc --symbol BTCUSDT --spacing 0.015 # BTC grid with 1.5% spacing
89
+ $ openmm grid --exchange mexc --symbol INDYUSDT --dry-run # Test mode (no real orders)
90
+
91
+ Grid Strategy Parameters:
92
+ --levels: Number of buy and sell orders each side (default: 5, range: 1-20)
93
+ --spacing: Price spacing between grid levels (default: 0.02 = 2%)
94
+ --size: Order size in quote currency like USDT (default: 50)
95
+ --confidence: Minimum price confidence to trade (default: 0.6 = 60%)
96
+ --deviation: Price movement % to trigger grid recreation (default: 0.015 = 1.5%)
97
+ --debounce: Delay between grid adjustments in ms (default: 2000ms)
98
+ --max-position: Maximum position size as % of balance (default: 0.8 = 80%)
99
+ --safety-reserve: Safety reserve as % of balance (default: 0.2 = 20%)
100
+
101
+ Note: Ensure MEXC_API_KEY and MEXC_SECRET_KEY environment variables are set.
102
+ `);
103
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../../src/cli/commands/grid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const multiTradeCommand: Command;
3
+ //# sourceMappingURL=multi-trade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-trade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/multi-trade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,iBAAiB,SA+J1B,CAAC"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.multiTradeCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const exchange_factory_1 = require("../exchange-factory");
9
+ const error_handler_1 = require("../utils/error-handler");
10
+ const strategy_factory_1 = require("../../core/strategy/strategy-factory");
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ exports.multiTradeCommand = new commander_1.Command('multi-trade')
13
+ .description('Start trading with the same strategy across multiple exchanges simultaneously')
14
+ .requiredOption('-s, --strategy <strategy>', 'Trading strategy to use (grid)')
15
+ .requiredOption('--exchanges <exchanges>', 'Comma-separated exchanges (e.g., mexc,bitget,gateio)')
16
+ .requiredOption('--symbol <symbol>', 'Trading pair (SNEK/USDT, INDY/USDT, etc.)')
17
+ .option('--levels <number>', 'Grid: Number of levels each side (default: 5)', '5')
18
+ .option('--spacing <decimal>', 'Grid: Spacing between levels as decimal (0.02 = 2%)', '0.02')
19
+ .option('--size <number>', 'Grid: Order size in quote currency (default: 50)', '50')
20
+ .option('--confidence <decimal>', 'Grid: Minimum price confidence (0.6 = 60%)', '0.6')
21
+ .option('--deviation <decimal>', 'Grid: Price deviation threshold (0.015 = 1.5%)', '0.015')
22
+ .option('--debounce <ms>', 'Grid: Adjustment debounce time in ms (default: 2000)', '2000')
23
+ .option('--max-position <decimal>', 'Grid: Maximum position size as % of balance (0.8 = 80%)', '0.8')
24
+ .option('--safety-reserve <decimal>', 'Grid: Safety reserve as % of balance (0.2 = 20%)', '0.2')
25
+ .option('--dry-run', 'Simulate trading without placing real orders')
26
+ .option('--stagger <ms>', 'Stagger start time between exchanges in ms (default: 1000)', '1000')
27
+ .action(async (options) => {
28
+ const strategies = [];
29
+ let isShuttingDown = false;
30
+ const shutdown = async (signal) => {
31
+ if (isShuttingDown)
32
+ return;
33
+ isShuttingDown = true;
34
+ console.log(chalk_1.default.yellow(`\n${signal} received. Stopping all strategies...`));
35
+ const stopPromises = strategies.map(async ({ exchange, strategy }) => {
36
+ try {
37
+ console.log(chalk_1.default.gray(`Stopping ${exchange.toUpperCase()} strategy...`));
38
+ await strategy.stop();
39
+ console.log(chalk_1.default.green(`āœ… ${exchange.toUpperCase()} strategy stopped`));
40
+ }
41
+ catch (error) {
42
+ console.error(chalk_1.default.red(`āŒ Error stopping ${exchange.toUpperCase()} strategy:`), error);
43
+ }
44
+ });
45
+ await Promise.allSettled(stopPromises);
46
+ await exchange_factory_1.ExchangeFactory.disconnectAll();
47
+ console.log(chalk_1.default.green('All strategies stopped successfully.'));
48
+ process.exit(0);
49
+ };
50
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
51
+ process.on('SIGINT', () => shutdown('SIGINT'));
52
+ await (0, error_handler_1.executeCommand)(async () => {
53
+ const strategyType = options.strategy.toLowerCase();
54
+ const exchanges = options.exchanges.split(',').map((ex) => ex.trim());
55
+ const staggerMs = parseInt(options.stagger);
56
+ const validExchanges = ['mexc', 'bitget', 'gateio'];
57
+ for (const exchange of exchanges) {
58
+ if (!validExchanges.includes(exchange)) {
59
+ throw new Error(`Invalid exchange: ${exchange}. Supported: ${validExchanges.join(', ')}`);
60
+ }
61
+ }
62
+ try {
63
+ console.log(chalk_1.default.blue('šŸš€ Starting Multi-Exchange Trading Strategy'));
64
+ console.log(chalk_1.default.gray(`Strategy: ${options.strategy.toUpperCase()}`));
65
+ console.log(chalk_1.default.gray(`Exchanges: ${exchanges.map(ex => ex.toUpperCase()).join(', ')}`));
66
+ console.log(chalk_1.default.gray(`Symbol: ${options.symbol.toUpperCase()}`));
67
+ if (options.dryRun) {
68
+ console.log(chalk_1.default.yellow('āš ļø DRY RUN MODE - No real orders will be placed'));
69
+ }
70
+ if (staggerMs > 0) {
71
+ console.log(chalk_1.default.gray(`Stagger Time: ${staggerMs}ms between exchanges`));
72
+ }
73
+ let params = {};
74
+ if (strategyType === 'grid') {
75
+ console.log(chalk_1.default.gray(`Grid Levels: ${options.levels} each side`));
76
+ console.log(chalk_1.default.gray(`Grid Spacing: ${(parseFloat(options.spacing) * 100).toFixed(1)}%`));
77
+ console.log(chalk_1.default.gray(`Order Size: $${options.size} per exchange`));
78
+ console.log(chalk_1.default.gray(`Max Position: ${(parseFloat(options.maxPosition) * 100).toFixed(0)}%`));
79
+ console.log(chalk_1.default.gray(`Safety Reserve: ${(parseFloat(options.safetyReserve) * 100).toFixed(0)}%`));
80
+ params = {
81
+ gridLevels: parseInt(options.levels),
82
+ gridSpacing: parseFloat(options.spacing),
83
+ orderSize: parseFloat(options.size),
84
+ minConfidence: parseFloat(options.confidence),
85
+ priceDeviationThreshold: parseFloat(options.deviation),
86
+ adjustmentDebounce: parseInt(options.debounce),
87
+ maxPositionSize: parseFloat(options.maxPosition),
88
+ safetyReservePercentage: parseFloat(options.safetyReserve),
89
+ };
90
+ }
91
+ console.log(chalk_1.default.blue('āš™ļø Creating strategies for all exchanges...'));
92
+ for (const exchange of exchanges) {
93
+ const config = {
94
+ strategy: strategyType,
95
+ exchange,
96
+ symbol: options.symbol,
97
+ };
98
+ console.log(chalk_1.default.gray(`Creating ${exchange.toUpperCase()} strategy...`));
99
+ const strategy = await strategy_factory_1.StrategyFactory.create(config, params);
100
+ strategies.push({
101
+ exchange,
102
+ strategy,
103
+ config,
104
+ params,
105
+ });
106
+ console.log(chalk_1.default.green(`āœ… ${exchange.toUpperCase()} strategy initialized`));
107
+ }
108
+ console.log(chalk_1.default.green(`āœ… All ${strategies.length} strategies initialized successfully`));
109
+ console.log(chalk_1.default.blue('šŸ”„ Starting all strategies...'));
110
+ for (let i = 0; i < strategies.length; i++) {
111
+ const { exchange, strategy } = strategies[i];
112
+ if (i > 0 && staggerMs > 0) {
113
+ console.log(chalk_1.default.gray(`Waiting ${staggerMs}ms before starting ${exchange.toUpperCase()}...`));
114
+ await new Promise(resolve => setTimeout(resolve, staggerMs));
115
+ }
116
+ console.log(chalk_1.default.blue(`šŸš€ Starting ${exchange.toUpperCase()} strategy...`));
117
+ await strategy.start();
118
+ console.log(chalk_1.default.green(`āœ… ${exchange.toUpperCase()} strategy is running!`));
119
+ }
120
+ console.log(chalk_1.default.green('šŸŽ‰ All strategies are now running simultaneously!'));
121
+ console.log(chalk_1.default.gray('Press Ctrl+C to stop all strategies gracefully'));
122
+ console.log(chalk_1.default.blue('\nšŸ“Š Active Strategies:'));
123
+ strategies.forEach(({ exchange }) => {
124
+ console.log(chalk_1.default.green(` āœ… ${exchange.toUpperCase()}: ${options.symbol} ${options.strategy.toUpperCase()}`));
125
+ });
126
+ console.log('');
127
+ await new Promise(() => { });
128
+ }
129
+ catch (error) {
130
+ isShuttingDown = true;
131
+ await Promise.allSettled(strategies.map(({ strategy }) => strategy.stop().catch(() => { })));
132
+ (0, error_handler_1.handleError)(error, 'Multi-Exchange Trading Strategy');
133
+ }
134
+ }, 'multi-exchange trading strategy');
135
+ });
136
+ exports.multiTradeCommand.addHelpText('after', `
137
+ Examples:
138
+ $ openmm multi-trade --strategy grid --exchanges mexc,bitget,gateio --symbol SNEK/USDT
139
+ # Run SNEK/USDT grid on all three exchanges simultaneously
140
+
141
+ $ openmm multi-trade --strategy grid --exchanges mexc,bitget --symbol INDY/USDT --levels 10
142
+ # Run INDY/USDT grid on MEXC and Bitget with 10 levels
143
+
144
+ $ openmm multi-trade --strategy grid --exchanges bitget,gateio --symbol BTC/USDT --size 100 --spacing 0.01
145
+ # Run BTC/USDT grid on Bitget and Gate.io with $100 orders and 1% spacing
146
+
147
+ $ openmm multi-trade --strategy grid --exchanges mexc,gateio --symbol SNEK/USDT --stagger 2000
148
+ # Start MEXC first, then Gate.io 2 seconds later
149
+
150
+ $ openmm multi-trade --strategy grid --exchanges mexc,bitget,gateio --symbol SNEK/USDT --dry-run
151
+ # Test mode across all exchanges without real orders
152
+
153
+ Multi-Exchange Strategy Features:
154
+ • Simultaneous execution across multiple exchanges
155
+ • Independent risk management per exchange
156
+ • Coordinated shutdown with Ctrl+C
157
+ • Optional staggered start times
158
+ • Real-time status monitoring
159
+ • Unified parameter configuration
160
+
161
+ Stagger Option:
162
+ --stagger: Delay between starting each exchange (in milliseconds)
163
+ Use this to avoid hitting API rate limits during initialization
164
+
165
+ Exchange Combinations:
166
+ • All three: mexc,bitget,gateio
167
+ • Any two: mexc,bitget or mexc,gateio or bitget,gateio
168
+ • Single exchange: Use regular 'trade' command instead
169
+
170
+ Note: Each exchange requires its own API credentials:
171
+ - MEXC: MEXC_API_KEY and MEXC_SECRET_KEY
172
+ - Bitget: BITGET_API_KEY, BITGET_SECRET, and BITGET_PASSPHRASE
173
+ - Gate.io: GATEIO_API_KEY and GATEIO_SECRET
174
+ `);
175
+ //# sourceMappingURL=multi-trade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-trade.js","sourceRoot":"","sources":["../../../src/cli/commands/multi-trade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const serveCommand: Command;
3
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,YAAY,SA8CrB,CAAC"}