Files
Hermes-Skills/okx-auto-position/references/v4.5.38-symbol-normalization-1000pepe.md
T

84 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 兼容性失败)