Files
Hermes-Skills/okx-auto-position/references/v4.5.47-2026-08-06-batch-snapshot-and-self-check.md
T

86 lines
4.2 KiB
Markdown

# v4.5.47 (2026-08-06) 批量实战教训:BTC 锁/锁推送缺失/平仓不解锁/close 0.091 拒单/self-check
## 🔴 三大类问题(2026-08-06 单 session)
### 1. 锁机制问题
- **8/4 23:10 予与实盘 BTC 做空减仓**:signal #45 due 锁 熬鹰资本 BTC long → 反向 → 静默拒绝 ❌
- **关键 bug**: 锁了不推送 QQ,用户以为 bug
- **修复**: process_signal.py + `push_to_qq('🔒 跟单被锁')` 显式推送
- **附**: close 信号自动 `release_lock` (用户原话"现在都平仓了,肯定解锁啊")
- **附**: 每次推送都附 _locks_status_text() (所有锁状态)
### 2. PnL 字段问题
- **用户原话**:"你算不出来就把字段删了吧"
- **之前**: advisor 用 `unrealizedPnl` (浮盈, 不准)
- **之前**: 推送显示 "+2.96 USDT" 但 OKX app 显示 "-1.9 USDT"
- **修复**: 平仓推送删 unrealizedPnl 字段, 加 `💡 实际盈亏请到 OKX app 查看`
- **保留**: advisor 内部 `fillPnl` (真成交字段) 写入但不推送
### 3. advisor 0.091 张拒单
- **advisor 给 0.091 张** SNDK 2x (margin $78)
- **实际 OKX 最小 0.01 张变动** → 0.091 不是 0.01 整数倍 → 拒单
- **advisor 标记 "done" 没真下单** → 假阳性
- **修复**: advisor 实际跑 0.126 张 (0.001 整数倍) → 真下成功
## 🔴 cron 脚本位置铁律 (用户原话:"你也不主动检查")
**事件**: lottery cron 报 "Script not found" 30+ 小时没人发现
- **根因**: 我创建的 `lottery_特码_cron.sh` 在 `~/.hermes/skills/trading/lottery-hk/scripts/` (skill 目录)
- **实际**: cron 期望 `~/.hermes/scripts/` (用户级 scripts)
- **修复**: `cp wrapper ~/.hermes/scripts/ + cronjob update script <name>`
**新增 cron `cron-self-check.sh`**:每小时 0 分自动检测 + 修复 + 仅 error 时推 QQ
- 静默模式: 正常不推
- 主动记录: 任何 wrapper 缺失 → 复制修复 → 推 QQ
## 🔴 用户主动反馈模式 (2026-08-06 实战)
| 用户反馈 | 触发原因 | 修复 |
|---|---|---|
| "余额不够的要通知啊,不然以为是Bug" | 锁/余额不足静默 | process_signal 显式推 QQ |
| "你算不出来就把字段删了吧" | unrealizedPnl 不准 | 平仓推送删字段 |
| "现在都平仓了,肯定解锁啊" | close 不解锁 | close 自动 release_lock |
| "每个 push 都要带锁状态" | 不知道当前锁了什么 | _locks_status_text() 附加 |
| "定时任务跑失败也不主动检查" | 没监控 | cron-self-check.sh |
| "错要主动记录" | advisor 失败不报 | order_errors.log + monitor |
| "不要主动 close" | 我误 close MU | "只查不操作" 原则 |
## 新增 references/文件
- `references/v4.5.47-2026-08-06-batch-snapshot-and-self-check.md` (本文)
- `scripts/cron-self-check.sh` (每小时 0 分检测 cron wrapper)
- `scripts/order-errors-monitor.sh` (每小时 5 分扫 advisor 错误)
## 关键代码改动总结
| 文件 | 改动 |
|---|---|
| `process_signal.py` | 锁推送(always)+ close 自动 release_lock(已锁)+ status='failed' 显式推送 + exit code 2 |
| `okx_position_advisor.py` | _log_error() 写 order_errors.log (set_leverage/place_order/sl_algo 失败) |
| `signal_tracker.py` | list_locks() 已有,但原 format_close_message 没附 |
| `~/.hermes/scripts/cron-self-check.sh` | 新增(cron `09ca1313822c` 小时跑) |
| `~/.hermes/scripts/order-errors-monitor.sh` | 新增(cron `81bd534cebfc` 小时 5 分跑) |
## 实战结论
1. **agent 必须主动监控**(cron + advisor errors)
2. **用户重复纠正的规则 → 写代码硬约束**(不止文档)
3. **静默即错** — 任何静默失败都要主动推
4. **不要主动 close 用户没确认的仓位** — "只查不操作"
5. **真成交 ≠ 推算** — PnL 算不出就删字段,让用户去 OKX app 看
## 教训元教训(meta-lesson)
用户行为模式:
- 用户**会主动纠正**之前犯的错(钝感)
- 用户**不要解释**,要直接修
- 用户**要主动**(cron/errors/locks),不要被动
- 用户**担心 bug 被误判**(锁/余额/精度/PnL 都要明示)
agent 行为模式:
- 主动监控 + 主动记录 + 主动推送(everything)
- 锁/关闭/平仓 = 都要 push_to_qq
- advisor execute 后必须 check_account 验证
- crontab 脚本必须在 ~/.hermes/scripts/(不在 skill 目录)
- 数值精度 = 0.001 整数倍(advisor 输出必须对齐)