Administrator
2025-12-29 6b5efcaafe57c8c7f0e9c7761d960be063dfd8a2
src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxNewPriceWebSocketClient.java
@@ -110,7 +110,7 @@
    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 服务器的连接。
@@ -310,7 +310,7 @@
            }
            // 获取所有OkxQuantWebSocketClient实例
            for (OkxQuantWebSocketClient client : clientManager.getAllClients()) {
                String accountName = getAccountNameFromClient(client);
                String accountName = client.getAccountName();
                if (accountName != null) {
                    /**
                     * 处理历史网格的订单
@@ -319,10 +319,12 @@
                     *      如果不一致则需要处理
                     */
                    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);
                    TradeRequestParam tradeRequestParamOld = caoZuoService.caoZuoZhiSunEvent(accountName, markPx, fangXiangOld);
                    TradeOrderWs.orderEvent(client.getWebSocketClient(), tradeRequestParamOld);
                    if (!fangXiang.equals(fangXiangOld)){
                        TradeRequestParam tradeRequestParamOld = caoZuoService.caoZuoZhiSunEvent(accountName, markPx, fangXiangOld);
                        TradeOrderWs.orderEvent(client.getWebSocketClient(), tradeRequestParamOld);
                    }
                    /**
                     * 处理当前网格的订单,触发量化操作
@@ -336,26 +338,6 @@
            }
        } 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;
        }
    }
@@ -448,7 +430,7 @@
     */
    private void reconnectWithBackoff() throws InterruptedException {
        int attempt = 0;
        int maxAttempts = 5;
        int maxAttempts = 3;
        long delayMs = 5000;
        while (attempt < maxAttempts) {