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

72 lines
2.4 KiB
Markdown

# v4.5.52 锁自动过期移除 (2026-08-16)
## 用户指令原文
"是72小时释放的去掉。" — 用户明确要求移除 72h 自动释放,锁永久生效。
## 改动位置
`scripts/signal_tracker.py`
### 改动 1: `is_lock_expired()` (line ~514)
```python
# 原来:
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)
```python
# 原来:
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)
```python
# 原来:
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` 常量保留但不再触发自动释放逻辑
## 验证命令
```bash
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
```