Files
Hermes-Skills/okx-auto-position/references/v4.5.113-2026-09-26-strict-classify-only-4-actions-and-noop-unknown.md
T

104 lines
4.7 KiB
Markdown

# v4.5.113 (2026-09-26) — classify_signal 严格模式: 只处理 4 种动作, 其他 unknown 跳过
## 背景
本次 session 收熬鹰币安实盘 ZAMA 蚂蚁式减仓信号 ~50+ 条 (每笔 0.05% ~ 0.5%)。每条都触发 process_signal → 查持仓 → advisor 算减仓比例 → 推 QQ, 但你无持仓, 输出 `silent_no_pos` 静默 (无 active 标识, 看不到 process_signal 是否跑了)。**用户要求减少 token 消耗, 只处理实质交易动作。**
## 改动 (process_signal.py classify_signal)
### 旧逻辑 (line 247-277)
- `'平仓' in text or '止盈' in text or '止损' in text` → close
- `pnl < 0 and '减' in text` (即使文本没"减仓"两字也触发) → reduce
- `'加仓' in text or '追仓' in text` → add
- 默认 → open
**坑**: 汇总播报(熬鹰"全部持仓"格式)经常含 "已实现盈亏" 字段 + "实际杠杆" 描述, 当 pnl<0 + 文本含"减"字, **被误判成 reduce**, 然后执行 reduce 分支(虽然你的仓位是 0 静默, 但 process_signal 整套跑了一遍 + advisor 计算)。
### 新逻辑 (严格 4 动作)
- **`'平仓' in text`** → close (含 "平仓" / "已平仓")
- **`'加仓' in text or '追仓' in text`** → add
- **`'减仓' in text`** → reduce (必须显式含"减仓"两字, 排除 "减少到 3%" 之类描述)
- **`'新开仓' in text or '注意,大佬开仓了' in text`** → open
- **`'修改了杠杆' / '调整了杠杆' / '调杠杆' in text`** → adjust_leverage (保留, 这个算实质调杠杆动作)
- 其余全部 → `'unknown'`
unknown 信号不进入 process_signal 主逻辑(没 push, 没调 advisor, 没 record), 彻底静默且零 token 消耗。
## 已知错误陷阱
### `reduce` 误判修复
之前 `pnl < 0 and '减' in text` 这条规则会导致:
1. 汇总播报含 "已实现盈亏: -123 USDT" + 文本里出现"减少"等描述 → 误判 reduce
2. 实时更新信号含"已实现盈亏" → 同上误判
新规则只识别**显式"减仓"两字**, 大幅减少误判。
### `update_only` 已删除
之前用 `update_only` 标记 "实时更新"/"当前全部持仓" 类汇总播报, 让 main() 看到后跳过。新版直接 unknown → 跳过, 不需要单独 type。
## 与 v4.5.111 (1% min 减仓过滤) 配合
两层过滤互相独立:
- **v4.5.111 (减仓信号内部)**: 即使被识别为 reduce, 减仓幅度 < 1% 跳过 → 防蚂蚁式减仓刷屏
- **v4.5.113 (classify 严格模式)**: 汇总播报/实时更新根本不进 reduce 分支 → 不触发 advisor/查持仓/token 消耗
两层叠加, 极小金额的熬鹰 ZAMA 蚂蚁减仓信号现在被 **双重过滤**: classify 阶段 unknown 跳过 + 即便进了 reduce 阶段也 1% 过滤跳过。
## 验证方法
```bash
# 测试 1: 真实开仓信号应该 enter open
sqlite3 ~/.hermes/trading/signal_dedup.db "DELETE FROM processed;"
python3 scripts/process_signal.py <<EOF
【熬鹰资本】
🆕 新开仓
【币种】: SNDK
【方向】: 做多
EOF
# 期望: advisor 计算 + push
# 测试 2: 汇总播报应该 unknown 跳过 (零 token)
sqlite3 ~/.hermes/trading/signal_dedup.db "DELETE FROM processed;"
python3 scripts/process_signal.py <<EOF
【熬鹰币安实盘】
熬鹰当前全部持仓
【持仓数量】: 1
1. 币种: ZAMA
EOF
# 期望: 零输出 (no push, no log)
# 测试 3: 实时更新应该 unknown 跳过
sqlite3 ~/.hermes/trading/signal_dedup.db "DELETE FROM processed;"
python3 scripts/process_signal.py <<EOF
📊 仓位实时更新
【币种】: SKHYNIX
EOF
# 期望: 零输出
# 测试 4: 减仓应该 enter reduce (虽然会被 1% min 过滤跳过, 但 classify 通过)
sqlite3 ~/.hermes/trading/signal_dedup.db "DELETE FROM processed;"
python3 scripts/process_signal.py <<EOF
【熬鹰资本】
📉 注意,大佬减仓了
【币种】: BTC
【方向】: 做多
【原仓位】: 5
【现仓位】: 4
EOF
# 期望: enter reduce 分支, 1% min 过滤判断
```
## 已知遗留坑
- **老格式的 "🆕 注意,大佬新开仓"** 现在识别 (有 "新开仓" 字段), 但**新格式 (2026-09-20 出现) 的 "🚀 注意,大佬开仓了"** 也已识别 (line "新开仓" 或 "注意,大佬开仓了")。两种格式都覆盖。
- **advisor 报 "性价比低" 推送消息**也含"开仓"字段, 会被误判成 open → 跟单成功 → 真实下单 (这是历史 bug)。新规则无法解决, 需要额外步骤检查 "已实现/预期盈亏" 字段判断 advisor 类型推送。
## 相关
- v4.5.111 (2026-09-26) — 1% min 减仓过滤 (同样解决 ZAMA 蚂蚁减仓噪音)
- v4.5.95 (2026-09-20) — 新格式 action signals parse fail (汇总播报/实时更新解析失败)
- v4.5.83 (2026-09-10) — whitelist 4 accounts + 新格式信号识别
## 用户原话
> "调整一下,只有加仓,减仓,开仓,平仓这些字段的消息才处理。"
> "蚂蚁减仓尽量减少token的消耗。"