From a6ce2fc8ea54744bdcdc976e8a54c7c1af2172a2 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 01 Jun 2026 13:02:16 +0800
Subject: [PATCH] fix(gateApi): 修复网格交易止损逻辑中的订单数量计算问题

---
 src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java |   24 ++++++++++++++++--------
 1 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
index 41cb69e..1f1dd41 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -1357,7 +1357,6 @@
         log.info("[Gate] 多仓止损触发 gridId:{}, 开始追单", gridId);
 
         int newEntryGridId = -(N - 1);
-        int entryQty = N - 1;
 
         GridElement newEntryGrid = GridElement.findById(newEntryGridId);
         if (newEntryGrid == null) {
@@ -1377,12 +1376,16 @@
             }
         }
 
-        String size = String.valueOf(entryQty);
         BigDecimal triggerPrice = newEntryGrid.getGridPrice();
-        log.info("[Gate] 多仓止损触发 gridId:{}, 在gridId:{}挂{}张多单", gridId, newEntryGridId, entryQty);
+        BigDecimal priceDiff = longEntryPrice.subtract(triggerPrice).abs();
+        int entryQty = priceDiff.divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
+        entryQty = Math.max(1, entryQty);
+        String size = String.valueOf(entryQty);
+        log.info("[Gate] 多仓止损触发 gridId:{}, 在gridId:{}挂{}张多单, 均价:{}, 价差:{}, 步长:{}",
+                gridId, newEntryGridId, entryQty, longEntryPrice, priceDiff, config.getStep());
         newEntryGrid.getLongTraderParam().setQuantity(size);
         placeEntryOrderWithPreFlag(newEntryGrid, true, triggerPrice,
-                FuturesPriceTrigger.RuleEnum.NUMBER_2, size);
+                FuturesPriceTrigger.RuleEnum.NUMBER_1, size);
     }
 
     private void handleShortStopLossTriggered(GridElement gridElement) {
@@ -1392,7 +1395,6 @@
         log.info("[Gate] 空仓止损触发 gridId:{}, 开始追单", gridId);
 
         int newEntryGridId = N - 1;
-        int entryQty = N - 1;
 
         GridElement newEntryGrid = GridElement.findById(newEntryGridId);
         if (newEntryGrid == null) {
@@ -1412,12 +1414,18 @@
             }
         }
 
-        String size = String.valueOf(entryQty);
+
+
         BigDecimal triggerPrice = newEntryGrid.getGridPrice();
-        log.info("[Gate] 空仓止损触发 gridId:{}, 在gridId:{}挂{}张空单", gridId, newEntryGridId, entryQty);
+        BigDecimal priceDiff = shortEntryPrice.subtract(triggerPrice).abs();
+        int entryQty = priceDiff.divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
+        entryQty = Math.max(1, entryQty);
+        String size = String.valueOf(entryQty);
+        log.info("[Gate] 空仓止损触发 gridId:{}, 在gridId:{}挂{}张空单, 均价:{}, 价差:{}, 步长:{}",
+                gridId, newEntryGridId, entryQty, shortEntryPrice, priceDiff, config.getStep());
         newEntryGrid.getShortTraderParam().setQuantity(size);
         placeEntryOrderWithPreFlag(newEntryGrid, false, triggerPrice,
-                FuturesPriceTrigger.RuleEnum.NUMBER_1, negate(size));
+                FuturesPriceTrigger.RuleEnum.NUMBER_2, negate(size));
     }
 
     private void extendLongStopLoss(int filledQty) {

--
Gitblit v1.9.1