86 lines
4.2 KiB
Markdown
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 输出必须对齐)
|