From a37c520150f077649f7d8b314a517f09956ffae9 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 13 Aug 2026 18:00:01 +0800
Subject: [PATCH] fix(gateApi): 修正默认价格精度配置
---
src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java | 58 +++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 39 insertions(+), 19 deletions(-)
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 f27ef8f..17f2a75 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
@@ -46,16 +46,16 @@
public class GateWebSocketClientManager {
// ==================== 修改配置只需改这里 ===================
- static final String DEFAULT_API_KEY = "4de44d064e84e57f045a8c77ba855fbe";
- static final String DEFAULT_API_SECRET = "afe7bb16f2a8896e1eceb4ca12e9b410e8d6698ddb3320119a04a21c7c543866";
+ static final String DEFAULT_API_KEY = "80d0850cf09f0d7b9e9c8887450b23c5";
+ static final String DEFAULT_API_SECRET = "ec3661e942378ca4252687b9382bcdda56b3e5a8a20da94d08e1a272187df8a7";
// 不可调参数
static final String DEFAULT_CONTRACT = "ETH_USDT";
static final String DEFAULT_LEVERAGE = "100";
static final String DEFAULT_MARGIN_MODE = "CROSS";
static final String DEFAULT_POSITION_MODE = "dual";
static final int DEFAULT_RESTART_GRID_SPAN = 2;
- static final int DEFAULT_PRICE_SCALE = 2;
- static final String DEFAULT_CONTRACT_MULTIPLIER = "0.01";
+ static final int DEFAULT_PRICE_SCALE = 1;
+ static final String DEFAULT_CONTRACT_MULTIPLIER = "0.1";
static final String DEFAULT_PNL_MODE = "LAST_PRICE";
static final int DEFAULT_REOPEN_MAX_RETRIES = 3;
// ==========================================================
@@ -65,6 +65,9 @@
@Autowired
private GateLogBuffer logBuffer;
+
+ @Autowired
+ private StatsEventProducer statsEventProducer;
/** WebSocket 连接管理器 */
private GateKlineWebSocketClient wsClient;
@@ -84,20 +87,7 @@
config = persistenceService.buildFromDTO(saved, DEFAULT_API_KEY);
logBuffer.info("[管理器] 已加载持久化配置, apiKey=" + mask(DEFAULT_API_KEY));
} else {
- // 构建默认配置 DTO(只有 7 项可调参数)
- GateConfigDTO defaults = GateConfigDTO.builder()
- .apiKey(DEFAULT_API_KEY)
- .gridRate(new BigDecimal("0.005"))
- .expectedProfit(new BigDecimal("0.15"))
- .maxLoss(new BigDecimal("1.5"))
- .baseQuantity("2")
- .quantity("2")
- .maxPositionSize(4)
- .stopLossCount(0)
- .priceDriveEnabled(true)
- .rounds(0)
- .build();
- // 确保配置文件存在
+ GateConfigDTO defaults = GateConfigDTO.defaultsFor(DEFAULT_API_KEY);
persistenceService.ensureExists(DEFAULT_API_KEY, defaults);
config = persistenceService.buildFromDTO(defaults, DEFAULT_API_KEY);
logBuffer.info("[管理器] 已创建默认配置文件");
@@ -138,6 +128,36 @@
public GateConfig getConfig() { return config; }
/**
+ * 远程更新策略参数 — 仅持久化到 JSON 文件,不自动重启。
+ * 下次「启动」指令会从文件读取最新配置后重建策略。
+ *
+ * @param dto 从 Station 下发的可调参数(不含 apiSecret)
+ */
+ public void updateConfig(GateConfigDTO dto) {
+ logBuffer.info("[管理器] 收到远程参数更新指令(仅持久化)");
+ persistenceService.save(config.getApiKey(), dto);
+ logBuffer.info("[管理器] 参数已保存,待下次启动生效");
+ }
+
+ /**
+ * 从持久化文件重载配置并重启策略。
+ * 用于远程「启动」指令:先读最新配置 → 重建服务 → 启动。
+ */
+ public void reloadAndStart() {
+ logBuffer.info("[管理器] 从文件重载配置并启动...");
+ GateConfigDTO saved = persistenceService.load(config.getApiKey());
+ if (saved == null) {
+ logBuffer.info("[管理器] 无持久化配置,使用当前内存配置启动");
+ if (gridTradeService != null) {
+ gridTradeService.startGrid();
+ }
+ return;
+ }
+ GateConfig newConfig = persistenceService.buildFromDTO(saved, config.getApiKey());
+ restartWithConfig(newConfig);
+ }
+
+ /**
* 使用新配置重启策略:停止旧策略 → 重建 WS → 重新 init + startGrid。
*/
public void restartWithConfig(GateConfig newConfig) {
@@ -151,7 +171,7 @@
}
// 2. 使用新配置重建
this.config = newConfig;
- this.gridTradeService = new GateGridTradeService(config);
+ this.gridTradeService = new GateGridTradeService(config, statsEventProducer);
gridTradeService.init();
// 3. 重建 WS 客户端并重新注册 Handler
this.wsClient = new GateKlineWebSocketClient(config.getWsUrl());
--
Gitblit v1.9.1