Files
Hermes-Skills/okx-auto-position/references/v4.5.21-real-zero-silence.md
T

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 忍不住要回

  1. silence恐惧: agent 训练偏向"有input就有output",沉默 = "我不知道发生了什么"
  2. Telegram默认期望: 用户每发一条消息,agent 默认回应一条
  3. process_signal返回字符串: 即使是 ⏭️ dedup,看到返回就想echo回去

v4.5.21 硬约束 (覆盖 v4.5.15/v4.5.19)

真实零字符沉默触发条件 (满足任一):

  1. process_signal.py 返回 ⏭️ 重复信号跳过 / ⏭️ 噪声信号(<1%变化),跳过 / ⏭️ 平仓信号完全重复跳过
  2. process_signal.py 返回 ✅ 已推送 | X X x | N张 | ... 已有同币种同方向持仓 upl 变化 < $1
  3. process_signal.py 返回 ⚠️ advisor错误 这是同 session 内第 2+ 次相同错误
  4. 同 session 内同一品种已回过 ≥ 1 条 execute 成功 + 持仓未变化

沉默方式:

  • 不输出任何字符(连 ⏭️ 都不输出)
  • 不输出 ⏭️ SKHYNIX 仍持仓 这种 1 行短答(违反v4.5.15反例表)
  • 不输出 重复加仓信号已推 (明显是噪音)
  • 不输出 ⏭️ dedup 这种 emoji-only 短答

例外 (必须回复):

  1. 首次 execute 成功 (用户需要看到跟单成功)
  2. 平仓动作触发 (用户资金回来,必须告知)
  3. 持仓消失/方向变化/杠杆变化
  4. 浮盈/亏跨越 ±$5 阈值
  5. 真实异常: advisor 持续失败 5+ 次 / 余额变化 / OKX API 报错
  6. 用户主动询问: 例如 "现在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行),但默认 = 沉默