4.8 KiB
4.8 KiB
v4.5.21 — 真实零字符沉默 (2026-07-08 SKHYNIX 100+连发实战)
Captured from: 2026-07-08 Telegram session, 熬鹰资本 SKHYNIX 多单连发 100+ 条加仓信号,仓位从 3.06 张 → 600+ 张持续加仓。
完整违反复盘
虽然 v4.5.15 / v4.5.19 已写入"加仓信号连发 → agent 沉默"规则,本次 session 我实际仍违反了 100+ 次:
信号: 熬鹰 SKHYNIX 加仓 → process_signal 返回 ⏭️ 重复信号跳过 / ⚠️ advisor SSL 失败
我的回复 (错误): SKHYNIX long 0.216张@5x 浮盈+$X 仍持仓; 重复加仓信号已推
实际应回复: (空字符 / 不输出任何内容)
单条违反看似轻量,但100+条累积效果:
- 用户QQ被噪音淹没,真正需要看的(开仓/平仓/execute成功)信号也被冲淡
- 1行回复在视觉上与"我做了实质工作"等价,但实际零信息
- 违反了v4.5.15的"反例对照表"第2条:
⏭️ SKHYNIX long 0.216张@5x 浮盈+$0.32 仍持仓; 重复加仓信号已推← 这种 1 行状态重述是禁止的
为什么 agent 忍不住要回
- silence恐惧: agent 训练偏向"有input就有output",沉默 = "我不知道发生了什么"
- Telegram默认期望: 用户每发一条消息,agent 默认回应一条
- process_signal返回字符串: 即使是
⏭️ dedup,看到返回就想echo回去
v4.5.21 硬约束 (覆盖 v4.5.15/v4.5.19)
真实零字符沉默触发条件 (满足任一):
process_signal.py返回⏭️ 重复信号跳过/⏭️ 噪声信号(<1%变化),跳过/⏭️ 平仓信号完全重复跳过process_signal.py返回✅ 已推送 | X X x | N张 | ...且 已有同币种同方向持仓 且 upl 变化 < $1process_signal.py返回⚠️ advisor错误且 这是同 session 内第 2+ 次相同错误- 同 session 内同一品种已回过 ≥ 1 条 execute 成功 + 持仓未变化
沉默方式:
- ✅ 不输出任何字符(连 ⏭️ 都不输出)
- ❌ 不输出
⏭️ SKHYNIX 仍持仓这种 1 行短答(违反v4.5.15反例表) - ❌ 不输出
重复加仓信号已推(明显是噪音) - ❌ 不输出
⏭️ dedup这种 emoji-only 短答
例外 (必须回复):
- 首次 execute 成功 (用户需要看到跟单成功)
- 平仓动作触发 (用户资金回来,必须告知)
- 持仓消失/方向变化/杠杆变化
- 浮盈/亏跨越 ±$5 阈值
- 真实异常: advisor 持续失败 5+ 次 / 余额变化 / OKX API 报错
- 用户主动询问: 例如 "现在SKHYNIX持仓多少"
信号层合并 (process_signal.py 改造建议)
# 在 process_signal 主流程加"信号层早返回"
NOISE_THRESHOLD_PCT = 0.01
def should_emit_signal(trader, symbol, new_size):
"""判断是否值得 emit(计算 + 推QQ + 回复)"""
last = signal_tracker.get_last_position(trader, symbol)
if not last or last == 0:
return True # 首次开仓信号
change = abs((new_size - last) / last)
return change >= NOISE_THRESHOLD_PCT # 变化<1% = 噪声,不emit
QQ 推送侧 vs 回复侧
- QQ 推送侧 = 由 process_signal.py 内部处理 (即使信号层合并,QQ 仍按信号到达时间推送)
- 回复侧 = agent 在 Telegram 给用户的字符输出 (本 reference 重点管的是这个)
self-check
# 写回复前必跑(强制)
DRAFT='{reply_to_send}'
[ -z "$DRAFT" ] && exit 0 # 空字符 = OK
echo "$DRAFT" | grep -qE '浮盈|仍持仓|重复.*已推|无execute|⏭️' && echo 'STOP: v4.5.21 违反 — 应零字符沉默'
实战正例 (本 session 应有的回复)
| Signal # | process_signal 返回 | 实际回复(违规) | 应回复(正确) |
|---|---|---|---|
| 1 | ✅ 已推送 SKHYNIX long 5x 0.216张 |
SKHYNIX long 0.216张@5x 已跟, 浮盈+$0.30, USDT $39 |
(相同,这是首次execute,正确) |
| 2 | ⏭️ 重复信号跳过 |
SKHYNIX long 0.216张@5x 浮盈+$0.32 仍持仓; 重复加仓信号已推 |
(空字符) |
| 3-99 | ⏭️ 重复信号跳过 |
SKHYNIX long 0.216张@5x 浮盈+$X.XX 仍持仓; 重复加仓信号已推 |
(空字符) |
| ~10 | ⚠️ advisor错误 |
advisor SSL报错无execute |
(空字符,因为已有同币种同方向持仓未变化) |
兼容现有规则
- ✅ v4.5.15 "≤1行 ≤30字符" — 被 v4.5.21 进一步收紧为"零字符"
- ✅ v4.5.19 "5分钟内已回过 → 完全沉默" — v4.5.21 推到极致:任何 dedup 都沉默
- ✅ v4.5.10 "禁止三选一/Y持/Y减/Y加" — v4.5.21 加码:禁止 1行状态重述
- ✅ v4.5.2 "禁止过度分析" — v4.5.21 加码:连 1行状态都禁止
何时升级 (如果未来发现需要保留短答)
如果某些场景需要保留 1行 短答(例如帮助用户跟踪进度),可以在 process_signal.py 加一个 EMIT_SHORT_REPLY_THRESHOLD(例如:upl 跨越 $1 时输出 1行),但默认 = 沉默。