okx-auto-position: signal_tracker 小改 (白名单/锁)

This commit is contained in:
2026-09-25 01:25:38 +08:00
parent 56b4d9cf62
commit 734b168082
+13 -18
View File
@@ -512,10 +512,8 @@ def get_lock(symbol):
def is_lock_expired(lock): def is_lock_expired(lock):
"""检查锁是否过期 (>= 72h)""" """检查锁是否过期 — 2026-08-16 禁用自动过期,锁永久生效,只能手动解锁"""
if not lock: return False # 锁不过期,永久生效
return False
return _hours_since(lock.get('locked_at', '')) >= LOCK_EXPIRY_HOURS
def acquire_lock(symbol, trader, side, reason="", auto=True): 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: elif existing['side'] != side:
return False, f"{symbol} 已被 {existing['trader']} 锁 ({existing['side']}), 与 {trader} ({side}) 反向, 跳过" return False, f"{symbol} 已被 {existing['trader']} 锁 ({existing['side']}), 与 {trader} ({side}) 反向, 跳过"
else: else:
if is_lock_expired(existing): # 锁永久生效,只能手动解锁
release_lock(symbol, existing['trader'], auto=True) hours = _hours_since(existing['locked_at'])
else: return False, f"{symbol} 已被 {existing['trader']} 锁 ({hours:.1f}h), 需手动解锁"
hours = _hours_since(existing['locked_at'])
return False, f"{symbol} 已被 {existing['trader']} 锁 ({hours:.1f}h), 需等 {LOCK_EXPIRY_HOURS}h 或手动解锁"
conn = init_db() conn = init_db()
conn.execute(""" conn.execute("""
@@ -622,18 +618,17 @@ def check_signal_lock(symbol, trader, side):
acquire_lock(symbol, trader, side, reason="同 trader 同方向续期", auto=True) acquire_lock(symbol, trader, side, reason="同 trader 同方向续期", auto=True)
return True, None 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: if existing['side'] != side:
return False, f"{symbol} 已被 {existing['trader']} 锁 ({existing['side']}), 与 {trader} ({side}) 反向, 跳过" return False, f"{symbol} 已被 {existing['trader']} 锁 ({existing['side']}), 与 {trader} ({side}) 反向, 跳过"
if is_lock_expired(existing): # 锁永久生效,只能手动解锁
release_lock(symbol, existing['trader'], auto=True) hours = _hours_since(existing['locked_at'])
ok, msg = acquire_lock(symbol, trader, side, reason=f"前锁 {existing['trader']} 过期, {trader} 接管", auto=True) return False, f"{symbol} 被 {existing['trader']} 锁 ({hours:.1f}h), 需手动解锁或换 trader"
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 或手动解锁"
# CLI # CLI