Administrator
2025-12-13 7686f46464a24caa6a50092931741f64612389f7
feat(okxNewPrice): 优化加仓逻辑并增强错误处理

- 增加对加仓参数设置结果的判断,确保操作成功后再执行下单
- 修改 buyCntTimeEvent 方法返回值为布尔类型,用于反馈操作结果
- 在加仓条件满足时记录成功日志,否则记录错误日志
- 提升系统稳定性,避免因参数设置失败导致的异常行为
1 files modified
18 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java
@@ -159,10 +159,16 @@
                DescBigDecimal kaiCang = queueKaiCang.peek();
                if (kaiCang != null && markPx.compareTo(kaiCang.getValue()) <= 0 && avgPx.compareTo(kaiCang.getValue()) >= 0) {
                    log.info("开始加仓...开仓队列价格大于当前价格{}>{}", kaiCang.getValue(), markPx);
                    WsMapBuild.saveStringToMap(OrderInfoWs.ORDERINFOWSMAP, "orderPrice",String.valueOf(markPx));
                    WsMapBuild.saveStringToMap(InstrumentsWs.INSTRUMENTSWSMAP, CoinEnums.STATE.name(), OrderParamEnums.STATE_4.getValue());
                    buyCntTimeEvent(avgPx,markPx);
                    return OrderParamEnums.BUY.getValue();
                    boolean orderPriceFlag = WsMapBuild.saveStringToMap(OrderInfoWs.ORDERINFOWSMAP, "orderPrice", String.valueOf(markPx));
                    boolean stateFlag = WsMapBuild.saveStringToMap(InstrumentsWs.INSTRUMENTSWSMAP, CoinEnums.STATE.name(), OrderParamEnums.STATE_4.getValue());
                    boolean buyCntTimeFlag = buyCntTimeEvent(avgPx, markPx);
                    if (orderPriceFlag && stateFlag && buyCntTimeFlag){
                        log.info("加仓参数准备成功......");
                        return OrderParamEnums.BUY.getValue();
                    }else{
                        log.error("加仓参数准备失败......");
                        return null;
                    }
                } else {
                    log.info("未触发加仓......,等待");
                    return OrderParamEnums.HOLDING.getValue();
@@ -219,12 +225,12 @@
        }
    }
    private void buyCntTimeEvent(BigDecimal avgPx, BigDecimal markPx){
    private boolean buyCntTimeEvent(BigDecimal avgPx, BigDecimal markPx){
        //判断当前价格和开仓价格直接间隔除以间距,取整,获取的数量是否大于等于0,如果大于0,则下单基础张数*倍数
        String buyCntTime = InstrumentsWs.INSTRUMENTSWSMAP.get(CoinEnums.BUY_CNT_TIME.name());
        BigDecimal subtract = avgPx.subtract(markPx);
        BigDecimal divide = subtract.divide(new BigDecimal(buyCntTime), 0, RoundingMode.DOWN).add(BigDecimal.ONE);
        WsMapBuild.saveStringToMap(TradeOrderWs.TRADEORDERWSMAP, "buyCntTime",String.valueOf(divide));
        return WsMapBuild.saveStringToMap(TradeOrderWs.TRADEORDERWSMAP, "buyCntTime",String.valueOf(divide));
    }
    /**