# 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 ` **新增 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 输出必须对齐)