Administrator
2026-05-18 72f1acf6b3430c37ac6d4b64e6ac07b6786a908d
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -1,5 +1,6 @@
package com.xcong.excoin.modules.gateApi;
import cn.hutool.core.collection.CollUtil;
import io.gate.gateapi.ApiClient;
import io.gate.gateapi.ApiException;
import io.gate.gateapi.GateApiException;
@@ -432,6 +433,13 @@
                    tryGenerateQueues();
                }else {
                    longPositionSize = size;
                    //取消多仓位线以上的开空仓挂单
                    List<GridElement> allShortOrders = GridElement.findAllShortOrders(longEntryPrice);
                    if (CollUtil.isNotEmpty(allShortOrders)){
                        for (GridElement e : allShortOrders) {
                            executor.cancelOrder(e.getShortOrderId());
                        }
                    }
                }
            } else {
                longActive = false;
@@ -449,6 +457,13 @@
                    tryGenerateQueues();
                }else {
                    shortPositionSize = size.abs();
                    //取消多仓位线以上的开空仓挂单
                    List<GridElement> allLongOrders = GridElement.findAllLongOrders(shortEntryPrice);
                    if (CollUtil.isNotEmpty(allLongOrders)){
                        for (GridElement e : allLongOrders) {
                            executor.cancelOrder(e.getShortOrderId());
                        }
                    }
                }
            } else {
                shortActive = false;
@@ -911,7 +926,7 @@
        List<BigDecimal> matched = new ArrayList<>();
        synchronized (shortPriceQueue) {
            for (BigDecimal p : shortPriceQueue) {
                if (p.compareTo(currentPrice) > 0) {
                if (p.compareTo(currentPrice) >= 0) {
                    matched.add(p);
                } else {
                    break;
@@ -993,7 +1008,7 @@
            if (downGridElement != null){
                TraderParam downLongTraderParam = downGridElement.getLongTraderParam();
                if (!downGridElement.isHasShortOrder()){
                if (!downGridElement.isHasLongOrder()){
                    executor.placeConditionalEntryOrder(
                            downLongTraderParam.getEntryPrice(),
                            FuturesPriceTrigger.RuleEnum.NUMBER_1,
@@ -1014,6 +1029,7 @@
                BigDecimal downGridPrice = downGridElement.getGridPrice();
                if (
                        !downGridElement.isHasShortOrder() &&
                                downGridPrice.compareTo(currentPrice) < 0 &&
                                downGridPrice.compareTo(longEntryPrice) <= 0 &&
                                downGridPrice.compareTo(shortEntryPrice) >= 0
                ){
@@ -1068,7 +1084,7 @@
        List<BigDecimal> matched = new ArrayList<>();
        synchronized (longPriceQueue) {
            for (BigDecimal p : longPriceQueue) {
                if (p.compareTo(currentPrice) < 0) {
                if (p.compareTo(currentPrice) <= 0) {
                    matched.add(p);
                } else {
                    break;
@@ -1175,6 +1191,7 @@
                BigDecimal downGridPrice = downGridElement.getGridPrice();
                if (
                        !downGridElement.isHasLongOrder() &&
                                downGridPrice.compareTo(currentPrice) > 0 &&
                                downGridPrice.compareTo(longEntryPrice) <= 0 &&
                                downGridPrice.compareTo(shortEntryPrice) >= 0
                ){