--- name: advisor-fuzzy-symbol-match-and-error-surfacing description: "币种找不到时自动模糊匹配 (ETH / ETHUSDT / 1000PEPE 多格式), 不要默默 fail — 立即推送用户可读错误" version: 1.0.0 type: 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()`: ```python # 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** ```bash # ❌ 直接 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 成功** — 错误立即暴露