3.5 KiB
3.5 KiB
name, description, version, type
| name | description | version | type |
|---|---|---|---|
| advisor-fuzzy-symbol-match-and-error-surfacing | 币种找不到时自动模糊匹配 (ETH / ETHUSDT / 1000PEPE 多格式), 不要默默 fail — 立即推送用户可读错误 | 1.0.0 | reference |
🔍 advisor 币种匹配 + 错误暴露实战教训 (2026-07-15)
问题: advisor silent fail
症状: TG 信号原文 【币种】: ETHUSDT|永续|5x,advisor 接 --symbol ETH 找不到 inst, 错误信息是英文, 用户看不到 / QQ 不推, 默默 retry 死循环。
用户原话 (2026-07-15): "找不到你是不是该早点通知我呢, 这也需要我来完善skill吗。能不能用了。"
根因: advisor 硬编码拼接 f"{base}-USDT-SWAP", 没考虑:
1000PEPE(meme, USDC pair)1000PEPEUSDT(原始 OKX 内部格式)ETHUSDT(无 - 分隔符格式)- 网络抽风时直接 NetworkError
✅ 修复: 三层 fallback (2026-07-15)
okx_position_advisor.py recommend_position():
# 1000PEPE 等 meme 是 USDC pair, 所以也要试
base = symbol.split('/')[0].replace(':USDT', '').replace(':USD', '').replace('1000', '') # 1000PEPE -> PEPE
base_alt = symbol.split('/')[0].replace(':USDT', '').replace(':USD', '') # 保留 1000PEPE 原样
inst_id = None
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
]
spec = None
tried = []
for inst in candidates:
try:
spec = get_instrument(exchange, inst)
inst_id = inst
break
except Exception as e:
tried.append(f"{inst}({e})")
# 终极 fallback: 查 OKX 所有 instrument, 模糊匹配 base
if not spec:
try:
all_inst = exchange.public_get_public_instruments({'instType': 'SWAP'})
for item in all_inst.get('data', []):
if item.get('baseCcy', '').upper() == base.upper() and item.get('quoteCcy') == 'USDT':
inst_id = item['instId']
spec = get_instrument(exchange, inst_id)
break
except Exception as e:
tried.append(f"all_inst({e})")
if not spec:
return {'error': f'找不到币种 {base} (尝试: {", ".join(tried[:3])})'}
关键:
tried列表记录每次失败的 candidate + 错误, 用户可见- 终极 fallback 查 OKX 全部 SWAP inst, 模糊匹配 base
- 全部失败 → 返回中文错误信息,
format_message会推到 QQ
测试用例 (实际跑过, 2026-07-15)
| symbol 输入 | 实际匹配 | 状态 |
|---|---|---|
ETH |
ETH-USDT-SWAP |
✅ |
ETHUSDT |
ETH-USDT-SWAP |
✅ |
BTC |
BTC-USDT-SWAP |
✅ |
1000PEPE |
1000PEPE-USDC-SWAP |
✅ (新) |
DOGE |
DOGE-USDT-SWAP |
✅ |
XXX (无效) |
全部失败 → 错误信息 | ✅ (推送 QQ) |
运行模式: 必须用 proxychains4
# ❌ 直接 python3 → 国内 VPS 网络抽风, NetworkError
python3 okx_position_advisor.py --symbol ETH --side long
# ✅ proxychains4 + Clash 香港出口
proxychains4 -f ~/.proxychains/proxychains.conf \
python3 ~/.hermes/skills/trading/okx-auto-position/scripts/okx_position_advisor.py \
--symbol ETH --side long --leverage 7 --json
相关 Pitfall (2026-07-15)
用户原话: "你是说币种找不到吗。那你模糊匹配啊"
- advisor silent fail 浪费 30+ 分钟
- 用户已经急
- 永远不要假设 advisor 成功 — 错误立即暴露