# v4.5.5 (2026-07-08) 实战记录: PEPE 完整周期验证 + close 路径独立 bug ## 完整事件链 **时间**: 2026-07-08 下午-晚上 ### Phase 1: 信号来了执行失败 1. 熬鹰 1000PEPE 多单信号连发 10+ 条 (新开仓 + 加仓, 公告价格 0.00288 USDT/1000PEPE, 公告保证金 $300k+) 2. process_signal 推 QQ 成功, 但 advisor SSL 报错, **execute 实际未下单** 3. 用户多次追问"跟单了吗,已经过了2小时了" → "我靠,你为什么不重试,这么久了,还不赶紧推。" 4. agent 重跑 process_signal → advisor 报 `1000PEPE-USDT-SWAP` 不存在 (51001) ### Phase 2: 诊断合约错配 5. raw REST 查 `/api/v5/public/instruments?instType=SWAP` → 真实合约是 `PEPE-USDT-SWAP` 6. 关键发现: ctVal=10,000,000 PEPE/张, OKX 单位 = 1 PEPE 7. X 聚合社区显示 0.00288 USDT/1000PEPE, OKX 显示 0.00000288 USDT/PEPE → 数学一致,只是展示格式不同 ### Phase 3: 修复 parse_signal 8. process_signal.py parse_signal() 加归一化: ```python sym = sym.replace('USDT', '').strip() if sym == '1000PEPE': sym = 'PEPE' fields['symbol'] = sym ``` 9. 重跑 → advisor 算出 14.8 张 PEPE long @7x, execute 成功 10. 验证: USDT 从 $81 降到 $21 (冻结 $60+), 持仓确认 14.8 张 @ avgPx 0.000002881 (= 1000PEPE 单价 0.002881, 与信号 0.002888 误差 < 0.5%) ### Phase 4: 平仓触发 bug 11. 熬鹰 6+ 条连续减仓信号 (PEPE 价格下跌) → process_signal dedup 跳过 12. 熬鹰平仓信号来 → process_signal 返回 `✅ 平仓处理: error` 13. **bug 发现**: close_position_raw 用了 `1000PEPE-USDT-SWAP` 仍然查不到合约 ### Phase 5: 修复 close 路径 14. close_position_raw 加归一化: ```python inst_id = f"{symbol_usdt}-USDT-SWAP" if symbol_usdt == '1000PEPE': inst_id = 'PEPE-USDT-SWAP' ``` 15. 重跑 close_position_raw('1000PEPE', 'long') → PEPE long 14.8 张全平成功 16. order_id: 3745678821289287680 17. 锁亏: -$14.50 ### Phase 6: 推送 + commit 18. 推送 QQ 报告平仓结果 19. commit: `v4.5.5: 1000PEPE→PEPE 归一化 (开仓+close路径都修)` 20. git push → 502 Bad Gateway (git.hi6k.com 不稳定, 待重试) ## 核心教训 ### 教训 1: 任何 1000xxx 包装币种必须两路都修 - parse_signal 处理开仓/加仓信号 → 归一化 - close_position_raw 处理平仓信号 → **也要归一化** - 修一处就够会导致"开了平不掉" 或 "信号推了但持仓没记录" ### 教训 2: 修复后必须端到端测试 修复 1000xxx 包装币种的代码后,验证流程: 1. 开仓信号 → execute 成功 → USDT 冻结 + 持仓增加 2. 平仓信号 → execute 成功 → USDT 解冻 + 持仓清零 3. 推送 QQ 验证数据一致性 ### 教训 3: 价格单位换算容易出错 | 来源 | 显示 | 实际 | |---|---|---| | X 聚合 | 0.00288 USDT/1000PEPE | = 0.00000288 USDT/PEPE | | OKX | 0.00000288 USDT/PEPE | = 0.00288 USDT/1000PEPE | **验证公式**: `OKX价格 × 1000 ≈ X聚合价格` (误差 < 1% = 滑点) ### 教训 4: 用户对延迟极不耐烦 **用户原话**: - "跟单了吗,已经过了2小时了" - "我靠,你为什么不重试,这么久了,还不赶紧推。" **强制规则**: - 用户问"跟单了吗" / "执行了吗" → **立即**重跑 process_signal, **不反问** - 用户说"重试" / "赶紧推" / "还不跟" → **立即**重跑 + execute + raw REST 反查 - 重试完成 → 简短报"已跟 X 张 @ Yx, USDT Z",不展开 ### 教训 5: git push 失败不要 panic git.hi6k.com 经常 502: - 本地 commit 就位即可,数据没丢 - sleep 30-60s 重试,通常恢复 - 不需要回滚或重做 commit ## 已知 1000x 包装币种 (扩展) | 信号格式 | OKX 合约 | 验证状态 | |---|---|---| | 1000PEPE | PEPE-USDT-SWAP | ✅ v4.5.5 完整周期验证 | | 1000SHIB | SHIB-USDT-SWAP | ⚠️ 待测 | | 1000FLOKI | FLOKI-USDT-SWAP | ⚠️ 待测 | | 1000LUNC | LUNC-USDT-SWAP | ⚠️ 待测 | | 1000XEC | XEC-USDT-SWAP | ⚠️ 待测 | | 1000BONK | BONK-USDT-SWAP | ⚠️ 待测 | | 1000SATS | SATS-USDT-SWAP | ⚠️ 待测 | **新币种到来时**: 先查 OKX public/instruments 确认合约名, 再决定是否需要归一化。 ## 给下次 session 的 action - [ ] 本地 commit v4.5.5 已就位 → 重试 git push (sleep 30) - [ ] 在 process_signal.py 加 `if sym.startswith('1000') and sym[4:] in ('PEPE','SHIB','FLOKI','LUNC','XEC','BONK','SATS'): sym = sym[4:]` (通用模式, 不只写 1000PEPE) - [ ] 在 close_position_raw 加同样通用归一化 - [ ] 给所有 advisor 错误加 fallback: 用 raw REST `/api/v5/public/instruments` 自动找替代合约 - [ ] 后续遇到 1000SHIB/1000FLOKI 等直接走归一化, 不需要再排查 ## 关联 - v4.5.37: 第7次违规 + 1000PEPE execute 漏处理 - v4.5.38: symbol normalization 1000PEPE → PEPE (parse_signal 修复) - spcx-silent-fail-repro.md: 类似的小币种 execute 失败 (SPCX / MU 也出现过) - v4.5.18: execute 反查硬约束 (USDT 冻结 + 持仓张数验证)