--- name: v2.6-trader-and-price-fix description: "v2.6 修复: trader fallback + 价格格式化 (用户原话: 之前是有消息模板的)" version: 2.6.0 type: reference --- # 🔧 OKX Signal Push 修复 (2026-07-13) ## 🐛 问题 1: Trader 字段 = "币种" **症状**: 推送显示 `信号源: 币种 ? SKHY(价值$?)` **根因**: `parse_signal` L41 用 `re.search(r'【([^】]+)】', text)` 抓**第一个**方括号 → `【币种】` 被当成 trader。 **修复 (3 层 fallback)**: ```python def parse_signal(text): fields = {} # 1. 优先: 【交易员】标签 m = re.search(r'【交易员】\s*[::]?\s*([^【\n]{1,20})', text) if m_trader: fields['trader'] = m_trader.group(1).strip() else: # 2. Fallback: 👉 跟单就选 X m_follow = re.search(r'👉\s*跟单就选\s*(\S+)', text) if m_follow: fields['trader'] = m_follow.group(1).strip() else: # 3. 第一个【xx】但跳过字段名 FIELD_NAMES = {'币种', '方向', '杠杆', '仓位大小', '仓位价值', '开仓价', '当前价', '未实现盈亏', '收益额'} m_first = re.search(r'【([^】]{1,20})】', text) if m_first and m_first.group(1) not in FIELD_NAMES: fields['trader'] = m_first.group(1).strip() else: fields['trader'] = 'unknown' return fields ``` **测试 SKHY**: ``` 原始: 【币种】: SKHYUSDT|5x 【方向】做空 👉 跟单就选 X聚合社区 修复后: trader = 'X聚合社区' ✅ ``` **实战 2026-07-15 二次修正**: 部分信号(如 🚨已平仓提醒 + 收益额格式)**无 trader 标签也无 👉尾缀**,三层 fallback 全 miss → trader='unknown' → 推送 `unknown ? BTC(价值$?)` 用户看不到头。 **v2.6.1 追加 fallback** (默认 X聚合社区,用户 TG 唯一信号源): ```python if m_first and m_first.group(1) not in FIELD_NAMES: fields['trader'] = m_first.group(1).strip() else: # 实在找不到 → 默认 X聚合社区 (用户 TG 唯一信号源, 比 'unknown' 有用) fields['trader'] = 'X聚合社区' ``` **测试信号** (无 trader 信息): ``` 🚨 已平仓提醒 【币种】: SKHYNIX 【方向】: 做多 【收益额】: +11.53% → trader = 'X聚合社区' (不再 'unknown') ``` ## 🐛 问题 2: 价格 18 位小数 **症状**: `入场: $161.01076124567473` (OKX 浮点×比率算出 18 位) **修复**: `_fmt()` helper: ```python def _fmt(x, n=4): """数字 round 到 n 位,字符串保留原样""" try: return f"{float(x):.{n}f}" except (ValueError, TypeError): return str(x) # 模板里所有 ${...} 替换: 入场: ${_fmt(entry_price)} | 当前: ${_fmt(current)} • SL: ${_fmt(rec['sl_price'])} → 预亏 -{_fmt(sl_pnl)} USDT ``` ⚠️ **value 字段** (`价值 $?`) 空时, `_fmt(?)` 抛异常 → catch 后保留原 `?`。 ## 📋 之前模板参考 ```python msg = f"""⚡ 跟单建议 | {symbol} {side_cn} {emoji} {leverage}x 📊 信号源: {trader} 入场: ${_fmt(entry_price)} | 当前: ${_fmt(current)} 浮盈: {pnl_sign}{pnl:.0f} {pnl_emoji} 📊 仓位变化 {comparison} {trader_rating} 📐 性价比 • 你的仓位: {contracts}张 (保证金{_fmt(margin)} USDT) • SL: ${_fmt(sl_price)} → 预亏 -{_fmt(sl_pnl)} USDT • TP: ${_fmt(tp_price)} → 预盈 +{_fmt(tp_pnl)} USDT • 盈亏比: {rr}:1 {rating_emoji} {rating_text}""" ``` ## 🔧 测试用例 ```python test = """📈 大佬加仓 【币种】: SKHYUSDT|永续|5x 【方向】: 做空 🟥 【仓位】: 528.16 SKHY 【开仓价】: 161.90000 👉 跟单就选 X聚合社区""" parse_signal(test) # → {'trader': 'X聚合社区', 'symbol': 'SKHY', 'side': '做空', ...} ```