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

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