| | |
| | | |
| | | private static final String WS_URL_MONIPAN = "wss://wspap.okx.com:8443/ws/v5/public"; |
| | | private static final String WS_URL_SHIPAN = "wss://ws.okx.com:8443/ws/v5/public"; |
| | | private static final boolean isAccountType = false; |
| | | private static final boolean isAccountType = true; |
| | | |
| | | /** |
| | | * 建立与 OKX WebSocket 服务器的连接。 |
| | |
| | | } |
| | | // 获取所有OkxQuantWebSocketClient实例 |
| | | for (OkxQuantWebSocketClient client : clientManager.getAllClients()) { |
| | | String accountName = getAccountNameFromClient(client); |
| | | String accountName = client.getAccountName(); |
| | | if (accountName != null) { |
| | | /** |
| | | * 处理历史网格的订单 |
| | |
| | | * 如果不一致则需要处理 |
| | | */ |
| | | String fangXiang = gridByPriceNew.getFang_xiang(); |
| | | String fangXiangOld = CoinEnums.POSSIDE_LONG.equals(fangXiang) ? CoinEnums.POSSIDE_SHORT.getCode() : CoinEnums.POSSIDE_LONG.getCode(); |
| | | String fangXiangOld = CoinEnums.POSSIDE_LONG.getCode().equals(fangXiang) ? CoinEnums.POSSIDE_SHORT.getCode() : CoinEnums.POSSIDE_LONG.getCode(); |
| | | log.info("历史网格方向为:{}", fangXiangOld); |
| | | if (!fangXiang.equals(fangXiangOld)){ |
| | | TradeRequestParam tradeRequestParamOld = caoZuoService.caoZuoZhiSunEvent(accountName, markPx, fangXiangOld); |
| | |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("触发量化操作失败", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 从OkxQuantWebSocketClient实例中获取账号名称 |
| | | * 由于OkxQuantWebSocketClient没有直接暴露账号名称的方法,这里需要通过反射获取 |
| | | * 更好的方式是修改OkxQuantWebSocketClient,添加getAccountName方法 |
| | | */ |
| | | private String getAccountNameFromClient(OkxQuantWebSocketClient client) { |
| | | try { |
| | | // 通过反射获取account字段的值 |
| | | java.lang.reflect.Field accountField = OkxQuantWebSocketClient.class.getDeclaredField("account"); |
| | | accountField.setAccessible(true); |
| | | Object account = accountField.get(client); |
| | | // 调用account的name()方法获取账号名称 |
| | | java.lang.reflect.Method nameMethod = account.getClass().getMethod("name"); |
| | | return (String) nameMethod.invoke(account); |
| | | } catch (Exception e) { |
| | | log.error("获取账号名称失败", e); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | private void reconnectWithBackoff() throws InterruptedException { |
| | | int attempt = 0; |
| | | int maxAttempts = 5; |
| | | int maxAttempts = 3; |
| | | long delayMs = 5000; |
| | | |
| | | while (attempt < maxAttempts) { |