From 7ed8803323da91516b0eacb49664e4658745d228 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 23 Sep 2026 18:01:55 +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