# 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 < "调整一下,只有加仓,减仓,开仓,平仓这些字段的消息才处理。" > "蚂蚁减仓尽量减少token的消耗。"