From e925a20f09db3295a93cd28fe2140403b8c0948f Mon Sep 17 00:00:00 2001 From: "zhangkun9038@dingtalk.com" Date: Thu, 27 Nov 2025 20:22:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BD=91=E6=A0=BC=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=E6=9B=B4=E6=96=B0=E6=97=B6=E6=B8=85=E7=90=86Redis?= =?UTF-8?q?=E6=97=A7=E6=95=B0=E6=8D=AE=20+=20=E6=94=B9=E8=BF=9B=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user_data/strategies/staticgrid.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/user_data/strategies/staticgrid.py b/user_data/strategies/staticgrid.py index b846cf7..53ce1e7 100644 --- a/user_data/strategies/staticgrid.py +++ b/user_data/strategies/staticgrid.py @@ -99,7 +99,6 @@ class StaticGrid(IStrategy): grid_manager.step = step # 更新步长 # 重新初始化 grid_states(仅在第一次,之后保留已有的 FILLED 状态) - # 先从 Redis 恢复之前的网格状态 grid_manager.grid_states.clear() for price in grid_manager.grid_prices: grid_manager.grid_states[price] = GridLevel( @@ -113,13 +112,16 @@ class StaticGrid(IStrategy): # 重置同步标志,以便网格范围更新后的第一次 sync 能重新初始化 grid_manager._synced_from_trade_once = False - # 从 Redis 恢复网格状态(如果存在) + # ✅ 当网格范围更新时,清理 Redis 中的旧数据,重新开始 + # 并不恢复旧数据,因为网格范围已经改变,网格位置名不对应 if self.redis_available: - redis_grid_state = grid_manager.recover_grid_state_from_redis() - if redis_grid_state: - grid_manager.restore_grid_state(redis_grid_state) - print(f"[StaticGrid] {pair} 已从 Redis 恢复网格状态", - file=sys.stderr, flush=True) + try: + if grid_manager.redis_client: + grid_manager.redis_client.delete(grid_manager.redis_key) + print(f"[StaticGrid] {pair} 清理 Redis 中的旧数据", + file=sys.stderr, flush=True) + except: + pass print(f"[StaticGrid] {pair} 更新网格范围 - 从 1000-5000 更新为 {new_lower:.2f}-{new_upper:.2f}", file=sys.stderr, flush=True) @@ -192,7 +194,8 @@ class StaticGrid(IStrategy): # 如果 Redis 中有持仓数据,进行恢复 if recovered_state: grid_manager.restore_from_redis_state(recovered_state) - print(f"[StaticGrid] {pair} 已从 Redis 恢复", file=sys.stderr, flush=True) + filled_count = sum(1 for gs in grid_manager.grid_states.values() if gs.status == "filled") + print(f"[StaticGrid] {pair} 从 Redis 恢复 - {filled_count} FILLED 网格", file=sys.stderr, flush=True) else: print(f"[StaticGrid] {pair} 新建持仓 - 网格初始为空,等待加仓逐步填充", file=sys.stderr, flush=True)