From 15a9e4f68fafe658647f4e486237d81cd1d88491 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 08 Oct 2026 10:36:29 +0800
Subject: [PATCH] fix(gate-api): 修复网格交易重置策略中的竞态条件问题

---
 src/main/java/com/xcong/excoin/modules/gateApi/GateConfigDTO.java |   43 +++++++++++++++++++++++++++++++++++++++----
 1 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateConfigDTO.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateConfigDTO.java
index 97be386..5cd93fd 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateConfigDTO.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateConfigDTO.java
@@ -69,8 +69,22 @@
     private int maxPositionPerSide;
     /** 加仓启动阈值:前N次止损不触发加仓,默认 1 */
     private int addPositionStartThreshold;
-    /** 超额止盈开关:true=挂单成交后将超出基础仓位的部分挂止盈单,默认 false */
-    private boolean placeExcessTakeProfit;
+    /** 止盈挂单模式:off=关闭 / concentrated=集中止盈 / dispersed=分散止盈,默认 off */
+    private String placeExcessTakeProfit;
+    /** 自定义止损开关:true=启用自定义止损触发价,false=使用默认阶梯止损。null=未设置(默认false) */
+    private Boolean dualStopLossEnabled;
+    /** 多仓自定义止损触发价(价格跌至该值触发平多),null=未设置 */
+    private BigDecimal longStopLossPrice;
+    /** 空仓自定义止损触发价(价格涨至该值触发平空),null=未设置 */
+    private BigDecimal shortStopLossPrice;
+    /** 止盈成交触发对向加仓开关:true=启用,false=禁用。null=未设置(默认false) */
+    private Boolean tpTriggerOppositeAddEnabled;
+    /** 对向加仓挂单数量:止盈成交后在对向挂出的开仓张数,0=不启用 */
+    private Integer tpTriggerOppositeAddQuantity;
+    /** 单格止盈张数:基础仓位止盈挂单时每个网格挂的止盈张数,支持小数,0=不启用 */
+    private BigDecimal baseTakeProfitPerGrid;
+    /** 止盈网格数量:基础仓位止盈挂单的网格数量,0=不启用 */
+    private Integer baseTakeProfitGridCount;
 
     /**
      * 从 GateConfig 构建 DTO(不暴露 apiSecret)。
@@ -103,7 +117,14 @@
                 .addPositionQuantity(config.getAddPositionQuantity())
                 .maxPositionPerSide(config.getMaxPositionPerSide())
                 .addPositionStartThreshold(config.getAddPositionStartThreshold())
-                .placeExcessTakeProfit(config.isPlaceExcessTakeProfit())
+                .placeExcessTakeProfit(config.getPlaceExcessTakeProfit())
+                .dualStopLossEnabled(config.isDualStopLossEnabled())
+                .longStopLossPrice(config.getLongStopLossPrice())
+                .shortStopLossPrice(config.getShortStopLossPrice())
+                .tpTriggerOppositeAddEnabled(config.isTpTriggerOppositeAddEnabled())
+                .tpTriggerOppositeAddQuantity(config.getTpTriggerOppositeAddQuantity())
+                .baseTakeProfitPerGrid(config.getBaseTakeProfitPerGrid())
+                .baseTakeProfitGridCount(config.getBaseTakeProfitGridCount())
                 .build();
     }
 
@@ -131,6 +152,13 @@
         m.put("maxPositionPerSide", maxPositionPerSide);
         m.put("addPositionStartThreshold", addPositionStartThreshold);
         m.put("placeExcessTakeProfit", placeExcessTakeProfit);
+        m.put("dualStopLossEnabled", dualStopLossEnabled);
+        m.put("longStopLossPrice", longStopLossPrice);
+        m.put("shortStopLossPrice", shortStopLossPrice);
+        m.put("tpTriggerOppositeAddEnabled", tpTriggerOppositeAddEnabled);
+        m.put("tpTriggerOppositeAddQuantity", tpTriggerOppositeAddQuantity);
+        m.put("baseTakeProfitPerGrid", baseTakeProfitPerGrid);
+        m.put("baseTakeProfitGridCount", baseTakeProfitGridCount);
         return m;
     }
 
@@ -164,7 +192,14 @@
                 .addPositionQuantity(1)
                 .maxPositionPerSide(0)
                 .addPositionStartThreshold(1)
-                .placeExcessTakeProfit(false)
+                .placeExcessTakeProfit("off")
+                .dualStopLossEnabled(false)
+                .longStopLossPrice(null)
+                .shortStopLossPrice(null)
+                .tpTriggerOppositeAddEnabled(false)
+                .tpTriggerOppositeAddQuantity(0)
+                .baseTakeProfitPerGrid(BigDecimal.ZERO)
+                .baseTakeProfitGridCount(0)
                 .build();
     }
 }

--
Gitblit v1.9.1