Files
Hermes-Skills/okx-auto-position/references/v4.5.81-2026-09-09-trader-strict-equality-and-leverage-target-parsing.md

5.1 KiB
Raw Permalink Blame History

v4.5.81 — Trader 严格等值匹配 + 杠杆信号目标值解析 + 4 个熬鹰变体识别

日期: 2026-09-09
会话: ZEC 暴跌场景, 4 个熬鹰变体 trader 同时活跃

关键教训 (本次 session 新增)

1. Trader 名必须严格等值匹配 (集合 in 检查), 禁止 startswith / contains

实际场景 (2026-09-09): 4 个"熬鹰*"变体 trader 全部都用了 startswith('熬鹰') 检查, 结果 熬鹰资本(白名单) / 熬鹰FOMO合约实盘 / 熬鹰交易信号 / 熬鹰币安实盘 全部进了白名单闸。但用户的原意是: 只跟"熬鹰资本", 其他三个 trader 完全不同源, 不能跟。

修复:

# whitelist.json
{
  "trader_whitelist": ["熬鹰资本"]  # 严格等值, 不允许 startswith 兜底
}

# process_signal.py
_TRADER_WHITELIST = {'熬鹰资本'}  # fallback 默认值(防配置文件损坏)
try:
    _wl = json.loads(_WL_PATH.read_text())
    if isinstance(_wl, dict) and isinstance(_wl.get('trader_whitelist'), list):
        _TRADER_WHITELIST = set(_wl['trader_whitelist'])
except Exception:
    pass

# 严格等值检查
if _sig_type_for_gate in ('open', 'add', 'reduce', 'adjust_leverage', 'close') and trader not in _TRADER_WHITELIST:
    return f"⏭️ 跳过: trader [{trader}] 不在白名单"

实战确认: 9/9 session 后续 4 个熬鹰变体的信号全部被闸拦住 (⏭️ 跳过: trader [...] 不在白名单)。

反模式 (禁止):

  • trader.startswith('熬鹰') → 4 个变体全过
  • '熬鹰' in trader → 4 个变体全过
  • trader == '熬鹰' (无通配但容易漏) → 实际可用 (当前解)

2. 信号里"修改了杠杆 X→Y" 的 Y 必须 parse 出来, 不能凭印象

反模式: agent 看到 3→5 自己 echo 成 4x (凭印象取中间值)。实战: agent 把"3→5"读成"4", 实际 OKX set-leverage 调到5x; user 自己手动验后指正。

正解: parse_signal 直接提取 →N 后面的 N, 推送消息必须包含杠杆值供 user 核对。

修复: leverage 字段 parse regex 必须用 →(\d+) 抓目标值:

# parse_signal.py
m_lev = re.search(r'【杠杆】\s*[::]?\s*(\d+)', text)
if m_lev:
    fields['leverage'] = m_lev.group(1)

# 调杠杆信号场景
m_target_lev = re.search(r'(\d+)\s*→\s*(\d+)', text):
    fields['target_leverage'] = m_target_lev.group(2)  # 必须用 group(2), 不是 group(1)

3. 调杠杆信号不要走 advisor "性价比低" 跳过路径

反模式: 修改了杠杆 3→4 类信号 → advisor 报"性价比低" → 跳过 → 熬鹰节奏跟丢。

正解: adjust_leverage 分类单独走 adjust_leverage_raw 直调 set-leverage, 不走 advisor。

实战确认:

  • ✅ 调杠杆: ETH → 4x (5x → 4x 自动跟进)
  • ✅ 调杠杆: ZEC → 5x (4x → 5x 自动跟进)
  • ✅ 调杠杆: TRUMP → 2x (1x → 2x 自动跟进)
  • ❌ 调杠杆失败: SKHYNIX 5→2 (cross模式账户余额不够, OKX 59108 错误, 跳过即可)

坑: adjust_leverage_raw 调用 _okx_raw_request 必须用 body=body 关键字参数, 不是位置参数。

4. 📊 仓位实时更新 必须单独分类 update_only (不execute)

反模式: "📊 仓位实时更新" 信号被classify成 open → 默认execute → SKHYNIX long 0.293 张被误开 (9/1 session 事件)。

正解: classify_signal 加 update_only 类型 → 白名单闸直接skip。

def classify_signal(text):
    if '平仓' in text or '止盈' in text or '止损' in text:
        return 'close'
    if '减仓' in text:
        return 'reduce'
    if '加仓' in text or '追仓' in text:
        return 'add'
    if '修改了杠杆' in text or '调整了杠杆' in text or '调杠杆' in text:
        return 'adjust_leverage'
    if '仓位实时更新' in text or '实时更新' in text:
        return 'update_only'  # 新增: 状态推送不execute
    return 'open'

实战 trader 变体识别清单 (2026-09-09 当日活跃)

Trader 是否白名单 备注
熬鹰资本 ✅ 是 唯一跟单的 trader
熬鹰FOMO合约实盘 ❌ 否 FOMO 心态的变体, 高频且仓位大, 不能跟
熬鹰交易信号 ❌ 否 同一人的另一个账号, 不能跟
熬鹰币安实盘 ❌ 否 币安交易所账号, OKX API 不能平仓, 不能跟
巨鲸内幕哥ca88 ❌ 否 完全不同的人, 不能跟

识别方法: trader 名严格等值匹配, 任何包含/前缀匹配都会导致变体绕过白名单闸。

配合铁律

  • v4.5.77 close 闸白名单 (本次 session 再次强化, 所有信号类型都过闸)
  • v4.5.71 先查再说 (不要反问)
  • v4.5.79 4 个熬鹰变体识别 (本次固化进清单)
  • v4.5.75 memory.md 只装硬规则 (Qdrant 存细节)

反模式 (本次 session 再强化)

  • ❌ trader.startswith('熬鹰') → 4 个熬鹰变体全过闸
  • ❌ trader == '熬鹰' (忘 .strip() 导致空格绕过)
  • ❌ 调杠杆信号走 advisor (被"性价比低"跳过)
  • ❌ 凭印象读杠杆目标值 (3→5 读成 4)
  • ❌ "📊 仓位实时更新" 当成 open (误开 SKHYNIX)
  • ❌ 把 4 个熬鹰变体当同一个人 (trader 字符串必须精确匹配)