# 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` — 实时校验工具