From fe567e81a50a00beb1a26f70e69e923ecb3d6bb3 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 26 May 2026 10:25:16 +0800
Subject: [PATCH] fix(grid): 修复网格交易中多空订单查找逻辑错误

---
 src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java |   38 ++++++++++++++++++++++++--------------
 1 files changed, 24 insertions(+), 14 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 04a4108..71dbafd 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -426,14 +426,19 @@
                     tryGenerateQueues();
                 }else {
                     longPositionSize = size;
-                    //取消多仓位线以上的开空仓挂单
-                    List<GridElement> allShortOrders = GridElement.findAllShortOrders(longEntryPrice);
+                    List<GridElement> allShortOrders = GridElement.findAllLongOrders(longEntryPrice);
                     if (CollUtil.isNotEmpty(allShortOrders)){
+                        GridElement keep = allShortOrders.stream()
+                                .max((a, b) -> a.getGridPrice().compareTo(b.getGridPrice()))
+                                .orElse(null);
                         for (GridElement e : allShortOrders) {
+                            if (e == keep) {
+                                continue;
+                            }
                             executor.cancelConditionalOrder(
-                                    e.getShortOrderId(),
+                                    e.getLongOrderId(),
                                     orderId -> {
-                                        shortEntryTraderIdParam(
+                                        longEntryTraderIdParam(
                                                 e,
                                                 null,
                                                 false
@@ -441,11 +446,11 @@
                                     }
                             );
 
-                            if (e.getShortTakeProfitOrderId() != null){
+                            if (e.getLongTakeProfitOrderId() != null){
                                 executor.cancelConditionalOrder(
-                                        e.getShortTakeProfitOrderId(),
+                                        e.getLongTakeProfitOrderId(),
                                         orderId -> {
-                                            shortTakeProfitTraderIdParam(
+                                            longTakeProfitTraderIdParam(
                                                     e,
                                                     null,
                                                     false
@@ -472,25 +477,30 @@
                     tryGenerateQueues();
                 }else {
                     shortPositionSize = size.abs();
-                    //取消空仓仓位线以下的开多仓挂单
-                    List<GridElement> allLongOrders = GridElement.findAllLongOrders(shortEntryPrice);
+                    List<GridElement> allLongOrders = GridElement.findAllShortOrders(shortEntryPrice);
                     if (CollUtil.isNotEmpty(allLongOrders)){
+                        GridElement keep = allLongOrders.stream()
+                                .min((a, b) -> a.getGridPrice().compareTo(b.getGridPrice()))
+                                .orElse(null);
                         for (GridElement e : allLongOrders) {
+                            if (e == keep) {
+                                continue;
+                            }
                             executor.cancelConditionalOrder(
-                                    e.getLongOrderId(),
+                                    e.getShortOrderId(),
                                     orderId -> {
-                                        longEntryTraderIdParam(
+                                        shortEntryTraderIdParam(
                                                 e,
                                                 null,
                                                 false
                                         );
                                     }
                             );
-                            if (e.getLongTakeProfitOrderId() != null){
+                            if (e.getShortTakeProfitOrderId() != null){
                                 executor.cancelConditionalOrder(
-                                        e.getLongTakeProfitOrderId(),
+                                        e.getShortTakeProfitOrderId(),
                                         orderId -> {
-                                            longTakeProfitTraderIdParam(
+                                            shortTakeProfitTraderIdParam(
                                                     e,
                                                     null,
                                                     false

--
Gitblit v1.9.1