4.7 KiB
4.7 KiB
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→ closepnl < 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 这条规则会导致:
- 汇总播报含 "已实现盈亏: -123 USDT" + 文本里出现"减少"等描述 → 误判 reduce
- 实时更新信号含"已实现盈亏" → 同上误判
新规则只识别显式"减仓"两字, 大幅减少误判。
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% 过滤跳过。
验证方法
# 测试 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的消耗。"