From 734b1680821520a4802f79662d1851c829ab89be Mon Sep 17 00:00:00 2001 From: mike Date: Fri, 25 Sep 2026 01:25:38 +0800 Subject: [PATCH] =?UTF-8?q?okx-auto-position:=20signal=5Ftracker=20?= =?UTF-8?q?=E5=B0=8F=E6=94=B9=20(=E7=99=BD=E5=90=8D=E5=8D=95/=E9=94=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- okx-auto-position/scripts/signal_tracker.py | 31 +++++++++------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/okx-auto-position/scripts/signal_tracker.py b/okx-auto-position/scripts/signal_tracker.py index 3605e56..9ae50ed 100644 --- a/okx-auto-position/scripts/signal_tracker.py +++ b/okx-auto-position/scripts/signal_tracker.py @@ -512,10 +512,8 @@ def get_lock(symbol): def is_lock_expired(lock): - """检查锁是否过期 (>= 72h)""" - if not lock: - return False - return _hours_since(lock.get('locked_at', '')) >= LOCK_EXPIRY_HOURS + """检查锁是否过期 — 2026-08-16 禁用自动过期,锁永久生效,只能手动解锁""" + return False # 锁不过期,永久生效 def acquire_lock(symbol, trader, side, reason="", auto=True): @@ -536,11 +534,9 @@ def acquire_lock(symbol, trader, side, reason="", auto=True): elif existing['side'] != side: return False, f"{symbol} 已被 {existing['trader']} 锁 ({existing['side']}), 与 {trader} ({side}) 反向, 跳过" else: - if is_lock_expired(existing): - release_lock(symbol, existing['trader'], auto=True) - else: - hours = _hours_since(existing['locked_at']) - return False, f"{symbol} 已被 {existing['trader']} 锁 ({hours:.1f}h), 需等 {LOCK_EXPIRY_HOURS}h 或手动解锁" + # 锁永久生效,只能手动解锁 + hours = _hours_since(existing['locked_at']) + return False, f"{symbol} 已被 {existing['trader']} 锁 ({hours:.1f}h), 需手动解锁" conn = init_db() conn.execute(""" @@ -622,18 +618,17 @@ def check_signal_lock(symbol, trader, side): acquire_lock(symbol, trader, side, reason="同 trader 同方向续期", auto=True) return True, None + if existing['trader'] == trader and existing['side'] != side: + # 同一 trader 方向反转 (如减仓变加仓): 直接执行,更新锁方向 + acquire_lock(symbol, trader, side, reason=f"同 trader 方向切换 {existing['side']}→{side}", auto=True) + return True, None + if existing['side'] != side: return False, f"{symbol} 已被 {existing['trader']} 锁 ({existing['side']}), 与 {trader} ({side}) 反向, 跳过" - if is_lock_expired(existing): - release_lock(symbol, existing['trader'], auto=True) - ok, msg = acquire_lock(symbol, trader, side, reason=f"前锁 {existing['trader']} 过期, {trader} 接管", auto=True) - if ok: - return True, f"🔄 {msg}" - return False, msg - else: - hours = _hours_since(existing['locked_at']) - return False, f"{symbol} 被 {existing['trader']} 锁 ({hours:.1f}h), 需等 {LOCK_EXPIRY_HOURS}h 或手动解锁" + # 锁永久生效,只能手动解锁 + hours = _hours_since(existing['locked_at']) + return False, f"{symbol} 被 {existing['trader']} 锁 ({hours:.1f}h), 需手动解锁或换 trader" # CLI