From 3356b9fa20d7dabf21f95718f00a6fa10bb0c7af Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 05 Jun 2026 22:23:04 +0800
Subject: [PATCH] refactor(gateApi): 优化网格交易重置逻辑确保任务按序执行
---
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java | 13 +++++++++++--
src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java | 7 +++++++
2 files changed, 18 insertions(+), 2 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 b295187..3a9d417 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -1530,7 +1530,12 @@
state = StrategyState.STOPPED;
closeExistingPositions();
futuresApi.cancelPriceTriggeredOrderList(SETTLE, config.getContract());
- startGrid();
+
+ // 提交到 executor 末尾:单线程FIFO保证前面所有平仓/取消任务完成后才重置
+ executor.submitTask(() -> {
+ try { Thread.sleep(30000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
+ startGrid();
+ });
}
} catch (Exception e) {
log.warn("[Gate] 盈亏检查失败", e);
@@ -1545,7 +1550,11 @@
log.warn("[Gate] {}持仓归零后取消条件单失败", direction, e);
}
closeExistingPositions();
- startGrid();
+ // 提交到 executor 末尾:单线程FIFO保证前面所有平仓/取消任务完成后才重置
+ executor.submitTask(() -> {
+ try { Thread.sleep(30000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
+ startGrid();
+ });
}
// ---- 保证金安全阀 ----
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java
index 8e500a0..b5de170 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java
@@ -92,6 +92,13 @@
executor.shutdownNow();
}
}
+ /**
+ * 提交一个通用任务到交易线程池末尾。
+ * 利用单线程池的 FIFO 特性确保任务按提交顺序执行。
+ */
+ public void submitTask(Runnable task) {
+ executor.execute(task);
+ }
/**
* 异步 IOC 市价开多。quantity 为正数(如 "1")。
--
Gitblit v1.9.1