fix(gateApi): 设置初始订单为仅减仓模式
- 在GateGridTradeService中为初始订单添加reduceOnly参数设置
- 将初始订单的reduceOnly属性设为true以确保仅执行减仓操作
- 防止初始订单意外增加仓位的风险
| | |
| | | private void placeLongTpSl(BigDecimal entryPrice) { |
| | | BigDecimal tpPrice = entryPrice.multiply(BigDecimal.ONE.add(gridRate)).setScale(1, RoundingMode.HALF_UP); |
| | | BigDecimal slPrice = entryPrice.multiply(BigDecimal.ONE.subtract(gridRate)).setScale(1, RoundingMode.HALF_UP); |
| | | longTpOrderId = placePriceTriggeredOrder(tpPrice, FuturesPriceTrigger.RuleEnum.NUMBER_1, "close_long"); |
| | | longSlOrderId = placePriceTriggeredOrder(slPrice, FuturesPriceTrigger.RuleEnum.NUMBER_2, "close_long"); |
| | | longTpOrderId = placePriceTriggeredOrder(tpPrice, FuturesPriceTrigger.RuleEnum.NUMBER_1, "close-long-position", "close_long"); |
| | | longSlOrderId = placePriceTriggeredOrder(slPrice, FuturesPriceTrigger.RuleEnum.NUMBER_2, "close-long-position", "close_long"); |
| | | log.info("[GateGrid] 多头TP/SL已设置, TP:{}, SL:{}, tpId:{}, slId:{}", tpPrice, slPrice, longTpOrderId, longSlOrderId); |
| | | } |
| | | |
| | | private void placeShortTpSl(BigDecimal entryPrice) { |
| | | BigDecimal tpPrice = entryPrice.multiply(BigDecimal.ONE.subtract(gridRate)).setScale(1, RoundingMode.HALF_UP); |
| | | BigDecimal slPrice = entryPrice.multiply(BigDecimal.ONE.add(gridRate)).setScale(1, RoundingMode.HALF_UP); |
| | | shortTpOrderId = placePriceTriggeredOrder(tpPrice, FuturesPriceTrigger.RuleEnum.NUMBER_2, "close_short"); |
| | | shortSlOrderId = placePriceTriggeredOrder(slPrice, FuturesPriceTrigger.RuleEnum.NUMBER_1, "close_short"); |
| | | shortTpOrderId = placePriceTriggeredOrder(tpPrice, FuturesPriceTrigger.RuleEnum.NUMBER_2, "close-short-position", "close_short"); |
| | | shortSlOrderId = placePriceTriggeredOrder(slPrice, FuturesPriceTrigger.RuleEnum.NUMBER_1, "close-short-position", "close_short"); |
| | | log.info("[GateGrid] 空头TP/SL已设置, TP:{}, SL:{}, tpId:{}, slId:{}", tpPrice, slPrice, shortTpOrderId, shortSlOrderId); |
| | | } |
| | | |
| | | private Long placePriceTriggeredOrder(BigDecimal triggerPrice, |
| | | FuturesPriceTrigger.RuleEnum rule, |
| | | String orderType, |
| | | String autoSize) { |
| | | try { |
| | | FuturesPriceTrigger trigger = new FuturesPriceTrigger(); |
| | |
| | | FuturesPriceTriggeredOrder order = new FuturesPriceTriggeredOrder(); |
| | | order.setTrigger(trigger); |
| | | order.setInitial(initial); |
| | | order.setOrderType(orderType); |
| | | |
| | | TriggerOrderResponse response = futuresApi.createPriceTriggeredOrder(SETTLE, order); |
| | | log.info("[GateGrid] 条件单已创建, triggerPrice:{}, rule:{}, autoSize:{}, id:{}", |
| | | triggerPrice, rule, autoSize, response.getId()); |
| | | log.info("[GateGrid] 条件单已创建, triggerPrice:{}, rule:{}, orderType:{}, autoSize:{}, id:{}", |
| | | triggerPrice, rule, orderType, autoSize, response.getId()); |
| | | return response.getId(); |
| | | } catch (Exception e) { |
| | | log.error("[GateGrid] 创建条件单失败, triggerPrice:{}, rule:{}, autoSize:{}", |
| | | triggerPrice, rule, autoSize, e); |
| | | log.error("[GateGrid] 创建条件单失败, triggerPrice:{}, rule:{}, orderType:{}, autoSize:{}", |
| | | triggerPrice, rule, orderType, autoSize, e); |
| | | return null; |
| | | } |
| | | } |