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