From 1cb6ffd630a5ba5fe04f725b7699de4c6f654dc7 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 17 Dec 2025 13:50:44 +0800
Subject: [PATCH] feat(okxNewPrice): 优化网格交易策略逻辑

---
 src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java |   33 ++++++++++++++++++++-------------
 1 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java
index 82d8f92..eb31231 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java
@@ -52,6 +52,7 @@
             return null;
         }
         String markPx = ObjectUtil.isEmpty(redisUtils.getString(CoinEnums.HE_YUE.getCode())) ? "0" : redisUtils.getString(CoinEnums.HE_YUE.getCode());
+
         log.info("当前价格: {}", markPx);
         WangGeListEnum gridByPrice = WangGeListEnum.getGridByPrice(new BigDecimal(markPx));
         if (gridByPrice == null){
@@ -61,6 +62,12 @@
         log.info("当前网格: {}", gridByPrice.name());
         Map<String, String> accountMap = InstrumentsWs.getAccountMap(accountName);
         String wanggeName = accountMap.get(CoinEnums.WANG_GE_OLD.name());
+
+        PriorityBlockingQueue<AscBigDecimal> ascBigDecimals = wangGeListService.initWangGe(markPx);
+        if (ascBigDecimals == null){
+            log.error("没有获取到网格队列......");
+            return null;
+        }
         /**
          * 如果下单的网格不属于同一个网格,则先止损掉老的网格的仓位
          */
@@ -122,16 +129,6 @@
                 return OrderParamEnums.HOLDING.getValue();
             }
         }
-
-        if (PositionsWs.getAccountMap(positionAccountName).get("pos") == null){
-            log.error("没有获取到持仓信息,等待初始化......");
-            return null;
-        }
-        BigDecimal pos = PositionsWs.getAccountMap(positionAccountName).get("pos");
-        if (BigDecimal.ZERO.compareTo( pos) >= 0) {
-            log.error("持仓数量为零,进行初始化订单");
-            return null;
-        }
         // 判断是否保证金超标
         if (PositionsWs.getAccountMap(positionAccountName).get("imr") == null){
             log.error("没有获取到持仓信息,等待初始化......");
@@ -144,10 +141,14 @@
             return OrderParamEnums.HOLDING.getValue();
         }
 
-        PriorityBlockingQueue<AscBigDecimal> ascBigDecimals = wangGeListService.initWangGe(markPx);
-        if (ascBigDecimals == null){
-            log.error("没有获取到网格队列......");
+        if (PositionsWs.getAccountMap(positionAccountName).get("pos") == null){
+            log.error("没有获取到持仓信息,等待初始化......");
             return null;
+        }
+        BigDecimal pos = PositionsWs.getAccountMap(positionAccountName).get("pos");
+        if (BigDecimal.ZERO.compareTo( pos) >= 0) {
+            log.error("持仓数量为零,进行初始化订单");
+            return OrderParamEnums.INIT.getValue();
         }
         if (CoinEnums.POSSIDE_LONG.getCode().equals(posSide)){
             return caoZuoLong(accountName,markPx);
@@ -370,8 +371,11 @@
     private boolean buyCntTimeLongEvent(String accountName, BigDecimal avgPx, BigDecimal markPx){
         //判断当前价格和开仓价格直接间隔除以间距,取整,获取的数量是否大于等于0,如果大于0,则下单基础张数*倍数
         String buyCntTime = InstrumentsWs.getAccountMap(accountName).get(CoinEnums.BUY_CNT_TIME.name());
+        log.info("倍数次数间隔{}", buyCntTime);
         BigDecimal subtract = avgPx.subtract(markPx);
+        log.info("倍数价格差距{}", subtract);
         BigDecimal divide = subtract.divide(new BigDecimal(buyCntTime), 0, RoundingMode.DOWN).add(BigDecimal.ONE);
+        log.info("倍数次数{}", divide);
         if (divide.compareTo(BigDecimal.ZERO) <= 0){
             log.warn("加仓次数间隔时间小于0,不加仓");
             return false;
@@ -382,8 +386,11 @@
     private boolean buyCntTimeShortEvent(String accountName, BigDecimal avgPx, BigDecimal markPx){
         //判断当前价格和开仓价格直接间隔除以间距,取整,获取的数量是否大于等于0,如果大于0,则下单基础张数*倍数
         String buyCntTime = InstrumentsWs.getAccountMap(accountName).get(CoinEnums.BUY_CNT_TIME.name());
+        log.info("倍数次数间隔{}", buyCntTime);
         BigDecimal subtract = markPx.subtract(avgPx);
+        log.info("倍数价格差距{}", subtract);
         BigDecimal divide = subtract.divide(new BigDecimal(buyCntTime), 0, RoundingMode.DOWN).add(BigDecimal.ONE);
+        log.info("倍数次数{}", divide);
         if (divide.compareTo(BigDecimal.ZERO) <= 0){
             log.warn("加仓次数间隔时间小于0,不加仓");
             return false;

--
Gitblit v1.9.1