5.3 KiB
5.3 KiB
v4.5.91 — Advisor-vs-Executed Size Divergence Matrix + 调杠杆 Parsing Pitfall
会话: 2026-09-14 全周期 (SPCX → MSTR → ZEC → DASH → DOGE → ASTER → CL → ETH → ZEC 实战), 4 个熬鹰号白名单信号风暴.
核心反模式: Advisor 报 X 张 → 实际 execute Y 张 (Y >> X)
多次实测 advisor 返回的 rec['contracts'] 与 check_account 验证后的实际持仓严重不一致. advisor 路径算的张数经常远小于实际成交张数 (1.5x~4200x 偏差).
| 币种 | 信号 | advisor 报 | execute 实际 | 倍数 | 后果 |
|---|---|---|---|---|---|
| ZEC | 新开仓 long | 0.01 张 | 42 张 | 4200x | 几乎满仓,USDT 可用 $0 |
| TRUMP | 新开仓 long | 137 张 | 586 张 | 4.3x | 占用保证金 $155, 几乎满仓 |
| HYPE | 新开仓 long | 1 张 | 25 张 | 25x | 占用保证金 $101, USDT 可用 $2 |
| BTC | 新开仓 short | 0.13 张 | 0.83 张 | 6.4x | 占用保证金 $217, USDT 可用 $1 |
| CL | 新开仓 short | 52 张 | 157 张 | 3x | 占用保证金 $195, USDT 可用 $96 |
| SKHYNIX | 新开仓 long | 0.039 张 | 0.293 张 | 7.5x | 第一次误开 0.293 (误判为 open), 后续浮亏 |
| SKHYNIX | 减仓 signal | "减仓 1.045 张" (方向反了) | 实际未减 | n/a | 减仓方向被错判成加仓 (advisor reduce 方向 bug 第 3 次实证) |
根因 (未完全定位): advisor 路径与 execute_order 路径用的是两套独立的张数计算. advisor 的 format_recommendation() / cost_performance.py 输出 rec['contracts'], 但 execute_order 走自己的 execute_signal_order() 计算, 两者结果差异巨大. v4.5.89 加 hard pre-trade check 缓解了一部分 (CL 98% bug), 但根因未根治.
关键铁律 (验证第 N 次)
- 推送成功 ≠ 订单落地: 任何信号处理完, 必须
check_account.py验证实际持仓变化. 不要相信✅ 已推送 | XX long 10x | 0.01张这种消息. - 回复用户必须报实际成交量: 写 "我跟了 0.01 张" 是误导, 应该是 "系统回报 0.01 张, check_account 验证实际开了 42 张".
- advisor 报"性价比低"曾被当 skip 信号, 现在去掉后仍可能隐性 execute. 每个信号后跑
check_account是唯一的真相源. - 减仓信号被 advisor 报成加仓方向: 第 3 次实证 (前两次是 v4.5.84 和 v4.5.87). 同样必须 check_account 验证.
- 单币种仓位可能瞬时突破 70% 红线 (CL 98%, ZEC/TRUMP 100%). 风险敞口是熬鹰(实际杠杆 0.45-2.5x) 的 5-22 倍.
调杠杆信号 Parsing Pitfall (实测第 3 次)
信号原文: 🔧 注意, 大佬修改了杠杆 3→5
反模式: agent 自己 echo "5x" (凭印象, 从历史推算)
正解: parse_signal 必须从 →N 后取数字:
def _extract_target_leverage(text):
m = re.search(r'杠杆[^\n]*→\s*(\d+)\s*x?', text)
if m:
return int(m.group(1))
m = re.search(r'杠杆\s*(\d+)\s*->\s*(\d+)\s*x?', text)
if m:
return int(m.group(2))
return None
实战错误案例 (本次 session):
- 信号
修改了杠杆 3→4→ agent 凭印象认为"4x"但又推到 "5x" → user "信号只到了4" 提醒 - 信号
修改了杠杆 10→5→ agent 推 "5x" (对的) 但随后另一条5→4调杠杆被 OKX 59108 拒 (cross 模式保证金不足)
Close Null-Guard 模式 (proxy 抽风时必备)
close_position_raw 在 proxy 抽风时返回 None (因为 _okx_raw_request 内部 fetch 失败). 直接 close_result['action'] 会 TypeError.
修复 (process_signal.py:842):
close_result = close_position_raw(symbol_usdt, signal_side_en)
# proxy 抽风可能让 _okx_raw_request 返回 None, 加 null guard
if not close_result:
return f"❌ 平仓失败: _okx_raw_request 返回 None (proxy 抽风?) | {symbol_usdt}"
action = close_result['action']
配套动作: 这种情况下 user 需要:
- agent 重跑 process_signal (5-10s 后 proxy 可能恢复)
- agent 直接 raw REST 下平仓单 (
templates/manual_order_template.py::close_long/close_short) - user 自己用 OKX app 手动平 (最稳妥, 不依赖 proxy)
实战: 满仓 → 平仓 → 再开仓 反复 (本次 session 真实路径)
- ZEC 新开仓 (1.43 张, advisor bug) → 占满 100%
- SKHYNIX 加仓信号 (实际跟了) → 98% 满仓
- SKHYNIX 平仓 → 释放到 28% 仓位
- DASH 新开仓 347 张 → 70% 仓位
- DASH 加仓到 407 张 → 80% 仓位
- DOGE 新开仓 → 70% 仓位
铁律:
- 满仓时 advisor 报 "建议 X 张", 但 execute 路径独立计算 → execute 实际仍能下(零 USDT 可用也被下)
- 满仓状态下任何新信号都有 100% 概率导致 "再开仓" (因为 advisor 不查 USDT 可用)
- user 必须自己判断 "现在能不能开" — advisor 报"性价比低" 已去掉, 没这个护栏了
Refs / 相关章节
- v4.5.89 — CL 98% bug + advisor free 字段不可信 (同主题)
- v4.5.84 — reduce 隐性失败 + 手动比例减仓 (同主题, reduce 路径)
- v4.5.82 — advisor 建议量偏差 (1.5x~25x), 同主题
- v4.5.78 — memory + tool 边界 (silent + 不抛问句铁律来源)
- v4.5.86 — 单币种 70% 上限配置化 (对策, 但未根治)
- v4.5.90 — $200 cap + $1000 disable (硬 pre-trade check)
templates/manual_order_template.py— proxy 抽风时手动 execute 模板references/post-execute-verification-checklist.md— execute 后必须 check_account 验证