From 0afd26048927990cca02ea9a6eaa5e91408627ad Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 23 Sep 2026 17:59:57 +0800
Subject: [PATCH] fix(gateApi): 更新Gate API依赖版本并修复方法调用
---
src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java | 51 +++++++++++++++++++++++++++++++++++++++------------
1 files changed, 39 insertions(+), 12 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 8e500a0..449b526 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateTradeExecutor.java
@@ -54,6 +54,11 @@
private static final String SETTLE = "usdt";
+ /** 止盈/止损条件单创建失败后的重试次数 */
+ private static final int TRIGGER_ORDER_RETRY_MAX_ATTEMPTS = 3;
+ /** 止盈/止损条件单创建失败后的重试间隔(毫秒) */
+ private static final long TRIGGER_ORDER_RETRY_DELAY_MS = 500L;
+
/** Gate U 本位合约 REST API */
private final FuturesApi futuresApi;
/** 合约名称(如 ETH_USDT) */
@@ -91,6 +96,13 @@
Thread.currentThread().interrupt();
executor.shutdownNow();
}
+ }
+ /**
+ * 提交一个通用任务到交易线程池末尾。
+ * 利用单线程池的 FIFO 特性确保任务按提交顺序执行。
+ */
+ public void submitTask(Runnable task) {
+ executor.execute(task);
}
/**
@@ -172,17 +184,32 @@
Consumer<String> onSuccess) {
executor.execute(() -> {
FuturesPriceTriggeredOrder order = buildTriggeredOrder(triggerPrice, rule, orderType, size);
- try {
- TriggerOrderResponse response = futuresApi.createPriceTriggeredOrder(SETTLE, order);
- log.info("[TradeExec] 止盈单已创建, 触发价:{}, 类型:{}, size:{}, id:{},idstr:{}",
- triggerPrice, orderType, size, response.getId(), response.getIdString());
- String orderId = String.valueOf(response.getId());
- if (onSuccess != null) {
- onSuccess.accept(orderId);
+ for (int attempt = 1; attempt <= TRIGGER_ORDER_RETRY_MAX_ATTEMPTS; attempt++) {
+ try {
+ TriggerOrderResponse response = futuresApi.createPriceTriggeredOrder(SETTLE, order);
+ log.info("[TradeExec] 止盈单已创建, 触发价:{}, 类型:{}, size:{}, id:{},idstr:{}",
+ triggerPrice, orderType, size, response.getId(), response.getIdString());
+ String orderId = String.valueOf(response.getId());
+ if (onSuccess != null) {
+ onSuccess.accept(orderId);
+ }
+ return;
+ } catch (Exception e) {
+ if (attempt < TRIGGER_ORDER_RETRY_MAX_ATTEMPTS) {
+ log.warn("[TradeExec] 止盈单创建失败, 触发价:{}, size:{}, 第{}次尝试失败, {}ms后重试, err:{}",
+ triggerPrice, size, attempt, TRIGGER_ORDER_RETRY_DELAY_MS, e.getMessage());
+ try {
+ Thread.sleep(TRIGGER_ORDER_RETRY_DELAY_MS);
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ marketClose(size);
+ return;
+ }
+ } else {
+ log.error("[TradeExec] 止盈单创建失败, 触发价:{}, size:{}, 立即市价止盈", triggerPrice, size, e);
+ marketClose(size);
+ }
}
- } catch (Exception e) {
- log.error("[TradeExec] 止盈单创建失败, 触发价:{}, size:{}, 立即市价止盈", triggerPrice, size, e);
- marketClose(size);
}
});
}
@@ -258,7 +285,7 @@
/**
* <b>遗留方法 — 当前条件单策略未使用</b>
*
- * <p>异步取消指定限价单。当前策略改用 {@link #cancelConditionalOrder(String)}。
+ * <p>异步取消指定限价单。当前策略改用 。
*
* @param orderId 订单 ID,为 null 时跳过
*/
@@ -268,7 +295,7 @@
}
executor.execute(() -> {
try {
- FuturesOrder cancelled = futuresApi.cancelFuturesOrder(SETTLE, orderId, null);
+ FuturesOrder cancelled = futuresApi.cancelFuturesOrder(SETTLE, orderId, null, null);
log.info("[TradeExec] 订单已取消, id:{}, status:{}", orderId, cancelled.getStatus());
if (onSuccess != null) {
onSuccess.accept(orderId);
--
Gitblit v1.9.1