Administrator
2026-05-26 1b5c1005f3b46e60cbf08d5ae7924b23765084eb
fix(gateApi): 修复网格交易中多空仓位订单取消逻辑错误

- 修正了多仓位线以上取消订单的判断条件,将取消开空仓改为取消开多仓
- 修正了订单ID获取方法,将shortOrderId改为longOrderId
- 修正了交易员ID参数传递,将shortEntryTraderIdParam改为longEntryTraderIdParam
- 修正了止盈订单取消逻辑,将ShortTakeProfitOrderId改为LongTakeProfitOrderId
- 修正了空仓仓位线下取消订单的判断条件,将取消开多仓改为取消开空仓
- 修正了findAllLongOrders方法中的条件判断,将isHasLongOrder改为isHasShortOrder
- 修正了findAllShortOrders方法中的条件判断,将isHasShortOrder改为isHasLongOrder
2 files modified
28 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 24 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GridElement.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -426,14 +426,14 @@
                    tryGenerateQueues();
                }else {
                    longPositionSize = size;
                    //取消多仓位线以上的开空仓挂单
                    //取消多仓位线以上的开多仓挂单
                    List<GridElement> allShortOrders = GridElement.findAllShortOrders(longEntryPrice);
                    if (CollUtil.isNotEmpty(allShortOrders)){
                        for (GridElement e : allShortOrders) {
                            executor.cancelConditionalOrder(
                                    e.getShortOrderId(),
                                    e.getLongOrderId(),
                                    orderId -> {
                                        shortEntryTraderIdParam(
                                        longEntryTraderIdParam(
                                                e,
                                                null,
                                                false
@@ -441,11 +441,11 @@
                                    }
                            );
                            if (e.getShortTakeProfitOrderId() != null){
                            if (e.getLongTakeProfitOrderId() != null){
                                executor.cancelConditionalOrder(
                                        e.getShortTakeProfitOrderId(),
                                        e.getLongTakeProfitOrderId(),
                                        orderId -> {
                                            shortTakeProfitTraderIdParam(
                                            longTakeProfitTraderIdParam(
                                                    e,
                                                    null,
                                                    false
@@ -472,25 +472,25 @@
                    tryGenerateQueues();
                }else {
                    shortPositionSize = size.abs();
                    //取消空仓仓位线以下的开多仓挂单
                    //取消空仓仓位线以下的开空仓挂单
                    List<GridElement> allLongOrders = GridElement.findAllLongOrders(shortEntryPrice);
                    if (CollUtil.isNotEmpty(allLongOrders)){
                        for (GridElement e : allLongOrders) {
                            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
src/main/java/com/xcong/excoin/modules/gateApi/GridElement.java
@@ -248,7 +248,7 @@
    public static List<GridElement> findAllLongOrders(BigDecimal currentPrice) {
        List<GridElement> result = new ArrayList<>();
        for (GridElement e : INDEX.values()) {
            if (e.isHasLongOrder() && e.getGridPrice().compareTo(currentPrice) < 0) {
            if (e.isHasShortOrder() && e.getGridPrice().compareTo(currentPrice) < 0) {
                result.add(e);
            }
        }
@@ -264,7 +264,7 @@
    public static List<GridElement> findAllShortOrders(BigDecimal currentPrice) {
        List<GridElement> result = new ArrayList<>();
        for (GridElement e : INDEX.values()) {
            if (e.isHasShortOrder() && e.getGridPrice().compareTo(currentPrice) > 0) {
            if (e.isHasLongOrder() && e.getGridPrice().compareTo(currentPrice) > 0) {
                result.add(e);
            }
        }