refactor(okxNewPrice): 账户配置
| | |
| | | |
| | | private final List<OkxChannelHandler> channelHandlers = new ArrayList<>(); |
| | | |
| | | private volatile Runnable onLoginSuccess; |
| | | |
| | | public WebSocketClient getWebSocketClient() { |
| | | return webSocketClient; |
| | | } |
| | | |
| | | public void setOnLoginSuccess(Runnable onLoginSuccess) { |
| | | this.onLoginSuccess = onLoginSuccess; |
| | | } |
| | | |
| | | private final ExecutorService sharedExecutor = Executors.newCachedThreadPool(r -> { |
| | |
| | | handler.subscribe(webSocketClient); |
| | | } |
| | | sendPing(); |
| | | if (onLoginSuccess != null) { |
| | | onLoginSuccess.run(); |
| | | } |
| | | } else { |
| | | log.error("[WS] WebSocket登录失败, code:{}, msg:{}", code, response.getString("msg")); |
| | | } |
| | |
| | | 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); |
| | |
| | | } |
| | | for (int i = 0; i < dataArray.size(); i++) { |
| | | JSONObject acct = dataArray.getJSONObject(i); |
| | | log.info("[{}] 账户更新, 可用余额:{}, 现金余额:{}, 权益:{}, 未实现盈亏:{}, 保证金:{}", |
| | | log.info("[{}] 账户更新, 总权益:{}, 未实现盈亏:{}, 保证金:{}", |
| | | CHANNEL_NAME, |
| | | acct.get("availBal"), acct.get("cashBal"), |
| | | acct.get("eq"), acct.get("upl"), acct.get("imr")); |
| | | acct.get("totalEq"), acct.get("upl"), acct.get("imr")); |
| | | |
| | | JSONArray details = acct.getJSONArray("details"); |
| | | if (details != null) { |
| | | for (int j = 0; j < details.size(); j++) { |
| | | JSONObject detail = details.getJSONObject(j); |
| | | log.info("[{}] 币种:{}, 可用余额:{}, 现金余额:{}, 权益:{}", |
| | | CHANNEL_NAME, |
| | | detail.get("ccy"), detail.get("availBal"), |
| | | detail.get("cashBal"), detail.get("eq")); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("[{}] 处理数据失败", CHANNEL_NAME, e); |