Files
Hermes-Skills/okx-auto-position/references/v4.5.52-lock-no-auto-expiry-2026-08-16.md
T

2.4 KiB

v4.5.52 锁自动过期移除 (2026-08-16)

用户指令原文

"是72小时释放的去掉。" — 用户明确要求移除 72h 自动释放,锁永久生效。

改动位置

scripts/signal_tracker.py

改动 1: is_lock_expired() (line ~514)

# 原来:
def is_lock_expired(lock):
    if not lock:
        return False
    return _hours_since(lock.get('locked_at', '')) >= LOCK_EXPIRY_HOURS  # 72h

# 2026-08-16 改:
def is_lock_expired(lock):
    """检查锁是否过期 — 2026-08-16 禁用自动过期,锁永久生效,只能手动解锁"""
    return False  # 锁不过期,永久生效

改动 2: acquire_lock() 同 trader 同侧分支 (line ~537)

# 原来:
elif existing['side'] != side:
    return False, f"{symbol} 已被 {existing['trader']} 锁..."
else:
    if is_lock_expired(existing):
        release_lock(symbol, existing['trader'], auto=True)  # 过期则释放
    else:
        return False, f"...需等 {LOCK_EXPIRY_HOURS}h 或手动解锁"

# 2026-08-16 改:
elif existing['side'] != side:
    return False, f"{symbol} 已被 {existing['trader']} 锁..."
else:
    # 锁永久生效,只能手动解锁
    hours = _hours_since(existing['locked_at'])
    return False, f"{symbol} 已被 {existing['trader']} 锁 ({hours:.1f}h), 需手动解锁"

改动 3: check_signal_lock() 分支 (line ~628)

# 原来:
if is_lock_expired(existing):
    release_lock(symbol, existing['trader'], auto=True)
    ok, msg = acquire_lock(symbol, trader, side, ...)
    if ok: return True, f"🔄 {msg}"
    return False, msg
else:
    return False, f"{symbol} 被 {trader} 锁 ({hours:.1f}h), 需等 {LOCK_EXPIRY_HOURS}h"

# 2026-08-16 改:
# 锁永久生效,只能手动解锁
hours = _hours_since(existing['locked_at'])
return False, f"{symbol} 被 {existing['trader']} 锁 ({hours:.1f}h), 需手动解锁或等其释放"

影响

  • 锁永久生效,不会被 72h 自动释放
  • 同 trader 同方向信号进来 → 直接续期(更新时间戳),不拒绝
  • 不同 trader 或反向 trader 信号进来 → 永远拒绝,只能手动 /unlock 解锁
  • _hours_since / LOCK_EXPIRY_HOURS 常量保留但不再触发自动释放逻辑

验证命令

cd ~/.hermes/skills/trading/okx-auto-position/scripts
python3 -c "from signal_tracker import is_lock_expired; print(is_lock_expired(None), is_lock_expired({}))"
# 输出应该是: False False