From dad0b1cd6cd39d2525f23b1b33df19932fc4cddb Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 29 Jun 2026 11:28:27 +0800
Subject: [PATCH] 止损追单逻辑(多仓/空仓对称): 触发 → 查询 → 计算 → 下单 清理:取消相邻网格旧挂单 + 取消最远止盈单 一句话总结:每次止损触发补回 quantity*2 张,但总持仓不超 maxPositionSize,也不再累加放大。

---
 src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

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 9984cf9..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")。
@@ -338,7 +345,7 @@
      *
      * @param orderId 条件单 ID,为 null 时跳过
      */
-    public void cancelConditionalOrder(String orderId) {
+    public void cancelConditionalOrder(String orderId,Consumer<String> onSuccess) {
         if (orderId == null) {
             return;
         }
@@ -346,6 +353,9 @@
             try {
                 futuresApi.cancelPriceTriggeredOrder(SETTLE, Long.parseLong(orderId));
                 log.info("[TradeExec] 条件单已取消, id:{}", orderId);
+                if (onSuccess != null) {
+                    onSuccess.accept(orderId);
+                }
             } catch (Exception e) {
                 log.warn("[TradeExec] 取消条件单失败(可能已触发), id:{}", orderId);
             }

--
Gitblit v1.9.1