Administrator
2026-07-14 1994a2ebcbc5924d827f41dc9bd35bb313af2b66
fix(gateApi): 修复网格交易止损追单逻辑

- 空单成交时重置止损追单计数
- 多单成交时重置止损追单计数
- 重构目标数量计算逻辑,使用基础数量和网格数量替代原有条件判断
- 移除过时的数量计算条件分支代码
- 统一长短仓的目标数量计算方式
1 files modified
20 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -627,6 +627,7 @@
            if (StrUtil.isNotEmpty(tradeId) && !tradeId.equals("0") ){
                int filledQty = Integer.parseInt(shortGridElement.getShortTraderParam().getQuantity());
                shortEntryTraderIdParam(shortGridElement, orderId, false);
                accumulatedShortLossCount = 0; // 空单成交,重置止损追单计数
                // [Gate-需求2] 加仓后先撤空仓所有止盈+止损,再查交易所持仓后重挂
                cancelAllShortTakeProfitsAndStopLosses();
                // REST 查询可能因交易所延迟返回旧值,与 WS 本地缓存取最大值兜底
@@ -704,6 +705,7 @@
                int filledQty = Integer.parseInt(longGridElement.getLongTraderParam().getQuantity());
                longEntryTraderIdParam(longGridElement, orderId, false);
                accumulatedLongLossCount = 0; // 多单成交,重置止损追单计数
                // [Gate-需求2] 加仓后先撤多仓所有止盈+止损,再查交易所持仓后重挂
                cancelAllLongTakeProfitsAndStopLosses();
                // REST 查询可能因交易所延迟返回旧值,与 WS 本地缓存取最大值兜底
@@ -1322,12 +1324,9 @@
        BigDecimal triggerPrice = newEntryGrid.getGridPrice();
        int posSize = Math.min(queryPositionSize(Position.ModeEnum.DUAL_LONG), longPositionSize.intValue());
        int maxPos = config.getMaxPositionSize();
        int targetAmount;
        if (config.getStopLossCount() > 0 && accumulatedLongLossCount <= config.getStopLossCount()) {
            targetAmount = Integer.parseInt(config.getQuantity());
        } else {
            targetAmount = Integer.parseInt(config.getQuantity()) * 2;
        }
        int baseQty = Integer.parseInt(config.getBaseQuantity());
        int gridQty = Integer.parseInt(config.getQuantity());
        int targetAmount = baseQty + (accumulatedLongLossCount - 1) * gridQty;
        int addSize;
        if (maxPos > 0) {
            int remainingRoom = maxPos - posSize;
@@ -1400,12 +1399,9 @@
        BigDecimal triggerPrice = newEntryGrid.getGridPrice();
        int posSize = Math.min(queryPositionSize(Position.ModeEnum.DUAL_SHORT), shortPositionSize.intValue());
        int maxPos = config.getMaxPositionSize();
        int targetAmount;
        if (config.getStopLossCount() > 0 && accumulatedShortLossCount <= config.getStopLossCount()) {
            targetAmount = Integer.parseInt(config.getQuantity());
        } else {
            targetAmount = Integer.parseInt(config.getQuantity()) * 2;
        }
        int baseQty = Integer.parseInt(config.getBaseQuantity());
        int gridQty = Integer.parseInt(config.getQuantity());
        int targetAmount = baseQty + (accumulatedShortLossCount - 1) * gridQty;
        int addSize;
        if (maxPos > 0) {
            int remainingRoom = maxPos - posSize;