Files
Hermes-Skills/okx-auto-position/references/okx-1000pepe-symbol-fuzziness.md
T

75 lines
2.6 KiB
Markdown

# 1000PEPE 等包装币种 symbol 归一化 (2026-07-15 实测)
## 问题
OKX 包装币 (1000PEPE / 1000SHIB / 1000BONK 等) 在不同 API 端点用不同名字:
| API 端点 | symbol |
|---------|--------|
| TG 信号原文 | `1000PEPEUSDT` |
| `process_signal` 解析 | `1000PEPE` (剥 `USDT`) |
| OKX V5 API `instId` | `PEPE-USDT-SWAP` (OKX 已归一, 1000x 包装在 contract 里) |
| OKX 实际 ticker | `PEPE/USDT:USDT` (ccxt) |
## Symptom
```python
# advisor 找不到币种, 报错:
{"error": "Instrument ID, Instrument ID code, or Spread ID doesn't exist."}
```
→ 整条信号无法处理 → "⚠️ 1000PEPE 做多 平仓信号处理失败" → 推送 QQ 失败告警。
## 解决
**两路归一化**:
### A. `parse_signal` (parse_signal.py) — 1000PEPE → PEPE
```python
sym = sym_raw.replace('USDT', '').strip() # '1000PEPEUSDT' → '1000PEPE'
# 剥掉 1000x 包装, 走 OKX 真实合约名
if sym.startswith('1000') and sym != '1000PEPE':
# 例外: 1000PEPE 是特殊名(OKX 实际合约就叫 1000PEPE-USDT-SWAP)
pass
if sym == '1000PEPE': # 单独处理
sym = 'PEPE'
```
### B. `recommend_position` (okx_position_advisor.py) — 模糊匹配
```python
# 多种 inst_id 试: ETH-USDT-SWAP / ETHUSDT-USDT-SWAP / 1000PEPE-USDC-SWAP
candidates = [
f"{base}-USDT-SWAP", # PEPE-USDT-SWAP (去 1000)
f"{base_alt}-USDT-SWAP", # 1000PEPE-USDT-SWAP (原样)
f"{base_alt}USDT-USDT-SWAP", # 1000PEPEUSDT-USDT-SWAP
f"{base}-USDC-SWAP", # PEPE-USDC-SWAP (meme)
f"{base_alt}-USDC-SWAP", # 1000PEPE-USDC-SWAP
]
# 终极 fallback: 查 OKX 所有 instrument, 模糊匹配 base
```
## Pitfalls
- **误改**: 直接 `sym = sym.lstrip('1000')` → 会把 `1000XEC` 错改成 `XEC`, 但 OKX 实际就叫 `XEC-USDT-SWAP`, **也可能对**;但 `1000PEPE` 错改成 `PEPE` 是对的(OKX 实际 PEPE 才是 1000x 包装版)
- **特殊名**: 1000SHIB / 1000BONK / 1000FLOKI — OKX 实际合约名是 `SHIB` / `BONK` / `FLOKI` (剥 1000), 但 `1000PEPE` 是反着的(剥 1000 → PEPE 不对, 实际是 1000PEPE 才对)
## 测试信号(2026-07-15 22:36 真实抓到的)
```
【熬鹰资本】
⚡ 跟单建议 | 1000PEPE 做多 🟩 7x
📊 信号源: X聚合社区 ? 1000PEPE (价值$?)
入场: $0.0028851
当前价: $0.0028938
```
→ advisor 直接返 `{"error": "Instrument ID..."}` → 告警。
## 教训
- **包装币种命名不一致**: 包装 1000x 的逻辑在不同 API 不同, **不能写死**
- **模糊匹配比归一化更稳**: 试多种候选 → 任何一个成功就用
- **找不到要早早报**: advisor 找币种时报错 → 推 QQ 失败告警, **不要默默 retry**