Administrator
2025-12-11 87c31b6e2c11a82d92389194e190d6b2eefd939a
fix(okx): 调整账户状态与保证金计算逻辑

- 修改账户状态从 STATE_0 到 STATE_3 的错误日志记录
- 更新总保证金计算方式,使用现金余额乘以止损比例替代原有总订单USDT值
- 移除多次冗余的Redis设置操作,避免重复写入positionsOrderPriceKey
- 注释掉WebSocket客户端中的定时重连线程调度器相关代码
3 files modified
47 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java 32 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/AccountWs.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java
@@ -100,9 +100,9 @@
        }
        shutdownExecutorGracefully(sharedExecutor);
        if (reconnectScheduler != null) {
            reconnectScheduler.shutdownNow();
        }
//        if (reconnectScheduler != null) {
//            reconnectScheduler.shutdownNow();
//        }
    }
    private void shutdownExecutorGracefully(ExecutorService executor) {
@@ -299,19 +299,19 @@
        });
        heartbeatExecutor.scheduleWithFixedDelay(this::checkHeartbeatTimeout, 25, 25, TimeUnit.SECONDS);
        // 添加每小时重连的定时任务
        if (reconnectScheduler != null && !reconnectScheduler.isTerminated()) {
            reconnectScheduler.shutdownNow();
        }
        reconnectScheduler = Executors.newSingleThreadScheduledExecutor(r -> {
            Thread t = new Thread(r, "okx-scheduled-reconnect");
            t.setDaemon(true);
            return t;
        });
        // 每小时执行一次重连
        reconnectScheduler.scheduleWithFixedDelay(this::performScheduledReconnect, 60, 60, TimeUnit.MINUTES);
//        // 添加每小时重连的定时任务
//        if (reconnectScheduler != null && !reconnectScheduler.isTerminated()) {
//            reconnectScheduler.shutdownNow();
//        }
//
//        reconnectScheduler = Executors.newSingleThreadScheduledExecutor(r -> {
//            Thread t = new Thread(r, "okx-scheduled-reconnect");
//            t.setDaemon(true);
//            return t;
//        });
//
//        // 每小时执行一次重连
//        reconnectScheduler.scheduleWithFixedDelay(this::performScheduledReconnect, 60, 60, TimeUnit.MINUTES);
    }
    /**
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java
@@ -92,13 +92,13 @@
            return OrderParamEnums.INIT.getValue();
        }
        //可使用的总保证金
        String totalOrderUsdtKey = AccountWs.ACCOUNTWS_CHANNEL + ":" + CoinEnums.USDT.getCode() + ":totalOrderUsdt";
        String totalOrderUsdt = (String) redisUtils.get(totalOrderUsdtKey);
        String cashBalStrKey = AccountWs.ACCOUNTWS_CHANNEL + ":" + CoinEnums.USDT.getCode() + ":cashBalStr";
        String cashBalStr = (String) redisUtils.get(cashBalStrKey);
        BigDecimal upl = new BigDecimal(uplStr);
        if (BigDecimal.ZERO.compareTo(upl) >= 0){
            upl = upl.multiply(new BigDecimal("-1"));
            if (upl.compareTo(new BigDecimal(totalOrderUsdt)) >= 0) {
            BigDecimal bigDecimal = new BigDecimal(cashBalStr).multiply(new BigDecimal(OrderParamEnums.ZHI_SUN.getValue()));
            if (upl.compareTo(bigDecimal) >= 0) {
                log.error("持仓盈亏超过下单总保证金,止损冷静一天......");
                return OrderParamEnums.OUT.getValue();
            }
@@ -150,7 +150,6 @@
                    log.info("加仓过程中发现持仓过小 :{}",isAddCang);
                    if (isAddCang){
                        log.info("触发加仓......,持仓过小");
                        redisUtils.set(positionsOrderPriceKey, String.valueOf(markPx), 0);
                        return OrderParamEnums.BUY.getValue();
                    }
                    log.info("未触发加仓......,等待");
@@ -185,7 +184,6 @@
                                log.info("减仓过程中发现持仓过小 :{}",isAddCang);
                                if (isAddCang){
                                    log.info("触发加仓......,持仓过小");
                                    redisUtils.set(positionsOrderPriceKey, String.valueOf(markPx), 0);
                                    return OrderParamEnums.BUY.getValue();
                                }
                                log.info("当前未实现盈亏:{}没有大于预计收益>{},钱在路上了", uplValue, imrValue);
@@ -204,7 +202,6 @@
                                log.info("减仓过程中发现持仓过小 :{}",isAddCang);
                                if (isAddCang){
                                    log.info("触发加仓......,持仓过小");
                                    redisUtils.set(positionsOrderPriceKey, String.valueOf(markPx), 0);
                                    return OrderParamEnums.BUY.getValue();
                                }
                                log.info("当前未实现盈亏:{}没有大于预计收益>{},钱在路上了", uplValue, imrValue);
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/AccountWs.java
@@ -129,8 +129,8 @@
                                log.warn(OrderParamEnums.STATE_2.getName());
                                state = OrderParamEnums.STATE_2.getValue();
                            } else {
                                log.error(OrderParamEnums.STATE_0.getName());
                                state = OrderParamEnums.STATE_0.getValue();
                                log.error(OrderParamEnums.STATE_3.getName());
                                state = OrderParamEnums.STATE_3.getValue();
                            }
                        }