From a48f0ecfefc8553f40fa3ea2bd6694e4f525c909 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 03 Jul 2026 21:31:09 +0800
Subject: [PATCH] refactor(gateApi): 优化网格交易服务的止盈逻辑和条件判断
---
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java | 153 +++++++++++++++++++++++++++++++++------------------
1 files changed, 99 insertions(+), 54 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 eaf31cf..6d59571 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -394,23 +394,26 @@
checkProfitAndReset();
- if (state == StrategyState.ACTIVE &&
- longActive == false &&
- longPositionSize.compareTo(BigDecimal.ZERO) == 0){
- processShortGrid(closePrice);
- }
-
-
- if (state == StrategyState.ACTIVE &&
- shortActive == false &&
- shortPositionSize.compareTo(BigDecimal.ZERO) == 0){
- processLongGrid(closePrice);
- }
+// if (state == StrategyState.ACTIVE &&
+// longActive == false &&
+// longPositionSize.compareTo(BigDecimal.ZERO) == 0){
+// processShortGrid(closePrice);
+// }
+//
+//
+// if (state == StrategyState.ACTIVE &&
+// shortActive == false &&
+// shortPositionSize.compareTo(BigDecimal.ZERO) == 0){
+// processLongGrid(closePrice);
+// }
}
/** Gate 永续合约 taker 费率 0.05% */
private static final BigDecimal TAKER_FEE_RATE = new BigDecimal("0.0005");
private void checkProfitAndReset() {
+ if (state == StrategyState.STOPPED || state == StrategyState.WAITING_KLINE) {
+ return;
+ }
try {
BigDecimal target = initialPrincipal.add(config.getExpectedProfit());
@@ -1574,28 +1577,49 @@
furthestSlId = gridId;
interval = 2;
}
- int stopLossCount = filledQty / Integer.parseInt(config.getQuantity());
- log.info("[Gate] 多仓追挂止损, 当前最远止损gridId:{}, 成交{}张, 追加{}个止损单", furthestSlId, filledQty, stopLossCount);
- for (int i = 0; i < stopLossCount; i++) {
- int newSlId = furthestSlId - i - interval;
- GridElement elem = GridElement.findById(newSlId);
- if (elem == null) {
- continue;
- }
- BigDecimal triggerPrice = elem.getGridPrice();
- int finalSlId = newSlId;
- executor.placeTakeProfit(
- triggerPrice,
- FuturesPriceTrigger.RuleEnum.NUMBER_2,
- ORDER_TYPE_CLOSE_LONG,
- negate(config.getQuantity()),
- profitId -> {
- elem.setLongStopLossOrderId(profitId);
- GridElement.refreshIndices();
- log.info("[Gate] 多仓止损追加, gridId:{}, 触发价:{}, stopLossId:{}", finalSlId, triggerPrice, profitId);
- }
- );
+ int stopLossCount = filledQty;
+ log.info("[Gate] 多仓追挂止损, 当前最远止损gridId:{}, 成交{}张, 追加{}张止损单", furthestSlId, filledQty, stopLossCount);
+ int newSlId = furthestSlId - interval;
+ GridElement elem = GridElement.findById(newSlId);
+ if (elem == null) {
+ return;
}
+ BigDecimal triggerPrice = elem.getGridPrice();
+ int finalSlId = newSlId;
+ executor.placeTakeProfit(
+ triggerPrice,
+ FuturesPriceTrigger.RuleEnum.NUMBER_2,
+ ORDER_TYPE_CLOSE_LONG,
+ negate(String.valueOf(stopLossCount)),
+ profitId -> {
+ elem.setLongStopLossOrderId(profitId);
+ GridElement.refreshIndices();
+ log.info("[Gate] 多仓止损追加, gridId:{}, 触发价:{}, stopLossId:{}", finalSlId, triggerPrice, profitId);
+ }
+ );
+
+// int stopLossCount = filledQty / Integer.parseInt(config.getQuantity());
+// log.info("[Gate] 多仓追挂止损, 当前最远止损gridId:{}, 成交{}张, 追加{}个止损单", furthestSlId, filledQty, stopLossCount);
+// for (int i = 0; i < stopLossCount; i++) {
+// int newSlId = furthestSlId - i - interval;
+// GridElement elem = GridElement.findById(newSlId);
+// if (elem == null) {
+// continue;
+// }
+// BigDecimal triggerPrice = elem.getGridPrice();
+// int finalSlId = newSlId;
+// executor.placeTakeProfit(
+// triggerPrice,
+// FuturesPriceTrigger.RuleEnum.NUMBER_2,
+// ORDER_TYPE_CLOSE_LONG,
+// negate(config.getQuantity()),
+// profitId -> {
+// elem.setLongStopLossOrderId(profitId);
+// GridElement.refreshIndices();
+// log.info("[Gate] 多仓止损追加, gridId:{}, 触发价:{}, stopLossId:{}", finalSlId, triggerPrice, profitId);
+// }
+// );
+// }
}
private void extendShortStopLoss(int filledQty, int gridId) {
@@ -1611,28 +1635,49 @@
furthestSlId = gridId;
interval = 2;
}
- int stopLossCount = filledQty / Integer.parseInt(config.getQuantity());
- log.info("[Gate] 空仓追挂止损, 当前最远止损gridId:{}, 成交{}张, 追加{}个止损单", furthestSlId, filledQty, stopLossCount);
- for (int i = 0; i < stopLossCount; i++) {
- int newSlId = furthestSlId + i + interval;
- GridElement elem = GridElement.findById(newSlId);
- if (elem == null) {
- continue;
- }
- BigDecimal triggerPrice = elem.getGridPrice();
- int finalSlId = newSlId;
- executor.placeTakeProfit(
- triggerPrice,
- FuturesPriceTrigger.RuleEnum.NUMBER_1,
- ORDER_TYPE_CLOSE_SHORT,
- config.getQuantity(),
- profitId -> {
- elem.setShortStopLossOrderId(profitId);
- GridElement.refreshIndices();
- log.info("[Gate] 空仓止损追加, gridId:{}, 触发价:{}, stopLossId:{}", finalSlId, triggerPrice, profitId);
- }
- );
+ int stopLossCount = filledQty ;
+ log.info("[Gate] 空仓追挂止损, 当前最远止损gridId:{}, 成交{}张, 追加{}张止损单", furthestSlId, filledQty, stopLossCount);
+ int newSlId = furthestSlId + interval;
+ GridElement elem = GridElement.findById(newSlId);
+ if (elem == null) {
+ return;
}
+ BigDecimal triggerPrice = elem.getGridPrice();
+ int finalSlId = newSlId;
+ executor.placeTakeProfit(
+ triggerPrice,
+ FuturesPriceTrigger.RuleEnum.NUMBER_1,
+ ORDER_TYPE_CLOSE_SHORT,
+ String.valueOf(stopLossCount),
+ profitId -> {
+ elem.setShortStopLossOrderId(profitId);
+ GridElement.refreshIndices();
+ log.info("[Gate] 空仓止损追加, gridId:{}, 触发价:{}, stopLossId:{}", finalSlId, triggerPrice, profitId);
+ }
+ );
+
+// int stopLossCount = filledQty / Integer.parseInt(config.getQuantity());
+// log.info("[Gate] 空仓追挂止损, 当前最远止损gridId:{}, 成交{}张, 追加{}个止损单", furthestSlId, filledQty, stopLossCount);
+// for (int i = 0; i < stopLossCount; i++) {
+// int newSlId = furthestSlId + i + interval;
+// GridElement elem = GridElement.findById(newSlId);
+// if (elem == null) {
+// continue;
+// }
+// BigDecimal triggerPrice = elem.getGridPrice();
+// int finalSlId = newSlId;
+// executor.placeTakeProfit(
+// triggerPrice,
+// FuturesPriceTrigger.RuleEnum.NUMBER_1,
+// ORDER_TYPE_CLOSE_SHORT,
+// config.getQuantity(),
+// profitId -> {
+// elem.setShortStopLossOrderId(profitId);
+// GridElement.refreshIndices();
+// log.info("[Gate] 空仓止损追加, gridId:{}, 触发价:{}, stopLossId:{}", finalSlId, triggerPrice, profitId);
+// }
+// );
+// }
}
// ---- 工具 ----
--
Gitblit v1.9.1