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