2.6 KiB
2.6 KiB
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
# advisor 找不到币种, 报错:
{"error": "Instrument ID, Instrument ID code, or Spread ID doesn't exist."}
→ 整条信号无法处理 → "⚠️ 1000PEPE 做多 平仓信号处理失败" → 推送 QQ 失败告警。
解决
两路归一化:
A. parse_signal (parse_signal.py) — 1000PEPE → PEPE
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) — 模糊匹配
# 多种 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