Administrator
4 days ago 86ae242fb0f0c39021b5d35d90487e64eea8e056
fix(gateApi): 解决交易所持仓查询延迟导致的持仓数量错误问题

- 在空单加仓后查询持仓时,REST查询与WS本地缓存取最大值进行兜底
- 在多单加仓后查询持仓时,REST查询与WS本地缓存取最大值进行兜底
- 防止因交易所延迟返回旧值导致的持仓数量计算错误
- 确保止盈止损订单能够基于正确的持仓数量进行重挂
1 files modified
6 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -638,7 +638,8 @@
                shortEntryTraderIdParam(shortGridElement, null, false);
                // [Gate-需求2] 加仓后先撤空仓所有止盈+止损,再查交易所持仓后重挂
                cancelAllShortTakeProfitsAndStopLosses();
                int posSize = queryPositionSize(Position.ModeEnum.DUAL_SHORT);
                // REST 查询可能因交易所延迟返回旧值,与 WS 本地缓存取最大值兜底
                int posSize = Math.max(queryPositionSize(Position.ModeEnum.DUAL_SHORT), shortPositionSize.intValue());
                extendShortStopLoss(posSize, shortGridElement.getId());
                accumulatedShortLossCount = 0; // 加仓订单成交,重置止损累计
                log.info("[Gate] 空单成交 gridId:{}, 当前持仓:{}张", filledQty, posSize);
@@ -680,7 +681,8 @@
                longEntryTraderIdParam(longGridElement, null, false);
                // [Gate-需求2] 加仓后先撤多仓所有止盈+止损,再查交易所持仓后重挂
                cancelAllLongTakeProfitsAndStopLosses();
                int posSize = queryPositionSize(Position.ModeEnum.DUAL_LONG);
                // REST 查询可能因交易所延迟返回旧值,与 WS 本地缓存取最大值兜底
                int posSize = Math.max(queryPositionSize(Position.ModeEnum.DUAL_LONG), longPositionSize.intValue());
                extendLongStopLoss(posSize, longGridElement.getId());
                accumulatedLongLossCount = 0; // 加仓订单成交,重置止损累计
                log.info("[Gate] 多单成交 gridId:{}, 当前持仓:{}张", filledQty, posSize);