package com.xcong.excoin.modules.okxApi; import com.xcong.excoin.modules.okxApi.wsHandler.handler.MarkPriceOkxChannelHandler; import com.xcong.excoin.modules.okxApi.wsHandler.handler.OrdersOkxChannelHandler; import com.xcong.excoin.modules.okxApi.wsHandler.handler.PositionsOkxChannelHandler; import java.math.BigDecimal; import java.util.concurrent.CountDownLatch; /** * OKX 网格策略独立启动入口(用于测试或非 Spring 环境)。 * * @author Administrator */ public class OkxWebSocketClientMain { public static void main(String[] args) throws InterruptedException { OkxConfig config = OkxConfig.builder() .apiKey("YOUR_OKX_API_KEY") .apiSecret("YOUR_OKX_API_SECRET") .passphrase("YOUR_OKX_PASSPHRASE") .contract("ETH-USDT-SWAP") .leverage("100") .marginMode("cross") .positionMode("long_short_mode") .gridRate(new BigDecimal("0.003")) .expectedProfit(new BigDecimal("25")) .maxLoss(new BigDecimal("15")) .baseQuantity("15") .quantity("15") .restartGridSpan(6) .priceScale(2) .contractMultiplier(new BigDecimal("0.01")) .isProduction(false) .build(); OkxGridTradeService gridTradeService = new OkxGridTradeService(config); gridTradeService.init(); OkxKlineWebSocketClient wsClient = new OkxKlineWebSocketClient(config); wsClient.addPublicHandler(new MarkPriceOkxChannelHandler( config.getContract(), gridTradeService)); wsClient.addPrivateHandler(new PositionsOkxChannelHandler( config, gridTradeService)); wsClient.addPrivateHandler(new OrdersOkxChannelHandler( config, gridTradeService)); gridTradeService.setWsClient(wsClient); wsClient.init(); gridTradeService.startGrid(); // 保持主线程不退出 CountDownLatch latch = new CountDownLatch(1); Runtime.getRuntime().addShutdownHook(new Thread(() -> { gridTradeService.stopGrid(); wsClient.destroy(); latch.countDown(); })); latch.await(); } }