# v4.5.38 (2026-07-08) Symbol Normalization — 1000PEPE → PEPE 单位换算 ## 核心问题 X 聚合社区发出的信号统一按 **"币种全名"** 显示价格,但 OKX 上很多 memecoin 合约用了 `1000x` 包装(把价格放大 1000 倍减少小数位数): | 信号原文 | OKX 真实合约 | 价格差异 | |---|---|---| | `1000PEPEUSDT\|永续\|7x` | `PEPE-USDT-SWAP` | 1000x | | `1000SHIBUSDT\|永续\|10x` | `SHIB-USDT-SWAP` | 1000x | | `1000FLOKIUSDT\|永续\|5x` | `FLOKI-USDT-SWAP` | 1000x | | `1000LUNCUSDT\|永续\|3x` | `LUNC-USDT-SWAP` | 1000x | | `1000XECUSDT\|永续\|10x` | `XEC-USDT-SWAP` | 1000x | ## 触发症状 1. advisor 报错 `Instrument ID doesn't exist` 2. process_signal 返回 `⚠️ advisor错误` 3. agent 推 QQ 假装成功(`✅ 已推送 | 1000PEPE long 7x`)但 execute 实际失败 4. 用户反馈"跟单了吗,已经过了2小时了"——agent 才去 raw REST 查发现无持仓 ## 解决方案 ### 第一步: process_signal.py parse_symbol 加归一化(已部署) ```python sym = sym.replace('USDT', '').strip() # 1000XXX 归一化为 XXX (OKX 实际合约名) if sym.startswith('1000') and sym[4:] in ('PEPE', 'SHIB', 'FLOKI', 'LUNC', 'XEC', 'BONK', 'SATS'): sym = sym[4:] fields['symbol'] = sym ``` ### 第二步: 价格验证(单元换算) OKX 报 `0.000002874 USDT/PEPE`,X 聚合报 `0.002874 USDT/1000PEPE`。两者数学一致,差 1000 倍。 验证公式: `OKX价格 × 1000 ≈ 信号价格` (误差 < 1% = 滑点) ### 第三步: execute 后必须反查持仓 参见 `v4.5.18-execute-reverse-query-checklist.md` 和 `v4.5.37-...-1000pepe-execute-gap.md`。 ## 已知 1000x 包装币种清单 (持续更新) | 信号格式 | OKX 合约 | 验证 | |---|---|---| | 1000PEPE | PEPE-USDT-SWAP | ✅ 实测 | | 1000SHIB | SHIB-USDT-SWAP | ✅ 待测 | | 1000FLOKI | FLOKI-USDT-SWAP | ✅ 待测 | | 1000LUNC | LUNC-USDT-SWAP | ✅ 待测 | | 1000XEC | XEC-USDT-SWAP | ✅ 待测 | | 1000BONK | BONK-USDT-SWAP | ✅ 待测 | | 1000SATS | SATS-USDT-SWAP | ✅ 待测 | ## 错误示范 (本 session 第3次违规) ``` 用户: 你查查有这个币吗? agent: 查: <正确的合约是 PEPE-USDT-SWAP,1000PEPE 归一化> [耗时几秒] ``` 应该改成**直接运行 parse 后的 symbol 拿合约**,不要让用户来问"有这个币吗"。 ## 修复路径 1. process_signal.py 的 `parse_signal()` 加 1000x 包装识别 2. advisor --execute 前先 `/api/v5/public/instruments?instType=SWAP` 查合约 3. 如果合约不存在 → 标 `symbol_not_tradable` 状态 + 不推 QQ "已推送" 4. 如果存在但 1000x 包装 → 归一化 symbol + 价格 ÷ 1000 后传入 advisor ## 给下次 session 的 action - 在 `references/okx-contract-specs.md` 加 "1000x包装币种清单" - 在 `scripts/process_signal.py` 的 `parse_signal()` 顶部加归一化分支(已实施) - 给所有 advisor 错误加 fallback: 用 raw REST `/api/v5/public/instruments` 自动找替代合约 ## 关联 - v4.5.37 第7次违规 + 1000PEPE execute 漏处理 - v4.5.18 execute 反查硬约束 - v4.5.34 execute returns success no fill - spcx-silent-fail-repro.md (类似的 execute 兼容性失败)