Files
Hermes-Skills/okx-auto-position/references/v2.6-trader-and-price-fix.md
T

3.7 KiB
Raw Blame History

name, description, version, type
name description version type
v2.6-trader-and-price-fix v2.6 修复: trader fallback + 价格格式化 (用户原话: 之前是有消息模板的) 2.6.0 reference

🔧 OKX Signal Push 修复 (2026-07-13)

🐛 问题 1: Trader 字段 = "币种"

症状: 推送显示 信号源: 币种 ? SKHY(价值$?)

根因: parse_signal L41 用 re.search(r'【([^】]+)】', text)第一个方括号 → 【币种】 被当成 trader。

修复 (3 层 fallback):

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 唯一信号源):

            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:

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 后保留原 ?

📋 之前模板参考

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}"""

🔧 测试用例

test = """📈 大佬加仓
【币种】: SKHYUSDT|永续|5x
【方向】: 做空 🟥
【仓位】: 528.16 SKHY
【开仓价】: 161.90000
👉 跟单就选 X聚合社区"""

parse_signal(test)
# → {'trader': 'X聚合社区', 'symbol': 'SKHY', 'side': '做空', ...}