From a6ce2fc8ea54744bdcdc976e8a54c7c1af2172a2 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 01 Jun 2026 13:02:16 +0800
Subject: [PATCH] fix(gateApi): 修复网格交易止损逻辑中的订单数量计算问题
---
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java | 24 ++++++++++++++++--------
1 files changed, 16 insertions(+), 8 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 41cb69e..1f1dd41 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -1357,7 +1357,6 @@
log.info("[Gate] 多仓止损触发 gridId:{}, 开始追单", gridId);
int newEntryGridId = -(N - 1);
- int entryQty = N - 1;
GridElement newEntryGrid = GridElement.findById(newEntryGridId);
if (newEntryGrid == null) {
@@ -1377,12 +1376,16 @@
}
}
- String size = String.valueOf(entryQty);
BigDecimal triggerPrice = newEntryGrid.getGridPrice();
- log.info("[Gate] 多仓止损触发 gridId:{}, 在gridId:{}挂{}张多单", gridId, newEntryGridId, entryQty);
+ BigDecimal priceDiff = longEntryPrice.subtract(triggerPrice).abs();
+ int entryQty = priceDiff.divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
+ entryQty = Math.max(1, entryQty);
+ String size = String.valueOf(entryQty);
+ log.info("[Gate] 多仓止损触发 gridId:{}, 在gridId:{}挂{}张多单, 均价:{}, 价差:{}, 步长:{}",
+ gridId, newEntryGridId, entryQty, longEntryPrice, priceDiff, config.getStep());
newEntryGrid.getLongTraderParam().setQuantity(size);
placeEntryOrderWithPreFlag(newEntryGrid, true, triggerPrice,
- FuturesPriceTrigger.RuleEnum.NUMBER_2, size);
+ FuturesPriceTrigger.RuleEnum.NUMBER_1, size);
}
private void handleShortStopLossTriggered(GridElement gridElement) {
@@ -1392,7 +1395,6 @@
log.info("[Gate] 空仓止损触发 gridId:{}, 开始追单", gridId);
int newEntryGridId = N - 1;
- int entryQty = N - 1;
GridElement newEntryGrid = GridElement.findById(newEntryGridId);
if (newEntryGrid == null) {
@@ -1412,12 +1414,18 @@
}
}
- String size = String.valueOf(entryQty);
+
+
BigDecimal triggerPrice = newEntryGrid.getGridPrice();
- log.info("[Gate] 空仓止损触发 gridId:{}, 在gridId:{}挂{}张空单", gridId, newEntryGridId, entryQty);
+ BigDecimal priceDiff = shortEntryPrice.subtract(triggerPrice).abs();
+ int entryQty = priceDiff.divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
+ entryQty = Math.max(1, entryQty);
+ String size = String.valueOf(entryQty);
+ log.info("[Gate] 空仓止损触发 gridId:{}, 在gridId:{}挂{}张空单, 均价:{}, 价差:{}, 步长:{}",
+ gridId, newEntryGridId, entryQty, shortEntryPrice, priceDiff, config.getStep());
newEntryGrid.getShortTraderParam().setQuantity(size);
placeEntryOrderWithPreFlag(newEntryGrid, false, triggerPrice,
- FuturesPriceTrigger.RuleEnum.NUMBER_1, negate(size));
+ FuturesPriceTrigger.RuleEnum.NUMBER_2, negate(size));
}
private void extendLongStopLoss(int filledQty) {
--
Gitblit v1.9.1