Administrator
2025-12-10 e2444dfa6cab60dfab69fa56e056cf8f4f9b0287
feat(okxNewPrice): 实现加仓逻辑优化

- 在开仓和减仓过程中增加持仓过小判断
- 触发加仓条件时返回买入操作
- 优化 doAddCang 方法参数处理逻辑
- 使用 Redis 获取预期收益值进行比较
- 增加详细的日志记录便于追踪加仓过程
1 files modified
22 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java 22 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java
@@ -145,6 +145,13 @@
                    side = OrderParamEnums.BUY.getValue();
                    redisUtils.set(positionsOrderPriceKey, String.valueOf(kaiCang.getValue()), 0);
                } else {
                    //判断是否加仓(当前持仓过小,可以加仓)
                    boolean isAddCang = doAddCang();
                    log.info("加仓过程中发现持仓过小 :{}",isAddCang);
                    if (isAddCang){
                        log.info("触发加仓......,持仓过小");
                        return OrderParamEnums.BUY.getValue();
                    }
                    log.info("未触发加仓......,等待");
                }
            } else if (avgPx.compareTo(markPx) < 0) {
@@ -173,9 +180,10 @@
                                return OrderParamEnums.SELL.getValue();
                            }else{
                                //判断是否加仓(当前持仓过小,可以加仓)
                                boolean isAddCang = doAddCang(imrValue);
                                log.info("减仓过程中没有收获,发现是持仓过小 :{}",isAddCang);
                                boolean isAddCang = doAddCang();
                                log.info("减仓过程中发现持仓过小 :{}",isAddCang);
                                if (isAddCang){
                                    log.info("触发加仓......,持仓过小");
                                    return OrderParamEnums.BUY.getValue();
                                }
                                log.info("当前未实现盈亏:{}没有大于预计收益>{},钱在路上了", uplValue, imrValue);
@@ -189,11 +197,11 @@
                                redisUtils.set(positionsOrderPriceKey, String.valueOf(pingCang.getValue()), 0);
                                return OrderParamEnums.SELL.getValue();
                            }else{
                                //判断是否加仓(当前持仓过小,可以加仓)
                                boolean isAddCang = doAddCang(imrValue);
                                log.info("减仓过程中没有收获,发现是持仓过小 :{}",isAddCang);
                                boolean isAddCang = doAddCang();
                                log.info("减仓过程中发现持仓过小 :{}",isAddCang);
                                if (isAddCang){
                                    log.info("触发加仓......,持仓过小");
                                    return OrderParamEnums.BUY.getValue();
                                }
                                log.info("当前未实现盈亏:{}没有大于预计收益>{},钱在路上了", uplValue, imrValue);
@@ -218,7 +226,9 @@
        }
    }
    private boolean doAddCang(BigDecimal imrValue) {
    private boolean doAddCang() {
        String imr = (String) redisUtils.get(positionsImrKey);
        BigDecimal imrValue = new BigDecimal(imr).multiply(new BigDecimal(OrderParamEnums.PING_CANG_SHOUYI.getValue()));
        String everyTimeUsdt = (String) redisUtils.get(AccountWs.ACCOUNTWS_CHANNEL + ":" + CoinEnums.USDT.getCode() + ":everyTimeUsdt");
        BigDecimal everyTimeUsdtValue = new BigDecimal(everyTimeUsdt);
        return everyTimeUsdtValue.compareTo(imrValue) >= 0;