From 9538868dd00706751436183618f4bbe55ccd12dd Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 23 Sep 2026 18:00:01 +0800
Subject: [PATCH] fix(gateApi): 解决止损追单时持仓查询缓存竞态问题

---
 src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java |    8 +++++---
 1 files changed, 5 insertions(+), 3 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 fb124ab..7054377 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -1652,10 +1652,12 @@
         if (maxPerSide > 0) {
             int upperLimit = maxPerSide;
             if (respectCurrentPosition) {
-                // 止损追单:单边总持仓不得超过 maxPerSide,追单量 = maxPerSide - 当前持仓
+                // 止损追单:单边总持仓不得超过 maxPerSide,追单量 = maxPerSide - 当前持仓。
+                // 止损单刚成交、WS 持仓推送尚未到达,必须用 REST 实时查询绕过 WS 缓存时序竞态,
+                // 否则会取到滞后的旧持仓(如止损前仍为 10),把追单量错误扣减。
                 int currentPos = isLong
-                        ? Math.max(queryPositionSize(Position.ModeEnum.DUAL_LONG), longPositionSize.intValue())
-                        : Math.max(queryPositionSize(Position.ModeEnum.DUAL_SHORT), shortPositionSize.intValue());
+                        ? queryPositionSize(Position.ModeEnum.DUAL_LONG)
+                        : queryPositionSize(Position.ModeEnum.DUAL_SHORT);
                 upperLimit = maxPerSide - currentPos;
             }
             if (upperLimit <= 0) {

--
Gitblit v1.9.1