@3rd-eye-labs/openmm 0.0.1 → 0.1.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.
- package/dist/cli/cli.js +4 -5
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/balance.d.ts.map +1 -1
- package/dist/cli/commands/balance.js +1 -1
- package/dist/cli/commands/balance.js.map +1 -1
- package/dist/cli/commands/grid.d.ts +3 -0
- package/dist/cli/commands/grid.d.ts.map +1 -0
- package/dist/cli/commands/grid.js +103 -0
- package/dist/cli/commands/grid.js.map +1 -0
- package/dist/cli/commands/multi-trade.d.ts +3 -0
- package/dist/cli/commands/multi-trade.d.ts.map +1 -0
- package/dist/cli/commands/multi-trade.js +175 -0
- package/dist/cli/commands/multi-trade.js.map +1 -0
- package/dist/cli/commands/orderbook.js +1 -1
- package/dist/cli/commands/orderbook.js.map +1 -1
- package/dist/cli/commands/orders.d.ts.map +1 -1
- package/dist/cli/commands/orders.js +3 -4
- package/dist/cli/commands/orders.js.map +1 -1
- package/dist/cli/commands/pool-discovery.d.ts.map +1 -1
- package/dist/cli/commands/pool-discovery.js +2 -4
- package/dist/cli/commands/pool-discovery.js.map +1 -1
- package/dist/cli/commands/price-comparison.d.ts +3 -0
- package/dist/cli/commands/price-comparison.d.ts.map +1 -0
- package/dist/cli/commands/price-comparison.js +103 -0
- package/dist/cli/commands/price-comparison.js.map +1 -0
- package/dist/cli/commands/ticker.d.ts.map +1 -1
- package/dist/cli/commands/ticker.js.map +1 -1
- package/dist/cli/commands/trade.d.ts.map +1 -1
- package/dist/cli/commands/trade.js +135 -18
- package/dist/cli/commands/trade.js.map +1 -1
- package/dist/cli/commands/trades.d.ts.map +1 -1
- package/dist/cli/commands/trades.js +2 -3
- package/dist/cli/commands/trades.js.map +1 -1
- package/dist/cli/exchange-factory.d.ts.map +1 -1
- package/dist/cli/exchange-factory.js +6 -6
- package/dist/cli/exchange-factory.js.map +1 -1
- package/dist/cli/pool-discovery-core.d.ts.map +1 -1
- package/dist/cli/pool-discovery-core.js +3 -9
- package/dist/cli/pool-discovery-core.js.map +1 -1
- package/dist/cli/pool-discovery.d.ts +56 -0
- package/dist/cli/pool-discovery.d.ts.map +1 -0
- package/dist/cli/pool-discovery.js +283 -0
- package/dist/cli/pool-discovery.js.map +1 -0
- package/dist/cli/utils/error-handler.d.ts.map +1 -1
- package/dist/cli/utils/error-handler.js +6 -5
- package/dist/cli/utils/error-handler.js.map +1 -1
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +3 -1
- package/dist/config/environment.js.map +1 -1
- package/dist/config/launcher-config.d.ts +13 -0
- package/dist/config/launcher-config.d.ts.map +1 -1
- package/dist/config/launcher-config.js +3 -1
- package/dist/config/launcher-config.js.map +1 -1
- package/dist/config/price-aggregation.d.ts +1 -1
- package/dist/config/price-aggregation.d.ts.map +1 -1
- package/dist/config/price-aggregation.js +20 -20
- package/dist/config/price-aggregation.js.map +1 -1
- package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -1
- package/dist/core/exchange/base-exchange-connector.js +1 -5
- package/dist/core/exchange/base-exchange-connector.js.map +1 -1
- package/dist/core/exchange/base-exchange-data-mapper.d.ts.map +1 -1
- package/dist/core/exchange/base-exchange-data-mapper.js +1 -1
- package/dist/core/exchange/base-exchange-data-mapper.js.map +1 -1
- package/dist/core/price-aggregation/cardano-price-service.d.ts +2 -2
- package/dist/core/price-aggregation/cardano-price-service.d.ts.map +1 -1
- package/dist/core/price-aggregation/cardano-price-service.js +13 -13
- package/dist/core/price-aggregation/cardano-price-service.js.map +1 -1
- package/dist/core/price-aggregation/index.d.ts +1 -1
- package/dist/core/price-aggregation/index.d.ts.map +1 -1
- package/dist/core/price-aggregation/iris-api-client.d.ts.map +1 -1
- package/dist/core/price-aggregation/iris-api-client.js +5 -5
- package/dist/core/price-aggregation/iris-api-client.js.map +1 -1
- package/dist/core/price-aggregation/iris-pool-discovery.d.ts +2 -2
- package/dist/core/price-aggregation/iris-pool-discovery.d.ts.map +1 -1
- package/dist/core/price-aggregation/iris-pool-discovery.js +3 -3
- package/dist/core/price-aggregation/iris-pool-discovery.js.map +1 -1
- package/dist/core/price-aggregation/multi-exchange-price-service.d.ts +38 -0
- package/dist/core/price-aggregation/multi-exchange-price-service.d.ts.map +1 -0
- package/dist/core/price-aggregation/multi-exchange-price-service.js +123 -0
- package/dist/core/price-aggregation/multi-exchange-price-service.js.map +1 -0
- package/dist/core/price-aggregation/price-cache.d.ts +55 -0
- package/dist/core/price-aggregation/price-cache.d.ts.map +1 -0
- package/dist/core/price-aggregation/price-cache.js +152 -0
- package/dist/core/price-aggregation/price-cache.js.map +1 -0
- package/dist/core/price-aggregation/price-calculator.d.ts.map +1 -1
- package/dist/core/price-aggregation/price-calculator.js +3 -3
- package/dist/core/price-aggregation/price-calculator.js.map +1 -1
- package/dist/core/risk-management/risk-manager.d.ts.map +1 -1
- package/dist/core/risk-management/risk-manager.js +2 -2
- package/dist/core/risk-management/risk-manager.js.map +1 -1
- package/dist/core/strategy/strategy-factory.d.ts +5 -0
- package/dist/core/strategy/strategy-factory.d.ts.map +1 -1
- package/dist/core/strategy/strategy-factory.js +127 -5
- package/dist/core/strategy/strategy-factory.js.map +1 -1
- package/dist/examples/mexc-connector-comprehensive-test.d.ts +15 -0
- package/dist/examples/mexc-connector-comprehensive-test.d.ts.map +1 -0
- package/dist/examples/mexc-connector-comprehensive-test.js +514 -0
- package/dist/examples/mexc-connector-comprehensive-test.js.map +1 -0
- package/dist/examples/mexc-order-update-test.d.ts +4 -0
- package/dist/examples/mexc-order-update-test.d.ts.map +1 -0
- package/dist/examples/mexc-order-update-test.js +186 -0
- package/dist/examples/mexc-order-update-test.js.map +1 -0
- package/dist/examples/mexc-test.d.ts +9 -0
- package/dist/examples/mexc-test.d.ts.map +1 -0
- package/dist/examples/mexc-test.js +218 -0
- package/dist/examples/mexc-test.js.map +1 -0
- package/dist/examples/mexc-trades-debug.d.ts +2 -0
- package/dist/examples/mexc-trades-debug.d.ts.map +1 -0
- package/dist/examples/mexc-trades-debug.js +101 -0
- package/dist/examples/mexc-trades-debug.js.map +1 -0
- package/dist/examples/mexc-trades-subscription-debug.d.ts +2 -0
- package/dist/examples/mexc-trades-subscription-debug.d.ts.map +1 -0
- package/dist/examples/mexc-trades-subscription-debug.js +150 -0
- package/dist/examples/mexc-trades-subscription-debug.js.map +1 -0
- package/dist/examples/mexc-websocket-test.d.ts +8 -0
- package/dist/examples/mexc-websocket-test.d.ts.map +1 -0
- package/dist/examples/mexc-websocket-test.js +115 -0
- package/dist/examples/mexc-websocket-test.js.map +1 -0
- package/dist/examples/test-protobuf-status-detection.d.ts +9 -0
- package/dist/examples/test-protobuf-status-detection.d.ts.map +1 -0
- package/dist/examples/test-protobuf-status-detection.js +83 -0
- package/dist/examples/test-protobuf-status-detection.js.map +1 -0
- package/dist/exchanges/base-exchange-connector.d.ts +33 -0
- package/dist/exchanges/base-exchange-connector.d.ts.map +1 -0
- package/dist/exchanges/base-exchange-connector.js +55 -0
- package/dist/exchanges/base-exchange-connector.js.map +1 -0
- package/dist/exchanges/bitget/bitget-auth.d.ts +66 -0
- package/dist/exchanges/bitget/bitget-auth.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-auth.js +203 -0
- package/dist/exchanges/bitget/bitget-auth.js.map +1 -0
- package/dist/exchanges/bitget/bitget-connector.d.ts +255 -0
- package/dist/exchanges/bitget/bitget-connector.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-connector.js +709 -0
- package/dist/exchanges/bitget/bitget-connector.js.map +1 -0
- package/dist/exchanges/bitget/bitget-data-mapper.d.ts +47 -0
- package/dist/exchanges/bitget/bitget-data-mapper.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-data-mapper.js +147 -0
- package/dist/exchanges/bitget/bitget-data-mapper.js.map +1 -0
- package/dist/exchanges/bitget/bitget-user-stream.d.ts +126 -0
- package/dist/exchanges/bitget/bitget-user-stream.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-user-stream.js +474 -0
- package/dist/exchanges/bitget/bitget-user-stream.js.map +1 -0
- package/dist/exchanges/bitget/bitget-utils.d.ts +17 -0
- package/dist/exchanges/bitget/bitget-utils.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-utils.js +60 -0
- package/dist/exchanges/bitget/bitget-utils.js.map +1 -0
- package/dist/exchanges/bitget/bitget-websocket.d.ts +124 -0
- package/dist/exchanges/bitget/bitget-websocket.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-websocket.js +434 -0
- package/dist/exchanges/bitget/bitget-websocket.js.map +1 -0
- package/dist/exchanges/gateio/gateio-auth.d.ts +69 -0
- package/dist/exchanges/gateio/gateio-auth.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-auth.js +205 -0
- package/dist/exchanges/gateio/gateio-auth.js.map +1 -0
- package/dist/exchanges/gateio/gateio-connector.d.ts +182 -0
- package/dist/exchanges/gateio/gateio-connector.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-connector.js +605 -0
- package/dist/exchanges/gateio/gateio-connector.js.map +1 -0
- package/dist/exchanges/gateio/gateio-data-mapper.d.ts +57 -0
- package/dist/exchanges/gateio/gateio-data-mapper.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-data-mapper.js +184 -0
- package/dist/exchanges/gateio/gateio-data-mapper.js.map +1 -0
- package/dist/exchanges/gateio/gateio-user-stream.d.ts +120 -0
- package/dist/exchanges/gateio/gateio-user-stream.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-user-stream.js +384 -0
- package/dist/exchanges/gateio/gateio-user-stream.js.map +1 -0
- package/dist/exchanges/gateio/gateio-utils.d.ts +45 -0
- package/dist/exchanges/gateio/gateio-utils.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-utils.js +138 -0
- package/dist/exchanges/gateio/gateio-utils.js.map +1 -0
- package/dist/exchanges/gateio/gateio-websocket.d.ts +145 -0
- package/dist/exchanges/gateio/gateio-websocket.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-websocket.js +469 -0
- package/dist/exchanges/gateio/gateio-websocket.js.map +1 -0
- package/dist/exchanges/kraken/kraken-auth.d.ts +12 -0
- package/dist/exchanges/kraken/kraken-auth.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-auth.js +68 -0
- package/dist/exchanges/kraken/kraken-auth.js.map +1 -0
- package/dist/exchanges/kraken/kraken-connector.d.ts +38 -0
- package/dist/exchanges/kraken/kraken-connector.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-connector.js +355 -0
- package/dist/exchanges/kraken/kraken-connector.js.map +1 -0
- package/dist/exchanges/kraken/kraken-data-mapper.d.ts +14 -0
- package/dist/exchanges/kraken/kraken-data-mapper.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-data-mapper.js +169 -0
- package/dist/exchanges/kraken/kraken-data-mapper.js.map +1 -0
- package/dist/exchanges/kraken/kraken-utils.d.ts +52 -0
- package/dist/exchanges/kraken/kraken-utils.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-utils.js +206 -0
- package/dist/exchanges/kraken/kraken-utils.js.map +1 -0
- package/dist/exchanges/kraken/kraken-websocket.d.ts +64 -0
- package/dist/exchanges/kraken/kraken-websocket.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-websocket.js +667 -0
- package/dist/exchanges/kraken/kraken-websocket.js.map +1 -0
- package/dist/exchanges/kraken/test-kraken-websocket.d.ts +19 -0
- package/dist/exchanges/kraken/test-kraken-websocket.d.ts.map +1 -0
- package/dist/exchanges/kraken/test-kraken-websocket.js +413 -0
- package/dist/exchanges/kraken/test-kraken-websocket.js.map +1 -0
- package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-auth.js +5 -5
- package/dist/exchanges/mexc/mexc-auth.js.map +1 -1
- package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-connector.js +12 -13
- package/dist/exchanges/mexc/mexc-connector.js.map +1 -1
- package/dist/exchanges/mexc/mexc-data-mapper.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-data-mapper.js +6 -6
- package/dist/exchanges/mexc/mexc-data-mapper.js.map +1 -1
- package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-protobuf-decoder.js +14 -13
- package/dist/exchanges/mexc/mexc-protobuf-decoder.js.map +1 -1
- package/dist/exchanges/mexc/mexc-user-stream.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-user-stream.js +5 -5
- package/dist/exchanges/mexc/mexc-user-stream.js.map +1 -1
- package/dist/exchanges/mexc/mexc-utils.d.ts +1 -5
- package/dist/exchanges/mexc/mexc-utils.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-utils.js +33 -39
- package/dist/exchanges/mexc/mexc-utils.js.map +1 -1
- package/dist/exchanges/mexc/mexc-websocket.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-websocket.js +45 -31
- package/dist/exchanges/mexc/mexc-websocket.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/resources/index.d.ts +3 -0
- package/dist/mcp/resources/index.d.ts.map +1 -0
- package/dist/mcp/resources/index.js +11 -0
- package/dist/mcp/resources/index.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +29 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +3 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +12 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/strategies/grid/grid-calculator.d.ts +63 -4
- package/dist/strategies/grid/grid-calculator.d.ts.map +1 -1
- package/dist/strategies/grid/grid-calculator.js +190 -15
- package/dist/strategies/grid/grid-calculator.js.map +1 -1
- package/dist/strategies/grid/grid-order-manager.d.ts +9 -4
- package/dist/strategies/grid/grid-order-manager.d.ts.map +1 -1
- package/dist/strategies/grid/grid-order-manager.js +58 -15
- package/dist/strategies/grid/grid-order-manager.js.map +1 -1
- package/dist/strategies/grid/grid-strategy.d.ts +11 -0
- package/dist/strategies/grid/grid-strategy.d.ts.map +1 -1
- package/dist/strategies/grid/grid-strategy.js +127 -20
- package/dist/strategies/grid/grid-strategy.js.map +1 -1
- package/dist/strategies/grid/volatility-tracker.d.ts +67 -0
- package/dist/strategies/grid/volatility-tracker.d.ts.map +1 -0
- package/dist/strategies/grid/volatility-tracker.js +109 -0
- package/dist/strategies/grid/volatility-tracker.js.map +1 -0
- package/dist/tests/fixtures/test-helpers.d.ts +5 -0
- package/dist/tests/fixtures/test-helpers.d.ts.map +1 -0
- package/dist/tests/fixtures/test-helpers.js +8 -0
- package/dist/tests/fixtures/test-helpers.js.map +1 -0
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts +2 -0
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts.map +1 -0
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js +237 -0
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js.map +1 -0
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts +2 -0
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts.map +1 -0
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.js +57 -0
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.js.map +1 -0
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts +2 -0
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts.map +1 -0
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js +141 -0
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js.map +1 -0
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts +2 -0
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts.map +1 -0
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js +375 -0
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js.map +1 -0
- package/dist/tests/unit/cli/exchange-factory.test.d.ts +2 -0
- package/dist/tests/unit/cli/exchange-factory.test.d.ts.map +1 -0
- package/dist/tests/unit/cli/exchange-factory.test.js +148 -0
- package/dist/tests/unit/cli/exchange-factory.test.js.map +1 -0
- package/dist/tests/unit/config/environment.test.d.ts +2 -0
- package/dist/tests/unit/config/environment.test.d.ts.map +1 -0
- package/dist/tests/unit/config/environment.test.js +158 -0
- package/dist/tests/unit/config/environment.test.js.map +1 -0
- package/dist/tests/unit/config/launcher-config.test.d.ts +2 -0
- package/dist/tests/unit/config/launcher-config.test.d.ts.map +1 -0
- package/dist/tests/unit/config/launcher-config.test.js +117 -0
- package/dist/tests/unit/config/launcher-config.test.js.map +1 -0
- package/dist/tests/unit/config/price-aggregation.test.d.ts +2 -0
- package/dist/tests/unit/config/price-aggregation.test.d.ts.map +1 -0
- package/dist/tests/unit/config/price-aggregation.test.js +144 -0
- package/dist/tests/unit/config/price-aggregation.test.js.map +1 -0
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts +2 -0
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts.map +1 -0
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.js +191 -0
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.js.map +1 -0
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts +2 -0
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts.map +1 -0
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js +324 -0
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js.map +1 -0
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts +2 -0
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts.map +1 -0
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js +177 -0
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js.map +1 -0
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts +2 -0
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts.map +1 -0
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js +168 -0
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js.map +1 -0
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts +2 -0
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts.map +1 -0
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js +217 -0
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js.map +1 -0
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts +2 -0
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts.map +1 -0
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.js +229 -0
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.js.map +1 -0
- package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts +2 -0
- package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts.map +1 -0
- package/dist/tests/unit/core/risk-management/risk-manager.test.js +194 -0
- package/dist/tests/unit/core/risk-management/risk-manager.test.js.map +1 -0
- package/dist/tests/unit/core/strategy/base-strategy.test.d.ts +2 -0
- package/dist/tests/unit/core/strategy/base-strategy.test.d.ts.map +1 -0
- package/dist/tests/unit/core/strategy/base-strategy.test.js +254 -0
- package/dist/tests/unit/core/strategy/base-strategy.test.js.map +1 -0
- package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts +2 -0
- package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts.map +1 -0
- package/dist/tests/unit/core/strategy/strategy-factory.test.js +213 -0
- package/dist/tests/unit/core/strategy/strategy-factory.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js +452 -0
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js +1419 -0
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js +435 -0
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js +314 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js +178 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js +502 -0
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js +317 -0
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js +843 -0
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts +2 -0
- package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-calculator.test.js +67 -0
- package/dist/tests/unit/strategies/grid/grid-calculator.test.js.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts +2 -0
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.js +211 -0
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.js.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts +2 -0
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js +197 -0
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts +2 -0
- package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-strategy.test.js +429 -0
- package/dist/tests/unit/strategies/grid/grid-strategy.test.js.map +1 -0
- package/dist/tests/unit/utils/logger.test.d.ts +2 -0
- package/dist/tests/unit/utils/logger.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/logger.test.js +260 -0
- package/dist/tests/unit/utils/logger.test.js.map +1 -0
- package/dist/tests/unit/utils/symbol-utils.test.d.ts +2 -0
- package/dist/tests/unit/utils/symbol-utils.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/symbol-utils.test.js +178 -0
- package/dist/tests/unit/utils/symbol-utils.test.js.map +1 -0
- package/dist/types/bitget-raw.d.ts +75 -0
- package/dist/types/bitget-raw.d.ts.map +1 -0
- package/dist/types/bitget-raw.js +10 -0
- package/dist/types/bitget-raw.js.map +1 -0
- package/dist/types/bitget.d.ts +35 -0
- package/dist/types/bitget.d.ts.map +1 -0
- package/dist/types/bitget.js +8 -0
- package/dist/types/bitget.js.map +1 -0
- package/dist/types/gateio-raw.d.ts +104 -0
- package/dist/types/gateio-raw.d.ts.map +1 -0
- package/dist/types/gateio-raw.js +7 -0
- package/dist/types/gateio-raw.js.map +1 -0
- package/dist/types/gateio.d.ts +41 -0
- package/dist/types/gateio.d.ts.map +1 -0
- package/dist/types/gateio.js +8 -0
- package/dist/types/gateio.js.map +1 -0
- package/dist/types/grid.d.ts +77 -0
- package/dist/types/grid.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/kraken-raw.d.ts +89 -0
- package/dist/types/kraken-raw.d.ts.map +1 -0
- package/dist/types/kraken-raw.js +10 -0
- package/dist/types/kraken-raw.js.map +1 -0
- package/dist/types/kraken.d.ts +44 -0
- package/dist/types/kraken.d.ts.map +1 -0
- package/dist/types/kraken.js +3 -0
- package/dist/types/kraken.js.map +1 -0
- package/dist/types/mexc.d.ts +9 -0
- package/dist/types/mexc.d.ts.map +1 -1
- package/dist/types/price-aggregation.d.ts +31 -0
- package/dist/types/price-aggregation.d.ts.map +1 -0
- package/dist/types/price-aggregation.js +6 -0
- package/dist/types/price-aggregation.js.map +1 -0
- package/dist/types/price.d.ts +23 -0
- package/dist/types/price.d.ts.map +1 -1
- package/dist/types/strategy.d.ts +5 -0
- package/dist/types/strategy.d.ts.map +1 -1
- package/dist/utils/crypto.d.ts +15 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +50 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/exchange-utils.d.ts +194 -0
- package/dist/utils/exchange-utils.d.ts.map +1 -0
- package/dist/utils/exchange-utils.js +455 -0
- package/dist/utils/exchange-utils.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +7 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/validation.d.ts +36 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +174 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +7 -1
|
@@ -2,32 +2,207 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GridCalculator = void 0;
|
|
4
4
|
class GridCalculator {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Generate a complete dynamic grid based on DynamicGridConfig.
|
|
7
|
+
* This is the main entry point for dynamic order level generation.
|
|
8
|
+
*
|
|
9
|
+
* @param centerPrice - Current mid-market price to build grid around
|
|
10
|
+
* @param config - Dynamic grid configuration (spacing model, size model, etc.)
|
|
11
|
+
* @param availableBalance - Available balance in quote currency for sizing
|
|
12
|
+
* @param minOrderValue - Minimum order value enforced by the exchange
|
|
13
|
+
* @returns Array of GridLevel with calculated prices and order sizes
|
|
14
|
+
*/
|
|
15
|
+
generateDynamicGrid(centerPrice, config, availableBalance, minOrderValue) {
|
|
16
|
+
this.validateConfig(config);
|
|
17
|
+
const volatilityMultiplier = config.volatilityMultiplier ?? 1.0;
|
|
18
|
+
const spacings = this.calculateSpacings(config.levels, config.spacingModel, config.baseSpacing, volatilityMultiplier, config.spacingFactor, config.customSpacings);
|
|
19
|
+
const weights = this.calculateSizeWeights(config.levels, config.sizeModel, config.sizeWeights);
|
|
20
|
+
const gridLevels = this.buildGridLevels(centerPrice, spacings);
|
|
21
|
+
return this.assignDynamicOrderSizes(gridLevels, weights, config.baseSize, availableBalance, minOrderValue);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Calculate cumulative spacing offsets for each level.
|
|
25
|
+
* Returns an array where spacings[i] is the total offset from center for level i+1.
|
|
26
|
+
*
|
|
27
|
+
* For linear: [s, 2s, 3s, ...] (equal increments)
|
|
28
|
+
* For geometric: [s, s*f, s*f^2, ...] (each level multiplied by factor)
|
|
29
|
+
* For custom: user-provided cumulative offsets
|
|
30
|
+
*/
|
|
31
|
+
calculateSpacings(levels, model, baseSpacing, volatilityMultiplier = 1.0, spacingFactor, customSpacings) {
|
|
32
|
+
let spacings;
|
|
33
|
+
switch (model) {
|
|
34
|
+
case 'linear':
|
|
35
|
+
spacings = this.calculateLinearSpacings(levels, baseSpacing);
|
|
36
|
+
break;
|
|
37
|
+
case 'geometric':
|
|
38
|
+
spacings = this.calculateGeometricSpacings(levels, baseSpacing, spacingFactor ?? 1.3);
|
|
39
|
+
break;
|
|
40
|
+
case 'custom':
|
|
41
|
+
if (!customSpacings || customSpacings.length !== levels) {
|
|
42
|
+
throw new Error(`Custom spacing model requires exactly ${levels} spacing values, got ${customSpacings?.length ?? 0}`);
|
|
43
|
+
}
|
|
44
|
+
spacings = [...customSpacings];
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
throw new Error(`Unsupported spacing model: ${model}`);
|
|
48
|
+
}
|
|
49
|
+
if (volatilityMultiplier !== 1.0) {
|
|
50
|
+
spacings = spacings.map(s => s * volatilityMultiplier);
|
|
51
|
+
}
|
|
52
|
+
return spacings;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Linear spacing: equal distance between each level.
|
|
56
|
+
* Level 1 = baseSpacing, Level 2 = 2 * baseSpacing, etc.
|
|
57
|
+
*/
|
|
58
|
+
calculateLinearSpacings(levels, baseSpacing) {
|
|
59
|
+
const spacings = [];
|
|
7
60
|
for (let i = 1; i <= levels; i++) {
|
|
8
|
-
|
|
9
|
-
|
|
61
|
+
spacings.push(baseSpacing * i);
|
|
62
|
+
}
|
|
63
|
+
return spacings;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Geometric spacing: each level's individual gap is multiplied by spacingFactor.
|
|
67
|
+
* Level 1 gap = baseSpacing
|
|
68
|
+
* Level 2 gap = baseSpacing * factor
|
|
69
|
+
* Level 3 gap = baseSpacing * factor^2
|
|
70
|
+
* Cumulative offsets are the running sum of these gaps.
|
|
71
|
+
*
|
|
72
|
+
* Example with baseSpacing=0.005, factor=1.5:
|
|
73
|
+
* Gaps: [0.5%, 0.75%, 1.125%, 1.6875%]
|
|
74
|
+
* Cumul: [0.5%, 1.25%, 2.375%, 4.0625%]
|
|
75
|
+
*/
|
|
76
|
+
calculateGeometricSpacings(levels, baseSpacing, spacingFactor) {
|
|
77
|
+
const spacings = [];
|
|
78
|
+
let cumulative = 0;
|
|
79
|
+
for (let i = 0; i < levels; i++) {
|
|
80
|
+
const gap = baseSpacing * Math.pow(spacingFactor, i);
|
|
81
|
+
cumulative += gap;
|
|
82
|
+
spacings.push(cumulative);
|
|
83
|
+
}
|
|
84
|
+
return spacings;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Calculate size weight multipliers for each level.
|
|
88
|
+
*
|
|
89
|
+
* - flat: all weights = 1.0 (equal sizing)
|
|
90
|
+
* - pyramidal: weights decrease from center outward (level 1 gets most, level N gets least)
|
|
91
|
+
* - custom: user-provided weight multipliers
|
|
92
|
+
*/
|
|
93
|
+
calculateSizeWeights(levels, model, customWeights) {
|
|
94
|
+
switch (model) {
|
|
95
|
+
case 'flat':
|
|
96
|
+
return new Array(levels).fill(1.0);
|
|
97
|
+
case 'pyramidal': {
|
|
98
|
+
// Weights decrease linearly: level 1 = levels, level 2 = levels-1, ..., level N = 1
|
|
99
|
+
// Then normalize so they sum to `levels` (preserving total capital allocation)
|
|
100
|
+
const rawWeights = [];
|
|
101
|
+
for (let i = 0; i < levels; i++) {
|
|
102
|
+
rawWeights.push(levels - i);
|
|
103
|
+
}
|
|
104
|
+
const sum = rawWeights.reduce((a, b) => a + b, 0);
|
|
105
|
+
const normFactor = levels / sum;
|
|
106
|
+
return rawWeights.map(w => w * normFactor);
|
|
107
|
+
}
|
|
108
|
+
case 'custom':
|
|
109
|
+
if (!customWeights || customWeights.length !== levels) {
|
|
110
|
+
throw new Error(`Custom size model requires exactly ${levels} weight values, got ${customWeights?.length ?? 0}`);
|
|
111
|
+
}
|
|
112
|
+
return [...customWeights];
|
|
113
|
+
default:
|
|
114
|
+
throw new Error(`Unsupported size model: ${model}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Build grid levels from center price and spacing offsets.
|
|
119
|
+
* Creates both buy (below center) and sell (above center) levels.
|
|
120
|
+
*/
|
|
121
|
+
buildGridLevels(centerPrice, spacings) {
|
|
122
|
+
const gridLevels = [];
|
|
123
|
+
for (const spacing of spacings) {
|
|
10
124
|
gridLevels.push({
|
|
11
|
-
price:
|
|
125
|
+
price: centerPrice * (1 - spacing),
|
|
12
126
|
side: 'buy',
|
|
13
|
-
orderSize: 0
|
|
127
|
+
orderSize: 0,
|
|
14
128
|
});
|
|
15
129
|
gridLevels.push({
|
|
16
|
-
price:
|
|
130
|
+
price: centerPrice * (1 + spacing),
|
|
17
131
|
side: 'sell',
|
|
18
|
-
orderSize: 0
|
|
132
|
+
orderSize: 0,
|
|
19
133
|
});
|
|
20
134
|
}
|
|
21
135
|
return gridLevels;
|
|
22
136
|
}
|
|
23
|
-
|
|
24
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Assign order sizes to grid levels using weight multipliers.
|
|
139
|
+
*
|
|
140
|
+
* The baseSize is the per-level order size in quote currency.
|
|
141
|
+
* Weights scale individual levels relative to baseSize.
|
|
142
|
+
* Total allocation is capped at 80% of available balance.
|
|
143
|
+
*/
|
|
144
|
+
assignDynamicOrderSizes(gridLevels, weights, baseSize, availableBalance, minOrderValue) {
|
|
145
|
+
// Total desired allocation = sum of (baseSize * weight) for each side
|
|
146
|
+
const totalWeightedSize = weights.reduce((sum, w) => sum + w, 0) * baseSize * 2; // *2 for buy+sell
|
|
147
|
+
const maxAllocation = availableBalance * 0.8;
|
|
148
|
+
// Scale factor to ensure we don't exceed available balance
|
|
149
|
+
const scaleFactor = totalWeightedSize > maxAllocation ? maxAllocation / totalWeightedSize : 1.0;
|
|
150
|
+
return gridLevels.map((level, index) => {
|
|
151
|
+
const weightIndex = Math.floor(index / 2);
|
|
152
|
+
const weight = weights[weightIndex];
|
|
153
|
+
const sizeInQuote = baseSize * weight * scaleFactor;
|
|
154
|
+
const effectiveSize = minOrderValue ? Math.max(sizeInQuote, minOrderValue) : sizeInQuote;
|
|
155
|
+
return {
|
|
156
|
+
...level,
|
|
157
|
+
orderSize: effectiveSize / level.price,
|
|
158
|
+
};
|
|
159
|
+
});
|
|
25
160
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Validate dynamic grid configuration
|
|
163
|
+
*/
|
|
164
|
+
validateConfig(config) {
|
|
165
|
+
if (config.levels < 1 || config.levels > 10) {
|
|
166
|
+
throw new Error(`Grid levels must be between 1 and 10, got ${config.levels}`);
|
|
167
|
+
}
|
|
168
|
+
if (config.baseSpacing <= 0 || config.baseSpacing >= 1) {
|
|
169
|
+
throw new Error(`Base spacing must be between 0 and 1 (exclusive), got ${config.baseSpacing}`);
|
|
170
|
+
}
|
|
171
|
+
if (config.baseSize <= 0) {
|
|
172
|
+
throw new Error(`Base size must be positive, got ${config.baseSize}`);
|
|
173
|
+
}
|
|
174
|
+
if (config.spacingModel === 'geometric') {
|
|
175
|
+
const factor = config.spacingFactor ?? 1.3;
|
|
176
|
+
if (factor <= 0) {
|
|
177
|
+
throw new Error(`Spacing factor must be positive, got ${factor}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (config.spacingModel === 'custom') {
|
|
181
|
+
if (!config.customSpacings || config.customSpacings.length !== config.levels) {
|
|
182
|
+
throw new Error(`Custom spacing model requires exactly ${config.levels} spacing values`);
|
|
183
|
+
}
|
|
184
|
+
for (let i = 0; i < config.customSpacings.length; i++) {
|
|
185
|
+
if (config.customSpacings[i] <= 0) {
|
|
186
|
+
throw new Error(`Custom spacing at index ${i} must be positive`);
|
|
187
|
+
}
|
|
188
|
+
if (i > 0 && config.customSpacings[i] <= config.customSpacings[i - 1]) {
|
|
189
|
+
throw new Error(`Custom spacings must be in increasing order`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (config.sizeModel === 'custom') {
|
|
194
|
+
if (!config.sizeWeights || config.sizeWeights.length !== config.levels) {
|
|
195
|
+
throw new Error(`Custom size model requires exactly ${config.levels} weight values`);
|
|
196
|
+
}
|
|
197
|
+
for (let i = 0; i < config.sizeWeights.length; i++) {
|
|
198
|
+
if (config.sizeWeights[i] <= 0) {
|
|
199
|
+
throw new Error(`Size weight at index ${i} must be positive`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (config.volatilityMultiplier !== undefined && config.volatilityMultiplier <= 0) {
|
|
204
|
+
throw new Error(`Volatility multiplier must be positive, got ${config.volatilityMultiplier}`);
|
|
205
|
+
}
|
|
31
206
|
}
|
|
32
207
|
}
|
|
33
208
|
exports.GridCalculator = GridCalculator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-calculator.js","sourceRoot":"","sources":["../../../src/strategies/grid/grid-calculator.ts"],"names":[],"mappings":";;;AAEA,MAAa,cAAc;IACzB,mBAAmB,CAAC,WAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"grid-calculator.js","sourceRoot":"","sources":["../../../src/strategies/grid/grid-calculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Order, OrderSide, GridLevel, GridOrderManagerConfig } from '../../types';
|
|
1
|
+
import { Order, OrderSide, GridLevel, GridOrderManagerConfig, DynamicGridConfig } from '../../types';
|
|
2
2
|
export declare class GridOrderManager {
|
|
3
3
|
private gridCalculator;
|
|
4
4
|
private logger;
|
|
@@ -8,11 +8,16 @@ export declare class GridOrderManager {
|
|
|
8
8
|
private lastAdjustmentTime;
|
|
9
9
|
private currentGridCenter;
|
|
10
10
|
constructor(config: GridOrderManagerConfig);
|
|
11
|
+
setCurrentGridCenter(price: number): void;
|
|
11
12
|
placeInitialGrid(levels: GridLevel[], placeOrderFn: (side: OrderSide, amount: number, price: number) => Promise<Order>): Promise<Order[]>;
|
|
12
|
-
handleOrderFill(filledOrder: Order, currentPrice: number,
|
|
13
|
-
handlePriceDeviation(newPrice: number,
|
|
13
|
+
handleOrderFill(filledOrder: Order, currentPrice: number, availableBalance: number, placeOrderFn: (side: OrderSide, amount: number, price: number) => Promise<Order>, cancelAllOrdersFn: (symbol: string) => Promise<void>, dynamicGridConfig: DynamicGridConfig, minOrderValue?: number, cancelOrderFn?: (orderId: string, symbol: string) => Promise<void>): Promise<void>;
|
|
14
|
+
handlePriceDeviation(newPrice: number, availableBalance: number, placeOrderFn: (side: OrderSide, amount: number, price: number) => Promise<Order>, cancelAllOrdersFn: (symbol: string) => Promise<void>, symbol: string, dynamicGridConfig: DynamicGridConfig, minOrderValue?: number, cancelOrderFn?: (orderId: string, symbol: string) => Promise<void>): Promise<void>;
|
|
14
15
|
private cancelAllOrders;
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Recreate the grid using the dynamic grid calculator.
|
|
18
|
+
* This replaces the old recreateGridAtPrice method with full dynamic support.
|
|
19
|
+
*/
|
|
20
|
+
private recreateGrid;
|
|
16
21
|
getActiveOrders(): Order[];
|
|
17
22
|
/**
|
|
18
23
|
* Check if grid adjustment is currently in progress
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-order-manager.d.ts","sourceRoot":"","sources":["../../../src/strategies/grid/grid-order-manager.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"grid-order-manager.d.ts","sourceRoot":"","sources":["../../../src/strategies/grid/grid-order-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAIrB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,iBAAiB,CAAK;gBAElB,MAAM,EAAE,sBAAsB;IAK1C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,gBAAgB,CACpB,MAAM,EAAE,SAAS,EAAE,EACnB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,GAC/E,OAAO,CAAC,KAAK,EAAE,CAAC;IA6Bb,eAAe,CACnB,WAAW,EAAE,KAAK,EAClB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,EAChF,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC;IAyCV,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,EAChF,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACpD,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC;YA8BF,eAAe;IAwD7B;;;OAGG;YACW,YAAY;IAkB1B,eAAe,IAAI,KAAK,EAAE;IAK1B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -13,6 +13,9 @@ class GridOrderManager {
|
|
|
13
13
|
this.config = config;
|
|
14
14
|
this.gridCalculator = new grid_calculator_1.GridCalculator();
|
|
15
15
|
}
|
|
16
|
+
setCurrentGridCenter(price) {
|
|
17
|
+
this.currentGridCenter = price;
|
|
18
|
+
}
|
|
16
19
|
async placeInitialGrid(levels, placeOrderFn) {
|
|
17
20
|
const orders = [];
|
|
18
21
|
for (const level of levels) {
|
|
@@ -22,64 +25,104 @@ class GridOrderManager {
|
|
|
22
25
|
this.logger.info(`Placed ${level.side.toUpperCase()} order: ${level.orderSize.toFixed(3)} @ $${level.price.toFixed(6)}`, { orderId: order.id });
|
|
23
26
|
}
|
|
24
27
|
catch (error) {
|
|
25
|
-
this.logger.error(`Failed to place ${level.side} order at ${level.price}`, {
|
|
28
|
+
this.logger.error(`Failed to place ${level.side} order at ${level.price}`, {
|
|
29
|
+
error: error instanceof Error ? error.message : String(error),
|
|
30
|
+
});
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
this.activeOrders = orders;
|
|
29
34
|
if (levels.length > 0) {
|
|
30
35
|
const buyLevels = levels.filter(l => l.side === 'buy');
|
|
31
36
|
const sellLevels = levels.filter(l => l.side === 'sell');
|
|
32
|
-
this.currentGridCenter =
|
|
37
|
+
this.currentGridCenter =
|
|
38
|
+
(Math.max(...buyLevels.map(l => l.price)) + Math.min(...sellLevels.map(l => l.price))) / 2;
|
|
33
39
|
}
|
|
34
40
|
return orders;
|
|
35
41
|
}
|
|
36
|
-
async handleOrderFill(filledOrder, currentPrice,
|
|
42
|
+
async handleOrderFill(filledOrder, currentPrice, availableBalance, placeOrderFn, cancelAllOrdersFn, dynamicGridConfig, minOrderValue, cancelOrderFn) {
|
|
37
43
|
this.logger.info(`Order FILLED: ${filledOrder.side.toUpperCase()} ${filledOrder.filled} @ $${filledOrder.price}`, { orderId: filledOrder.id });
|
|
38
44
|
if (this.isAdjusting || Date.now() - this.lastAdjustmentTime < this.config.adjustmentDebounce) {
|
|
39
45
|
return;
|
|
40
46
|
}
|
|
41
47
|
this.isAdjusting = true;
|
|
42
48
|
this.lastAdjustmentTime = Date.now();
|
|
49
|
+
this.activeOrders = this.activeOrders.filter(o => o.id !== filledOrder.id);
|
|
43
50
|
try {
|
|
44
|
-
await this.cancelAllOrders(cancelAllOrdersFn, filledOrder.symbol);
|
|
45
|
-
|
|
51
|
+
const cancelled = await this.cancelAllOrders(cancelAllOrdersFn, filledOrder.symbol, cancelOrderFn);
|
|
52
|
+
if (!cancelled) {
|
|
53
|
+
this.logger.error('❌ Order cancellation failed - aborting grid recreation to prevent duplicate orders');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
await this.recreateGrid(currentPrice, dynamicGridConfig, availableBalance, placeOrderFn, minOrderValue);
|
|
46
57
|
}
|
|
47
58
|
finally {
|
|
48
59
|
this.isAdjusting = false;
|
|
49
60
|
}
|
|
50
61
|
}
|
|
51
|
-
async handlePriceDeviation(newPrice,
|
|
62
|
+
async handlePriceDeviation(newPrice, availableBalance, placeOrderFn, cancelAllOrdersFn, symbol, dynamicGridConfig, minOrderValue, cancelOrderFn) {
|
|
52
63
|
const deviation = Math.abs(newPrice - this.currentGridCenter) / this.currentGridCenter;
|
|
53
64
|
if (deviation > this.config.priceDeviationThreshold && !this.isAdjusting) {
|
|
54
65
|
this.isAdjusting = true;
|
|
55
66
|
this.lastAdjustmentTime = Date.now();
|
|
56
67
|
try {
|
|
57
|
-
await this.cancelAllOrders(cancelAllOrdersFn, symbol);
|
|
58
|
-
|
|
68
|
+
const cancelled = await this.cancelAllOrders(cancelAllOrdersFn, symbol, cancelOrderFn);
|
|
69
|
+
if (!cancelled) {
|
|
70
|
+
this.logger.error('❌ Order cancellation failed - aborting grid recreation to prevent duplicate orders');
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
await this.recreateGrid(newPrice, dynamicGridConfig, availableBalance, placeOrderFn, minOrderValue);
|
|
59
74
|
}
|
|
60
75
|
finally {
|
|
61
76
|
this.isAdjusting = false;
|
|
62
77
|
}
|
|
63
78
|
}
|
|
64
79
|
}
|
|
65
|
-
async cancelAllOrders(cancelAllOrdersFn, symbol) {
|
|
80
|
+
async cancelAllOrders(cancelAllOrdersFn, symbol, cancelOrderFn) {
|
|
66
81
|
if (this.activeOrders.length === 0) {
|
|
67
|
-
return;
|
|
82
|
+
return true;
|
|
68
83
|
}
|
|
69
84
|
try {
|
|
70
85
|
await cancelAllOrdersFn(symbol);
|
|
71
86
|
this.activeOrders = [];
|
|
87
|
+
this.logger.info(`✅ Successfully cancelled all orders for ${symbol}`);
|
|
88
|
+
return true;
|
|
72
89
|
}
|
|
73
90
|
catch (error) {
|
|
74
91
|
this.logger.warn(`⚠️ Bulk cancellation failed for ${symbol}, falling back to individual cancellation`, {
|
|
75
|
-
error: error instanceof Error ? error.message : String(error)
|
|
92
|
+
error: error instanceof Error ? error.message : String(error),
|
|
76
93
|
});
|
|
94
|
+
if (!cancelOrderFn) {
|
|
95
|
+
this.logger.error('❌ Individual order cancellation not available - cannot recover from bulk cancellation failure');
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
const failedCancellations = [];
|
|
99
|
+
const ordersToCancel = [...this.activeOrders];
|
|
100
|
+
for (const order of ordersToCancel) {
|
|
101
|
+
try {
|
|
102
|
+
await cancelOrderFn(order.id, order.symbol);
|
|
103
|
+
this.activeOrders = this.activeOrders.filter(o => o.id !== order.id);
|
|
104
|
+
}
|
|
105
|
+
catch (cancelError) {
|
|
106
|
+
this.logger.error(`Failed to cancel order ${order.id}:`, {
|
|
107
|
+
error: cancelError instanceof Error ? cancelError.message : String(cancelError),
|
|
108
|
+
});
|
|
109
|
+
failedCancellations.push(order.id);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (failedCancellations.length > 0) {
|
|
113
|
+
this.logger.error(`❌ Failed to cancel ${failedCancellations.length} orders. Aborting grid recreation.`);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
this.activeOrders = [];
|
|
117
|
+
return true;
|
|
77
118
|
}
|
|
78
119
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
120
|
+
/**
|
|
121
|
+
* Recreate the grid using the dynamic grid calculator.
|
|
122
|
+
* This replaces the old recreateGridAtPrice method with full dynamic support.
|
|
123
|
+
*/
|
|
124
|
+
async recreateGrid(centerPrice, dynamicGridConfig, availableBalance, placeOrderFn, minOrderValue) {
|
|
125
|
+
const gridWithSizes = this.gridCalculator.generateDynamicGrid(centerPrice, dynamicGridConfig, availableBalance, minOrderValue);
|
|
83
126
|
await this.placeInitialGrid(gridWithSizes, placeOrderFn);
|
|
84
127
|
this.currentGridCenter = centerPrice;
|
|
85
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-order-manager.js","sourceRoot":"","sources":["../../../src/strategies/grid/grid-order-manager.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"grid-order-manager.js","sourceRoot":"","sources":["../../../src/strategies/grid/grid-order-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare class GridStrategy extends BaseStrategy {
|
|
|
8
8
|
private calculator;
|
|
9
9
|
private exchangeConnector?;
|
|
10
10
|
private gridConfig?;
|
|
11
|
+
private volatilityTracker?;
|
|
11
12
|
private priceUpdateInterval?;
|
|
12
13
|
private logger;
|
|
13
14
|
constructor(id: string);
|
|
@@ -19,7 +20,17 @@ export declare class GridStrategy extends BaseStrategy {
|
|
|
19
20
|
onOrderUpdate(order: Order): Promise<void>;
|
|
20
21
|
setExchangeConnector(connector: BaseExchangeConnector): void;
|
|
21
22
|
setRiskConfig(riskConfig: RiskManagerConfig): void;
|
|
23
|
+
/**
|
|
24
|
+
* Get the DynamicGridConfig from the current gridConfig.
|
|
25
|
+
* dynamicGrid is always set by the StrategyFactory.
|
|
26
|
+
*/
|
|
27
|
+
private getDynamicGridConfig;
|
|
28
|
+
/**
|
|
29
|
+
* Log the active grid configuration for visibility
|
|
30
|
+
*/
|
|
31
|
+
private logGridConfiguration;
|
|
22
32
|
private placeOrder;
|
|
33
|
+
private cancelOrder;
|
|
23
34
|
private cancelAllOrders;
|
|
24
35
|
private getAvailableBalance;
|
|
25
36
|
private getSymbol;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-strategy.d.ts","sourceRoot":"","sources":["../../../src/strategies/grid/grid-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"grid-strategy.d.ts","sourceRoot":"","sources":["../../../src/strategies/grid/grid-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EACL,KAAK,EAEL,cAAc,EAId,iBAAiB,EAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AASpF,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,iBAAiB,CAAC,CAAwB;IAClD,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,mBAAmB,CAAC,CAAiB;IAC7C,OAAO,CAAC,MAAM,CAAiC;gBAEnC,EAAE,EAAE,MAAM;IAoBtB,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAShD,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6EtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBrB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B3D,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAsChD,oBAAoB,CAAC,SAAS,EAAE,qBAAqB,GAAG,IAAI;IAI5D,aAAa,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAIlD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;YAkBd,UAAU;YASV,WAAW;YAQX,eAAe;YAQf,mBAAmB;IAiBjC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,oBAAoB;YAmCd,sBAAsB;CAmBrC"}
|