Administrator
2026-06-17 605ad02775830168f4cf989b705c02d78709155d
fix(gateApi): 解决网格交易止损重复下单问题

- 添加检查防止与"仓位归零"功能重复下单
- 当网格已有挂单时跳过止损订单创建
- 添加警告日志记录重复下单情况
- 修复多仓和空仓止损逻辑的一致性问题
1 files modified
13 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -1127,6 +1127,8 @@
            return;
        }
        // [Gate-BugFix] 防止与"仓位归零"重复下单:若该网格已有挂单则跳过
        if (!newEntryGrid.isHasLongOrder()) {
        BigDecimal triggerPrice = newEntryGrid.getGridPrice();
        // 累计止损张数 + 当前止损量作为追单size,不再依赖positionSize(避免WS竞态)
@@ -1138,7 +1140,9 @@
        newEntryGrid.getLongTraderParam().setQuantity(size);
        placeEntryOrderWithPreFlag(newEntryGrid, true, triggerPrice,
                FuturesPriceTrigger.RuleEnum.NUMBER_1, size);
        }else{
            log.warn("[Gate] 多仓止损触发 gridId:{}, 目标gridId:{}已有挂单,跳过重复下单", gridId, newEntryGridId);
        }
        int cancelGridId = gridId + 2;
        GridElement cancelGrid = GridElement.findById(cancelGridId);
@@ -1182,6 +1186,8 @@
            return;
        }
        // [Gate-BugFix] 防止与"仓位归零"重复下单:若该网格已有挂单则跳过
        if (!newEntryGrid.isHasShortOrder()) {
        BigDecimal triggerPrice = newEntryGrid.getGridPrice();
        // 累计止损张数 + 当前止损量作为追单size,不再依赖positionSize(避免WS竞态)
@@ -1192,6 +1198,11 @@
        newEntryGrid.getShortTraderParam().setQuantity(size);
        placeEntryOrderWithPreFlag(newEntryGrid, false, triggerPrice,
                FuturesPriceTrigger.RuleEnum.NUMBER_2, negate(size));
        }else{
            log.warn("[Gate] 空仓止损触发 gridId:{}, 目标gridId:{}已有挂单,跳过重复下单", gridId, newEntryGridId);
        }
        int cancelGridId = gridId - 2;