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

119 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 完全不同源, 不能跟。
**修复**:
```python
# 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+)` 抓目标值:
```python
# 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。
```python
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 字符串必须精确匹配)