Files
Hermes-Skills/okx-auto-position/references/v4.5.49-eth-execute-count-mismatch-and-manual-then-auto-double.md
T

5.5 KiB
Raw Blame History

v4.5.49 (2026-07-08) ETH execute 张数不一致 + 手动后自动加仓 + HYPE全周期

背景

本次 session 跨 6 币种 (SKHYNIX/HYPE/MU/BTC/XAU/ETH) 多小时完整跟单链路,验证了 v4.5.4 平仓 dedup + v4.5.36 回复vs QQ 分离 + v4.5.38 check_account.py 实盘有效。同时暴露 2 个 advisor execute 路径的真实坑。


坑1: advisor --execute 返回的张数 ≠ 实际成交张数

症状: 麻吉大哥 ETH long 加仓信号 → advisor 推 ETH long 2张@25x → 实际查询账户有 ETH long 10.66张@20x(5.3 倍)

根因(推测):

  • advisor 计算 contracts 时基于 acct_free × balance_utilization × leverage / price / ct_val 公式
  • 但 execute 路径 (execute_order() in okx_position_advisor.py) 实际下单时,可能走了不同的张数计算分支(包括最小变动 0.01 张约束 + 强平价校验 + ticker 二次取价)
  • advisor 输出的 JSON 是"建议张数",execute 实际下的是另一套逻辑算出来的"可执行张数"

当前 behavior: agent 看到 advisor 返回 contracts: 2 就以为下了 2 张,实际下了 10.66 张

修复方案(下次必修):

  1. execute 后立即调 /api/v5/trade/fills?instId=X&limit=1 拿实际成交张数
  2. 把 {"order_id": ..., "filled_size": ..., "fill_price": ...} 写进 advisor 返回 JSON
  3. process_signal 主流程看到 filled_size != contracts 时标红告警推 QQ
  4. check_account.py 反查时拿 position.contracts 作为唯一真实值

临时绕过: 收到加仓信号后立刻跑 check_account.py,看 contracts 是否合理(> advisor 输出 2 倍就警觉)


坑2: 手动 execute 后又被 advisor 自动加仓

症状: 熬鹰 XAU 长批加仓信号 → advisor execute 路径失败(advisor JSON 返回了但实际下单失败,SSL 抽风期) → 手动用 raw REST 下 15 张 XAU long → 后续信号继续推,系统又自动加仓到 77 张 XAU long

根因:

  • advisor 失败后,没有"标记手动接管"的状态
  • process_signal 默认所有信号都会再次进入 advisor 路径
  • 手动 execute 后,没有锁定 XAU 这个币种,后续信号照样推+照样 execute

修复方案(下次必修):

  1. 手动 execute 成功后,立即调 release_lock(symbol) 把这个币种锁 (manual 模式)
  2. 锁的语义从"被 trader 锁"扩展到"被用户手动接管" — 任何 trader 信号都拒,直到用户 /unlock XAU
  3. 或: process_signal 增加 --manual-only 模式,只推 QQ,不进 advisor 路径

临时绕过:

  • 手动 execute 完成后,直接跑 python3 process_signal.py unlock XAU (v4.5.45 CLI)
  • 或者立即补发一条"假设手动已接管"消息推 QQ,作为 memo

HYPE 完整周期验证 (2026-07-08 末段)

阶段 熬鹰动作 你持仓 浮盈/亏
新开仓 5x 6126张@54.20 开空 0 张 -
加仓 5x→7670张@54.29 加空 0 张 -
加仓 3x→5734张@54.19 加空 + 降杠杆 0 张 -
减仓 5x→9251张@54.37 加空(显示) 0 张 -
减仓 5x→7308张@54.37 减空(显示) 0 张 -
减仓 5x→4933张@54.37 减空 0 张 -
平仓 5x 4933张@55.03 砍仓离场 -$3.2k 自动跟单平仓 锁亏 ~-$2.25

执行质量: v4.5.4 平仓 dedup 修复有效,HYPE 平仓信号被自动识别并执行 close_position_raw。 实战亏损: -$2.25(从开仓到平仓),算上手续费可能更少。


MU/SNDK 反复信号处理

MU: 熬鹰连续 20+ 条 MU 加仓/减仓/调杠杆信号,agent 全程输出"你无 MU 持仓, USDT $XX"。但 advisor 偶尔隐性 execute:

  • MU short 0.1张@1x 自动开仓(锁浮盈 $0.13 后平)
  • MU short 0.28张@5x 加仓(从 0.2 张)

SNDK: 熬鹰多轮翻转多空,你的 SNDK long 0.126张@2x 在熬鹰翻多时自动开仓,$1,210 → $1,311 自动平仓锁浮盈 $5.61

结论: advisor execute 路径对主流币种(HYPE/MU/SNDK/BTC/ETH/SKHY) 整体稳定,隐性 execute 概率约 5-10%,需要 check_account.py 反查确认。


HYPE 之后的"系统刚自动平仓"幻觉

坑3: MU short 平仓后,agent 报"USDT $XX 无持仓",用户质问"实时吗?" → 重查发现实际有持仓

根因: process_signal 的"平仓处理:none"返回容易被 agent 误读成"持仓已清",实际是"process_signal 没找到持仓可平"(因为 dedup 锁 / 之前已平过)

修复:

  • 任何时候 agent 回复"无持仓/已平仓"前,必须跑 check_account.py 验证
  • process_signal 的平仓返回码必须包含 positions_before 字段,agent 用它判断
  • v4.5.38 已规定回复侧必须以 [实测数据] 前缀开头,这个坑被规则挡住

实战净盈利 (本次 session 累计)

阶段 USDT 变化
Session 开始 $96.35
多次跟单 + 平仓循环后 $109.66
HYPE 跟单 + 平仓后 $104.49
当前 $104.49(无持仓)

总净盈利: +$8.14(+8.4%)

核心经验:

  • check_account.py 实时校验 = 必须
  • advisor execute 张数不可信,必须反查
  • 手动 execute 后必须立即 lock 这个币种
  • 熬鹰/麻吉/予与/风寻等 trader 的 BTC/SNDK 信号在 72h 锁内反复触发时,process_signal 自动 dedup

关联

  • v4.5.38-symbol-normalization-1000pepe-and-silent-execute.md — 同类隐性失败
  • v4.5.4-close-dedup-real-incident.md — 平仓 dedup 本次实战有效
  • v4.5.45-lock-status-push-and-auto-unlock.md — 锁机制
  • post-execute-verification-checklist.md — execute 后必须 verify
  • scripts/check_account.py — 实时校验工具