| | |
| | | |
| | | try { |
| | | config = OkxConfig.builder() |
| | | .apiKey("d90ca272391992b8e74f8f92cedb21ec") |
| | | .secretKey("1861e4f52de4bb53369ea3208d9ede38ece4777368030f96c77d27934c46c274") |
| | | .passphrase("Aa123123@") |
| | | .contract("BTC-USDT-SWAP") |
| | | .apiKey("ac76252d-e717-4459-a6f9-80512aed5ea0") |
| | | .secretKey("A8168543EF4F08A6DBFE27AB23956898") |
| | | .passphrase("Aa12345678@") |
| | | .contract("ETH-USDT-SWAP") |
| | | .leverage("100") |
| | | .marginMode("cross") |
| | | .posMode("long_short_mode") |
| | | .gridRate(new BigDecimal("0.0015")) |
| | | .overallTp(new BigDecimal("5")) |
| | | .maxLoss(new BigDecimal("15")) |
| | | .overallTp(new BigDecimal("15")) |
| | | .maxLoss(new BigDecimal("20")) |
| | | .quantity("1") |
| | | .contractMultiplier(new BigDecimal("1")) |
| | | .contractMultiplier(new BigDecimal("0.1")) |
| | | .unrealizedPnlPriceMode(OkxConfig.PnLPriceMode.LAST_PRICE) |
| | | .isProduction(false) |
| | | .build(); |
| | |
| | | gridTradeService = new OkxGridTradeService(config, accountName); |
| | | gridTradeService.startGrid(); |
| | | |
| | | wsKlineClient = new OkxKlineWebSocketClient(config.getWsKlineUrl()); |
| | | wsKlineClient.addChannelHandler(new OkxCandlestickChannelHandler(config.getContract(), gridTradeService)); |
| | | wsKlineClient.init(); |
| | | log.info("[管理器] K线WS已连接, 已注册K线频道处理器"); |
| | | |
| | | wsPrivateClient = new OkxKlineWebSocketClient( |
| | | config.getWsPrivateUrl(), |
| | | config.getApiKey(), |
| | |
| | | wsPrivateClient.addChannelHandler(new OkxPositionsChannelHandler(config.getContract(), gridTradeService)); |
| | | wsPrivateClient.addChannelHandler(new OkxAccountChannelHandler()); |
| | | wsPrivateClient.addChannelHandler(new OkxOrderInfoChannelHandler(config.getContract(), gridTradeService, config)); |
| | | wsPrivateClient.init(); |
| | | log.info("[管理器] 私有WS已连接, 已注册 3 个频道处理器"); |
| | | |
| | | wsPrivateClient.setOnLoginSuccess(() -> { |
| | | log.info("[管理器] 私有WS登录完成,启动K线订阅"); |
| | | try { |
| | | wsKlineClient = new OkxKlineWebSocketClient(config.getWsKlineUrl()); |
| | | wsKlineClient.addChannelHandler(new OkxCandlestickChannelHandler(config.getContract(), gridTradeService)); |
| | | wsKlineClient.init(); |
| | | log.info("[管理器] K线WS已连接, 已注册K线频道处理器"); |
| | | } catch (Exception e) { |
| | | log.error("[管理器] K线WS初始化失败", e); |
| | | } |
| | | }); |
| | | |
| | | wsPrivateClient.init(); |
| | | gridTradeService.setWebSocketClient(wsPrivateClient.getWebSocketClient()); |
| | | log.info("[管理器] 私有WS已连接, 等待登录完成..."); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("[管理器] 初始化失败", e); |
| | |
| | | config.getPassphrase(), |
| | | !config.isProduction()); |
| | | |
| | | log.info("[管理器] 清理原有持仓和委托..."); |
| | | restClient.cancelAllOrders(config.getContract()); |
| | | restClient.closeAllPositions(config.getContract(), config.getMarginMode()); |
| | | |
| | | boolean posModeOk = restClient.setPositionMode(config.getPosMode()); |
| | | if (!posModeOk) { |
| | | log.error("[管理器] 设置持仓方式失败,策略可能无法正常运作"); |
| | |
| | | log.error("[管理器] 设置杠杆倍数失败,策略可能无法正常运作"); |
| | | } |
| | | |
| | | log.info("[管理器] 账户配置完成, posMode:{}, leverage:{}, marginMode:{}", |
| | | config.getPosMode(), config.getLeverage(), config.getMarginMode()); |
| | | Long instIdCode = restClient.fetchInstIdCode("SWAP", config.getContract()); |
| | | if (instIdCode != null) { |
| | | config.setInstIdCode(instIdCode); |
| | | } else { |
| | | log.error("[管理器] 获取instIdCode失败,WS下单将无法正常工作"); |
| | | } |
| | | |
| | | log.info("[管理器] 账户配置完成, posMode:{}, leverage:{}, marginMode:{}, instIdCode:{}", |
| | | config.getPosMode(), config.getLeverage(), config.getMarginMode(), config.getInstIdCode()); |
| | | } |
| | | |
| | | public OkxKlineWebSocketClient getKlineWebSocketClient() { return wsKlineClient; } |