From 8e39888664499d524bed90909334f22ef11ec68e Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 16 Jun 2026 13:39:26 +0800
Subject: [PATCH] feat(gateApi): 添加网格交易累计止损功能
---
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java | 27 +++++++++++++++------------
1 files changed, 15 insertions(+), 12 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 93c14be..cbd6694 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -134,6 +134,11 @@
/** 多头是否活跃(有仓位) */
private volatile boolean longActive = false;
+ /** 多头累计止损张数(加仓订单成交后归零) */
+ private volatile int accumulatedLongLossCount = 0;
+ /** 空头累计止损张数(加仓订单成交后归零) */
+ private volatile int accumulatedShortLossCount = 0;
+
private volatile BigDecimal lastKlinePrice;
private volatile BigDecimal markPrice = BigDecimal.ZERO;
private volatile BigDecimal cumulativePnl = BigDecimal.ZERO;
@@ -300,6 +305,8 @@
baseShortOpened = false;
longActive = false;
shortActive = false;
+ accumulatedLongLossCount = 0;
+ accumulatedShortLossCount = 0;
shortPriceQueue.clear();
longPriceQueue.clear();
currentLongOrderIds.clear();
@@ -609,6 +616,7 @@
int filledQty = Integer.parseInt(shortGridElement.getShortTraderParam().getQuantity());
shortEntryTraderIdParam(shortGridElement, null, false);
extendShortStopLoss(filledQty,shortGridElement.getId());
+ accumulatedShortLossCount = 0; // 加仓订单成交,重置止损累计
log.info("[Gate] 空单成交 gridId:{}", filledQty);
// 空仓持仓超过baseQuantity时,从gridId-2开始向外追挂止盈
@@ -647,6 +655,7 @@
int filledQty = Integer.parseInt(longGridElement.getLongTraderParam().getQuantity());
longEntryTraderIdParam(longGridElement, null, false);
extendLongStopLoss(filledQty,longGridElement.getId());
+ accumulatedLongLossCount = 0; // 加仓订单成交,重置止损累计
log.info("[Gate] 多单成交 gridId:{}", filledQty);
// 多仓持仓超过baseQuantity时,从gridId+2开始向外追挂止盈
@@ -1114,12 +1123,9 @@
BigDecimal triggerPrice = newEntryGrid.getGridPrice();
- BigDecimal baseQuantity = new BigDecimal(config.getBaseQuantity());
- BigDecimal subtract = baseQuantity.subtract(longPositionSize);
- String size = new BigDecimal(config.getQuantity()).add(new BigDecimal("1")).toString();
- if (subtract.compareTo(BigDecimal.ZERO) >=0){
- size = subtract.add(new BigDecimal("1")).toString();
- }
+ // 累计止损张数 + 当前止损量作为追单size,不再依赖positionSize(避免WS竞态)
+ accumulatedLongLossCount += Integer.parseInt(config.getQuantity());
+ String size = String.valueOf(accumulatedLongLossCount + Integer.parseInt(config.getQuantity()));
log.info("[Gate] 多仓止损触发 gridId:{}, 在gridId:{}挂{}基础张多单",
gridId, newEntryGridId, size);
@@ -1172,12 +1178,9 @@
BigDecimal triggerPrice = newEntryGrid.getGridPrice();
- BigDecimal baseQuantity = new BigDecimal(config.getBaseQuantity());
- BigDecimal subtract = baseQuantity.subtract(shortPositionSize);
- String size = new BigDecimal(config.getQuantity()).add(new BigDecimal("1")).toString();
- if (subtract.compareTo(BigDecimal.ZERO) >=0){
- size = subtract.add(new BigDecimal("1")).toString();
- }
+ // 累计止损张数 + 当前止损量作为追单size,不再依赖positionSize(避免WS竞态)
+ accumulatedShortLossCount += Integer.parseInt(config.getQuantity());
+ String size = String.valueOf(accumulatedShortLossCount + Integer.parseInt(config.getQuantity()));
log.info("[Gate] 空仓止损触发 gridId:{}, 在gridId:{}挂{}基础张空单",
gridId, newEntryGridId, size);
newEntryGrid.getShortTraderParam().setQuantity(size);
--
Gitblit v1.9.1