Administrator
13 hours ago 74b783849f87a72440f9453f432507600f54ddad
feat(gateApi): 网格初始化的止盈单

- 实现多仓止盈订单挂单功能,止盈挂在ID=3位置
- 实现空仓止盈订单挂单功能,止盈挂在ID=-3位置
- 集成止盈价格触发器和订单执行逻辑
- 更新网格元素索引以包含新的止盈订单
- 修改日志信息以反映止盈订单的挂单状态
- 优化止损止盈订单完成的日志输出格式
1 files modified
40 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -816,6 +816,43 @@
            baseGridElement.setShortOrderId(baseShortTraderParam.getEntryOrderId());
            baseGridElement.setHasShortOrder(true);
            // 空仓止损对应的多仓止盈:多仓止盈挂在ID=3
            int tpGridIdLong = 3;
            GridElement tpElemLong = GridElement.findById(tpGridIdLong);
            BigDecimal triggerPriceLong = tpElemLong.getGridPrice();
            String sizeLong = config.getQuantity();
            executor.placeTakeProfit(
                    triggerPriceLong,
                    FuturesPriceTrigger.RuleEnum.NUMBER_1,
                    ORDER_TYPE_CLOSE_LONG,
                    negate(sizeLong),
                    profitId -> {
                        tpElemLong.setLongTakeProfitOrderId(profitId);
                        GridElement.refreshIndices();
                        log.info("[Gate] 多仓止盈已挂(gridId:{}多止盈), 触发价:{}, takeProfitId:{}",
                                tpGridIdLong, triggerPriceLong, profitId);
                    }
            );
            // 多仓止损对应的空仓止盈:空仓止盈挂在ID=-3
            int tpGridIdShort = -3;
            GridElement tpElemShort = GridElement.findById(tpGridIdShort);
            BigDecimal triggerPriceShort = tpElemShort.getGridPrice();
            String sizeShort = config.getQuantity();
            executor.placeTakeProfit(
                    triggerPriceShort,
                    FuturesPriceTrigger.RuleEnum.NUMBER_2,
                    ORDER_TYPE_CLOSE_SHORT,
                    sizeShort,
                    profitId -> {
                        tpElemShort.setShortTakeProfitOrderId(profitId);
                        GridElement.refreshIndices();
                        log.info("[Gate] 空仓止盈已挂(gridId:{}空止盈), 触发价:{}, takeProfitId:{}",
                                tpGridIdShort, triggerPriceShort, profitId);
                    }
            );
//            int shortTime = 2;
//            GridElement elemShort = GridElement.findById(shortTime);
//            if (elemShort != null) {
@@ -876,6 +913,7 @@
            }
            int longTime = Integer.parseInt(config.getBaseQuantity()) / Integer.parseInt(config.getQuantity()) + 1;
            for (int id = -2; id >= -longTime; id--) {
                GridElement elem = GridElement.findById(id);
@@ -898,7 +936,7 @@
                );
            }
            log.info("[Gate] 止损单已全部挂完, 空仓止损: 2~{}, 多仓止损: -2~-{}", shortTime, longTime);
            log.info("[Gate] 止损止盈单已全部挂完, 空仓止损:2~{}, 多仓止损:-2~-{}", shortTime, longTime);
            state = StrategyState.ACTIVE;
        }