From 55ff7a6e531b7957476732f299380bbab3ba0065 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 04 Jun 2026 15:42:32 +0800
Subject: [PATCH] feat(ws): 添加WebSocket订阅状态追踪功能
---
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java | 6 +
src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java | 3
src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/GateChannelHandler.java | 6 +
src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/handler/CandlestickChannelHandler.java | 8 +
src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java | 17 ++
src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/AbstractPrivateChannelHandler.java | 8 +
src/main/java/com/xcong/excoin/modules/gateApi/gate-v3.out | 263 +++++++++++++++++++++++++++++++++++++++++++
7 files changed, 310 insertions(+), 1 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 e277173..f54cb94 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -146,6 +146,7 @@
private volatile BigDecimal shortPositionSize = BigDecimal.ZERO;
private Long userId;
private volatile BigDecimal initialPrincipal = BigDecimal.ZERO;
+ private volatile GateKlineWebSocketClient wsClient;
public GateGridTradeService(GateConfig config) {
this.config = config;
@@ -376,6 +377,9 @@
//初始化0位置的开仓,并且用空的开仓价格,作为价格基准来划分网格
if (state == StrategyState.WAITING_KLINE) {
+ if (wsClient == null || !wsClient.areAllSubscribed()) {
+ return;
+ }
state = StrategyState.OPENING;
log.info("[Gate] 首根K线到达,开基底仓位 多空各{}张...", config.getBaseQuantity());
executor.openLong(config.getBaseQuantity(), (orderId) -> {
@@ -1673,4 +1677,6 @@
public Long getUserId() { return userId; }
/** @return 当前策略状态 */
public StrategyState getState() { return state; }
+ /** 注入WS客户端,用于订阅状态检查 */
+ public void setWsClient(GateKlineWebSocketClient wsClient) { this.wsClient = wsClient; }
}
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
index 156c76b..811bb20 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
@@ -258,6 +258,12 @@
}
if ("subscribe".equals(event)) {
log.info("[WS] {} 订阅成功: {}", channel, response.getJSONObject("result"));
+ for (GateChannelHandler handler : channelHandlers) {
+ if (channel.equals(handler.getChannelName())) {
+ handler.setSubscribed(true);
+ break;
+ }
+ }
return;
}
if ("unsubscribe".equals(event)) {
@@ -282,6 +288,17 @@
}
}
+ /**
+ * 检查所有已注册的频道是否都已收到订阅成功确认。
+ */
+ public boolean areAllSubscribed() {
+ if (channelHandlers.isEmpty()) return false;
+ for (GateChannelHandler h : channelHandlers) {
+ if (!h.isSubscribed()) return false;
+ }
+ return true;
+ }
+
// ---- heartbeat ----
/**
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
index be940e4..a61f680 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
@@ -100,7 +100,7 @@
gridTradeService = new GateGridTradeService(config);
gridTradeService.init();
- // 2. 创建 WS 客户端并注册 3 个频道处理器
+ // 2. 创建 WS 客户端并注册频道处理器
wsClient = new GateKlineWebSocketClient(config.getWsUrl());
wsClient.addChannelHandler(new CandlestickChannelHandler(config.getContract(), gridTradeService));
wsClient.addChannelHandler(new PositionsChannelHandler(
@@ -113,6 +113,7 @@
config.getApiKey(), config.getApiSecret(), config.getContract(), gridTradeService));
wsClient.addChannelHandler(new AutoOrdersChannelHandler(
config.getApiKey(), config.getApiSecret(), config.getContract(), gridTradeService));
+ gridTradeService.setWsClient(wsClient);
wsClient.init();
log.info("[管理器] WS已连接, 已注册 6 个频道处理器");
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/gate-v3.out b/src/main/java/com/xcong/excoin/modules/gateApi/gate-v3.out
new file mode 100644
index 0000000..a9dec95
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/gate-v3.out
@@ -0,0 +1,263 @@
+
+ . ____ _ __ _ _
+ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
+( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
+ \\/ ___)| |_)| | | | | || (_| | ) ) ) )
+ ' |____| .__|_| |_|_| |_\__, | / / / /
+ =========|_|==============|___/=/_/_/_/
+ :: Spring Boot :: (v2.2.6.RELEASE)
+
+2026-06-04 14:16:09.663 INFO 48526 --- [ main] com.xcong.excoin.ExcoinApplication : Starting ExcoinApplication v0.0.1-SNAPSHOT on VM-0-4-ubuntu with PID 48526 (/home/gate-v3.jar started by root in /root)
+2026-06-04 14:16:09.666 INFO 48526 --- [ main] com.xcong.excoin.ExcoinApplication : The following profiles are active: test
+2026-06-04 14:16:11.805 INFO 48526 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
+2026-06-04 14:16:11.809 INFO 48526 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2026-06-04 14:16:11.868 INFO 48526 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 41ms. Found 0 Redis repository interfaces.
+2026-06-04 14:16:13.516 INFO 48526 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration' of type [org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2026-06-04 14:16:13.527 INFO 48526 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'objectPostProcessor' of type [org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2026-06-04 14:16:13.531 INFO 48526 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@1e4f4a5c' of type [org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2026-06-04 14:16:13.535 INFO 48526 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration' of type [org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2026-06-04 14:16:13.544 INFO 48526 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'methodSecurityMetadataSource' of type [org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2026-06-04 14:16:14.135 INFO 48526 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 30001 (http)
+2026-06-04 14:16:14.152 INFO 48526 --- [ main] o.a.coyote.http11.Http11NioProtocol : Initializing ProtocolHandler ["http-nio-30001"]
+2026-06-04 14:16:14.154 INFO 48526 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+2026-06-04 14:16:14.160 INFO 48526 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.33]
+2026-06-04 14:16:14.249 INFO 48526 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+2026-06-04 14:16:14.249 INFO 48526 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4401 ms
+2026-06-04 14:16:15.083 INFO 48526 --- [ main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
+2026-06-04 14:16:42.052 INFO 48526 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
+ _ _ |_ _ _|_. ___ _ | _
+| | |\/|_)(_| | |_\ |_)||_|_\
+ / |
+ 3.3.1.tmp
+2026-06-04 14:16:46.026 INFO 48526 --- [ main] c.x.e.m.g.GateWebSocketClientManager : [管理器] 开始初始化...
+2026-06-04 14:16:48.243 INFO 48526 --- [ main] c.x.e.m.gateApi.GateGridTradeService : [Gate] 用户ID: 52314967
+2026-06-04 14:16:48.291 INFO 48526 --- [ main] c.x.e.m.gateApi.GateGridTradeService : [Gate] 初始本金: 9.461955504201 USDT
+2026-06-04 14:16:48.328 INFO 48526 --- [ main] c.x.e.m.gateApi.GateGridTradeService : [Gate] 旧条件单已清除
+2026-06-04 14:16:48.388 INFO 48526 --- [ main] c.x.e.m.gateApi.GateGridTradeService : [Gate] 平已有仓位, 方向:多, size:10, mode:dual_long
+2026-06-04 14:16:48.399 INFO 48526 --- [ main] c.x.e.m.gateApi.GateGridTradeService : [Gate] 平已有仓位, 方向:空, size:-10, mode:dual_short
+2026-06-04 14:16:48.433 INFO 48526 --- [ main] c.x.e.m.gateApi.GateGridTradeService : [Gate] 持仓模式: dual 余额: 7.346243611701
+2026-06-04 14:16:48.434 INFO 48526 --- [ main] c.x.e.m.gateApi.GateGridTradeService : [Gate] 杠杆: 100x CROSS
+2026-06-04 14:16:48.472 INFO 48526 --- [ main] c.x.e.m.g.GateWebSocketClientManager : [管理器] WS已连接, 已注册 6 个频道处理器
+2026-06-04 14:16:48.512 INFO 48526 --- [ main] c.x.e.m.gateApi.GateGridTradeService : [Gate] 网格策略已启动, 当前本金: 9.280881004201 USDT
+2026-06-04 14:16:48.529 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.GateKlineWebSocketClient : [WS] 连接成功
+2026-06-04 14:16:48.723 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.w.h.CandlestickChannelHandler : [futures.candlesticks] 订阅成功, 合约:ETH_USDT, 周期:1m
+2026-06-04 14:16:48.729 INFO 48526 --- [ctReadThread-23] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.positions] 订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:48.734 INFO 48526 --- [ctReadThread-23] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.position_closes] 订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:48.735 INFO 48526 --- [ctReadThread-23] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.orders] 订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:48.736 INFO 48526 --- [ctReadThread-23] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.usertrades] 订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:48.737 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.w.h.AutoOrdersChannelHandler : [futures.autoorders] 订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:48.811 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.candlesticks 订阅成功: {"status":"success"}
+2026-06-04 14:16:49.172 INFO 48526 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'
+2026-06-04 14:16:49.564 INFO 48526 --- [ main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2026-06-04 14:16:49.745 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:16:49.745 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 首根K线到达,开基底仓位 多空各10张...
+2026-06-04 14:16:49.792 INFO 48526 --- [te-trade-worker] c.x.e.modules.gateApi.GateTradeExecutor : [TradeExec] 开多成功, 价格:1790.67, id:63894851787033490
+2026-06-04 14:16:49.809 INFO 48526 --- [te-trade-worker] c.x.e.modules.gateApi.GateTradeExecutor : [TradeExec] 开空成功, 价格:1790.66, id:63894851787033516
+2026-06-04 14:16:49.875 INFO 48526 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@601cbd8c, org.springframework.security.web.context.SecurityContextPersistenceFilter@456abb66, org.springframework.security.web.header.HeaderWriterFilter@654b72c0, org.springframework.web.filter.CorsFilter@7180e701, org.springframework.security.web.authentication.logout.LogoutFilter@91c4a3f, com.xcong.excoin.configurations.security.TokenFilter@4e2c95ee, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@3003697, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@46b695ec, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@11ce2e22, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@d0ec63, org.springframework.security.web.session.SessionManagementFilter@6034e75d, org.springframework.security.web.access.ExceptionTranslationFilter@867ba60, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@e93f3d5]
+2026-06-04 14:16:50.364 INFO 48526 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
+2026-06-04 14:16:50.795 INFO 48526 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'taskScheduler'
+2026-06-04 14:16:50.900 INFO 48526 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2026-06-04 14:16:50.936 INFO 48526 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2026-06-04 14:16:50.984 INFO 48526 --- [ main] s.d.s.w.s.ApiListingReferenceScanner : Scanning for api listing references
+2026-06-04 14:16:51.743 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:16:51.800 INFO 48526 --- [ main] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [120.27.238.55:5672]
+2026-06-04 14:16:52.237 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.positions 订阅成功: {"status":"success"}
+2026-06-04 14:16:52.237 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.position_closes 订阅成功: {"status":"success"}
+2026-06-04 14:16:52.238 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.orders 订阅成功: {"status":"success"}
+2026-06-04 14:16:52.238 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.usertrades 订阅成功: {"status":"success"}
+2026-06-04 14:16:52.239 INFO 48526 --- [ctReadThread-23] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.autoorders 订阅成功: {"status":"success"}
+2026-06-04 14:16:53.728 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:16:53.789 INFO 48526 --- [ main] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#58326051:0/SimpleConnection@1fde4f40 [delegate=amqp://ct_rabbit@120.27.238.55:5672/, localPort= 36746]
+2026-06-04 14:16:55.741 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:16:56.879 INFO 48526 --- [ main] o.a.coyote.http11.Http11NioProtocol : Starting ProtocolHandler ["http-nio-30001"]
+2026-06-04 14:16:56.907 INFO 48526 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 30001 (http) with context path ''
+2026-06-04 14:16:56.911 INFO 48526 --- [ main] com.xcong.excoin.ExcoinApplication : Started ExcoinApplication in 48.716 seconds (JVM running for 49.493)
+2026-06-04 14:16:57.757 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:16:59.740 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:00.725 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:01.764 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:03.735 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:05.760 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:07.733 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:09.755 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:11.808 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:13.707 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:15.736 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:17.750 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:19.802 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:21.711 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:23.749 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:25.723 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:27.785 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:29.749 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:31.791 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:33.744 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:35.833 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:37.700 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:39.770 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:41.757 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:43.794 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:45.754 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:47.771 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:49.744 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:51.767 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:53.722 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:55.739 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:57.752 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:17:59.761 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:00.428 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:01.741 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:03.788 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:05.756 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:07.726 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:09.707 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:11.764 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:13.746 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:15.758 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:17.733 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:19.862 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:21.776 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:23.750 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:25.738 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:27.760 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:29.715 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:31.816 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:33.770 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:35.731 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:37.718 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:39.779 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:41.756 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:43.817 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:45.738 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:47.835 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:49.743 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:51.797 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:53.745 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:55.727 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:57.758 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:18:59.716 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:00.137 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:01.757 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:03.766 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:05.741 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:07.713 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:09.730 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:11.733 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:13.756 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:15.716 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:17.754 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:19.752 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:21.744 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:23.746 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:25.755 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:27.787 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:29.723 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:31.741 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:33.734 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:35.753 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:37.721 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:39.767 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:41.718 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:43.713 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:45.726 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:47.757 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:49.732 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:51.739 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:53.735 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:55.721 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:57.726 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:19:59.712 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:00.220 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:01.766 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:03.768 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:05.767 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:07.765 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:09.746 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:11.722 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:13.743 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:15.714 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:17.735 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:19.739 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:21.708 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:23.724 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:25.743 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:27.711 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:29.734 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:31.749 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:33.712 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:35.736 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:37.741 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:39.707 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:41.724 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:43.722 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:45.773 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:47.742 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:49.757 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:51.747 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:53.735 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:55.715 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:57.753 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:20:59.733 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:00.303 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:01.796 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:03.763 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:05.749 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:07.774 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:09.759 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:11.745 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:13.702 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:15.698 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:17.739 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:19.773 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:21.747 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:23.792 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:25.715 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:27.729 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:29.723 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:31.751 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:33.730 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:35.727 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:37.733 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:39.710 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:41.721 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:21:43.756 INFO 48526 --- [ctReadThread-23] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:16:07.479 INFO 44913 --- [extShutdownHook] o.s.a.r.l.SimpleMessageListenerContainer : Waiting for workers to finish.
+2026-06-04 14:16:07.747 INFO 44913 --- [ctReadThread-22] c.x.e.m.gateApi.GateGridTradeService : [Gate] 未实现盈亏: 0
+2026-06-04 14:16:08.060 INFO 44913 --- [extShutdownHook] o.s.a.r.l.SimpleMessageListenerContainer : Successfully waited for workers to finish.
+2026-06-04 14:16:08.061 INFO 44913 --- [extShutdownHook] o.s.s.c.ThreadPoolTaskScheduler : Shutting down ExecutorService 'taskScheduler'
+2026-06-04 14:16:08.066 INFO 44913 --- [extShutdownHook] o.s.a.r.l.SimpleMessageListenerContainer : Shutdown ignored - container is not active already
+2026-06-04 14:16:08.067 INFO 44913 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
+2026-06-04 14:16:08.078 INFO 44913 --- [extShutdownHook] c.x.e.m.g.GateWebSocketClientManager : [管理器] 开始销毁...
+2026-06-04 14:16:08.178 ERROR 44913 --- [te-trade-worker] c.x.e.modules.gateApi.GateTradeExecutor : [TradeExec] 清除止盈止损条件单失败
+
+io.gate.gateapi.GateApiException: label: MISSING_REQUIRED_HEADER, message: Missing required header: Timestamp
+ at io.gate.gateapi.ApiClient.handleResponse(ApiClient.java:1000)
+ at io.gate.gateapi.ApiClient.execute(ApiClient.java:914)
+ at io.gate.gateapi.api.FuturesApi.cancelPriceTriggeredOrderListWithHttpInfo(FuturesApi.java:9739)
+ at io.gate.gateapi.api.FuturesApi.cancelPriceTriggeredOrderList(FuturesApi.java:9719)
+ at com.xcong.excoin.modules.gateApi.GateTradeExecutor.lambda$cancelAllPriceTriggeredOrders$3(GateTradeExecutor.java:216)
+ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+ at java.lang.Thread.run(Thread.java:748)
+
+2026-06-04 14:16:08.178 INFO 44913 --- [extShutdownHook] c.x.e.m.gateApi.GateGridTradeService : [Gate] 策略已停止, 累计盈亏: 0
+2026-06-04 14:16:08.178 INFO 44913 --- [extShutdownHook] c.x.e.m.g.GateKlineWebSocketClient : [WS] 开始销毁...
+2026-06-04 14:16:08.179 INFO 44913 --- [extShutdownHook] c.x.e.m.g.w.h.CandlestickChannelHandler : [futures.candlesticks] 取消订阅成功
+2026-06-04 14:16:08.179 INFO 44913 --- [extShutdownHook] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.positions] 取消订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:08.180 INFO 44913 --- [extShutdownHook] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.position_closes] 取消订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:08.181 INFO 44913 --- [extShutdownHook] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.orders] 取消订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:08.181 INFO 44913 --- [extShutdownHook] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.usertrades] 取消订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:08.182 INFO 44913 --- [extShutdownHook] .x.e.m.g.w.AbstractPrivateChannelHandler : [futures.autoorders] 取消订阅成功, 合约:ETH_USDT
+2026-06-04 14:16:08.186 INFO 44913 --- [ctReadThread-22] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.candlesticks 取消订阅成功
+2026-06-04 14:16:08.186 INFO 44913 --- [ctReadThread-22] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.positions 取消订阅成功
+2026-06-04 14:16:08.186 INFO 44913 --- [ctReadThread-22] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.position_closes 取消订阅成功
+2026-06-04 14:16:08.187 INFO 44913 --- [ctReadThread-22] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.orders 取消订阅成功
+2026-06-04 14:16:08.187 INFO 44913 --- [ctReadThread-22] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.usertrades 取消订阅成功
+2026-06-04 14:16:08.187 INFO 44913 --- [ctReadThread-22] c.x.e.m.g.GateKlineWebSocketClient : [WS] futures.autoorders 取消订阅成功
+2026-06-04 14:16:08.687 WARN 44913 --- [ctReadThread-22] c.x.e.m.g.GateKlineWebSocketClient : [WS] 连接关闭, code:1000, reason:
+2026-06-04 14:16:13.689 INFO 44913 --- [extShutdownHook] c.x.e.m.g.GateKlineWebSocketClient : [WS] 销毁完成
+2026-06-04 14:16:13.689 INFO 44913 --- [extShutdownHook] c.x.e.m.g.GateWebSocketClientManager : [管理器] 销毁完成
+2026-06-04 14:16:13.819 INFO 44913 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closing ...
+2026-06-04 14:16:13.840 INFO 44913 --- [ctReadThread-57] c.x.e.m.g.GateKlineWebSocketClient : [WS] 连接成功
+2026-06-04 14:16:13.840 WARN 44913 --- [ctReadThread-57] c.x.e.m.g.GateKlineWebSocketClient : [WS] 应用正在关闭,忽略连接成功回调
+2026-06-04 14:16:13.843 INFO 44913 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/AbstractPrivateChannelHandler.java b/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/AbstractPrivateChannelHandler.java
index 1889761..f5dac39 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/AbstractPrivateChannelHandler.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/AbstractPrivateChannelHandler.java
@@ -26,6 +26,8 @@
private final String contract;
private final GateGridTradeService gridTradeService;
+ private volatile boolean subscribed = false;
+
public AbstractPrivateChannelHandler(String channelName,
String apiKey, String apiSecret,
String contract,
@@ -165,4 +167,10 @@
return "";
}
}
+
+ @Override
+ public boolean isSubscribed() { return subscribed; }
+
+ @Override
+ public void setSubscribed(boolean subscribed) { this.subscribed = subscribed; }
}
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/GateChannelHandler.java b/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/GateChannelHandler.java
index e24baff..8d4a0c3 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/GateChannelHandler.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/GateChannelHandler.java
@@ -41,4 +41,10 @@
* @return true 表示已处理(循环停止),false 表示频道不匹配(继续遍历下一个 handler)
*/
boolean handleMessage(JSONObject response);
+
+ /** 是否已收到订阅成功确认 */
+ boolean isSubscribed();
+
+ /** 标记订阅已确认 */
+ void setSubscribed(boolean subscribed);
}
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/handler/CandlestickChannelHandler.java b/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/handler/CandlestickChannelHandler.java
index fa05514..1a7a2ea 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/handler/CandlestickChannelHandler.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/wsHandler/handler/CandlestickChannelHandler.java
@@ -34,6 +34,8 @@
/** 网格交易服务,接收 K 线回调 */
private final GateGridTradeService gridTradeService;
+ private volatile boolean subscribed = false;
+
/**
* @param contract 合约名称(如 ETH_USDT)
* @param gridTradeService 网格交易策略服务实例
@@ -132,4 +134,10 @@
} catch (Exception e) { log.error("[{}] 处理数据失败", CHANNEL_NAME, e); }
return true;
}
+
+ @Override
+ public boolean isSubscribed() { return subscribed; }
+
+ @Override
+ public void setSubscribed(boolean subscribed) { this.subscribed = subscribed; }
}
--
Gitblit v1.9.1