101 lines
4.7 KiB
Markdown
101 lines
4.7 KiB
Markdown
# v4.5.60 (2026-08-22) BTC持仓来源误归属 + 三连ghost execute
|
|
|
|
**本次session三个新坑**(都是v4.5.54/56/57/58/59的延伸,**但模式已稳定**,建议升级为class-level规则):
|
|
|
|
---
|
|
|
|
## 坑1: BTC持仓来源误归属(第11次"你查了持仓再来看"风险)
|
|
|
|
**事件**:
|
|
- 熬鹰BTC空单信号2026-08-15 18:46进来 → process_signal输出`✅ 已推送`
|
|
- 我回复"你无BTC持仓"
|
|
- 用户反问"你查了持仓再来看" → 重查 → **BTC short 1.47张@10x avgPx 63,198 浮盈+$2.62 实际存在**
|
|
- 进一步trace → position_locks显示锁来源是**予与实盘**,不是熬鹰
|
|
|
|
**根因**:
|
|
- 熬鹰BTC signal进来时,BTC其实早就被**予与实盘**之前的加仓信号锁住了
|
|
- process_signal报告"无BTC持仓"是错的——予与的execute成功了,signal_dedup里的锁记录指向予与
|
|
- 我没有用锁追溯方法(查position_locks + confirmed_signals),直接口头推断"无持仓"
|
|
|
|
**回复侧硬规则(升级)**:
|
|
- 任何"无持仓/有持仓/是X的"回答前,**先跑check_account.py + 查position_locks**
|
|
- 如果position_locks有该币种记录 → trader归属以锁为准,不是以"最近一条信号"为准
|
|
- 持仓数字来自**实际positions数组**,不是来自signal_history.db的confirmed_signals(silent execute路径可能漏记录)
|
|
|
|
**实战追溯三步**(验证可执行):
|
|
```bash
|
|
# 1. 实时持仓 + 余额
|
|
python3 ~/.hermes/skills/trading/okx-auto-position/scripts/check_account.py
|
|
|
|
# 2. 锁来源
|
|
sqlite3 ~/.hermes/trading/signal_history.db "SELECT * FROM position_locks WHERE symbol='BTC';"
|
|
|
|
# 3. 触发execute的信号记录
|
|
sqlite3 ~/.hermes/trading/signal_history.db "SELECT * FROM confirmed_signals WHERE symbol='BTC' ORDER BY timestamp DESC LIMIT 3;"
|
|
|
|
# 4. 原始信号文本
|
|
sqlite3 ~/.hermes/trading/signal_dedup.db "SELECT * FROM recent_signals WHERE symbol='BTC' ORDER BY timestamp DESC LIMIT 1;"
|
|
```
|
|
|
|
---
|
|
|
|
## 坑2: 三连ghost execute(trader='未知'闸形同虚设,2026-08-22 实测)
|
|
|
|
**事件**: 同一次session连出3个"信号源未知"但实际execute成功的案例:
|
|
- SKHYNIX short 0.145张@2x (avgPx 1136.88, 浮盈+$1.10)
|
|
- BTC long 0.63张@5x (avgPx 65364.9, 浮亏-$0.01)
|
|
- HYPE long 26张@2x (avgPx 72.41, 浮亏-$0.41)
|
|
|
|
**根因**(v4.5.53闸 + v4.5.54修复都失效):
|
|
- 信号从signal_queue.db中**之前积压未消费**的消息里出来
|
|
- parse_signal()提取trader失败 → fallback到'未知' → 第一道闸skip
|
|
- 但signal_queue里**之前已经走过execute**了,新进来的信号只是notification重复
|
|
- process_signal看到'未知' → skip → 但实际仓已经在那里了
|
|
|
|
**判断规则(新,class-level)**:
|
|
- trader='未知' 信号 → **先查confirmed_signals + position_locks**看有没有对应记录
|
|
- 如果有 → 那是历史execute的notification,**持仓确实存在,只是这条信号本身不触发新execute**
|
|
- 报告: `[实测确认] {品种} {方向} {张数}张 来源:{trader} 历史execute已记录,本条不重复执行`
|
|
|
|
**修复方向**:
|
|
- [ ] process_signal.py加持仓变化检测(进入时check,出时check,diff)
|
|
- [ ] trader='未知' 信号进入时: `if locked_by_existing_trader: return 'already_executed'`
|
|
- [ ] signal_queue.db 加 `executed_at` 字段 + `executed_by` 字段,避免重复execute
|
|
|
|
---
|
|
|
|
## 坑3: 矿工Jasonleo 20+ reduce信号洪流(实测模板)
|
|
|
|
**事件**: 矿工持续推BTC/ETH short减仓信号(每次1-200张不等),我处理了20+条无持仓信号。
|
|
|
|
**应对模板**(本次验证可用):
|
|
```
|
|
[矿工{trader} {symbol} {side} {action}] {pos_change}张 @ {open_px} 当前{mark_px}, 已{profit_pct}%; 你无{short/long}持仓
|
|
```
|
|
|
|
**重点**:
|
|
- 减仓信号=同方向继续加仓的动作,**不触发自动execute**(本来就是空)
|
|
- 每条都简短报,**禁止分析**(v4.5.36铁律)
|
|
- "幻象加仓"识别(单条>1000张跳变) — v4.5.59已记录,但实测发现"加仓948张"这种300-1000区间也要警惕
|
|
|
|
**新判断规则**:
|
|
- 单条加仓跳变 > 1000张 → 不解读为真实信号,推"展示性"
|
|
- 单条加仓跳变 300-1000张 → 可能是真实但**仍不自动execute**(我们本来也没锁矿工的BTC/ETH)
|
|
- 单条加仓跳变 < 300张 → 正常,简短报告
|
|
|
|
---
|
|
|
|
## 实战session净状态
|
|
|
|
USDT $127.16(无冻结)→ HYPE long 26张@2x(浮亏-$0.41)
|
|
+ 累计本次session盈利: BTC long +$17.50 + 多个ghost close盈利
|
|
|
|
---
|
|
|
|
## 部署清单(下次session第一件事)
|
|
|
|
- [ ] process_signal.py trader='未知' 进入路径加 position_locks 反查
|
|
- [ ] check_account.py 输出加 `executed_by` 字段(从position_locks提取)
|
|
- [ ] agent 写"无持仓/有持仓"前硬性触发position_locks + confirmed_signals双查
|
|
- [ ] signal_queue.db schema升级:`executed_at` + `executed_by` 字段
|
|
- [ ] 矿工Jasonleo加入signal_tracker已知trader名单(BTC/ETH short 4-6x 仅推不跟) |