# v4.5.65 (2026-08-26) close_position_raw 加 null guard + silent_order + X 链接处理 + 调杠杆信号解读 **会话**: 8 月 26 日熬鹰资本 ETH long 全周期(开仓→调杠杆 3→4x→4→5x→平仓→新开仓) ## 一、close_position_raw 返回 None 时崩溃 (本会话已修) **症状**: 熬鹰 ETH 平仓信号进来 → `close_position_raw()` 内部 `_okx_raw_request('GET', '/api/v5/account/positions')` 因 proxy 抽风返回 None → `close_result['action']` 抛 `TypeError: 'NoneType' object is not subscriptable`,**整个 process_signal 主流程崩溃, 平仓信号丢失** **修复** (`scripts/process_signal.py::process_signal()` close 分支): ```python close_result = close_position_raw(symbol_usdt, signal_side_en) # 2026-08-26: proxy抽风可能让 _okx_raw_request 返回 None, 加 null guard if not close_result: return f"❌ 平仓失败: _okx_raw_request 返回 None (proxy 抽风?) | {symbol_usdt}" action = close_result['action'] ``` **推广**: 任何调用 `_okx_raw_request` 的下游函数返回值都需 null guard。建议函数签名返回 `dict | None`, 调用前 `if not result: handle_error()`。 ## 二、_okx_raw_request body 位置参数 bug 可能仍在 manual_order.py **会话内发现**: v4.5.64 修了 `adjust_leverage_raw` 内的 `_okx_raw_request('POST', path, body)` → 必须 `body=body`。但 `scripts/manual_order.py` 是 v4.5.62 沉淀的封装,它的 `okx_post` / `set_leverage` 函数大概率有同源 bug。 **下次 session 第一件事**: ```bash grep -n "okx_post\|set_leverage\|set_leverage_raw\|adjust_leverage" ~/.hermes/skills/trading/okx-auto-position/scripts/manual_order.py # 重点查位置参数传 dict 的地方 (第3位是 params, 不是 body) ``` **类比**: 任何 wrapper 函数如果封装 `_okx_raw_request` 都要小心 body 位置参数。统一约定:所有 POST body 都用 keyword arg (`body=body` 或 `data=...`)。 ## 三、silent_order 模式: 币种在 OKX 不存在,推 QQ 但无 execute **会话内发现**: 熬鹰 ZAMAUSDT|永续 新开仓 → advisor `✅ 已推送 | ZAMA long 2x | 257.0张 | 性价比高` → execute 没真下单,USDT 没冻结。ZAMA 是新币种,OKX 上无 `ZAMA-USDT-SWAP` 合约。 **判定**: - 信号 `已推送` 状态 = advisor 计算成功 + 推送 QQ 成功 - 但 execute 路径 `_okx_raw_request('/api/v5/trade/order')` 收到 `code != '0'` (比如 `51001` 币种不存在) - 不报错给用户,不推 QQ 异常 **新行为 (本次观察, 待修)**: - 用户问 "跟单了吗" → 重查 `check_account.py` → 无持仓 → 我答 "ZAMA 没开" 但没解释为什么 - 应该: 推送时区分 `✅ 已推送` vs `❌ 下单失败 (币种不存在/资金不足)`,让用户知道真相 **修复方向 (下次必修)**: - `process_signal.execute_open_position` 路径检查 `order_resp.get('code')`, 非 '0' 时推 QQ 失败原因 + 静默 skip - 已知道 silent_order 候选币种 (跟 advisor silent execute 名单重合): - ZAMA-USDT-SWAP (新币种, OKX 可能尚未上) - NEIRO-USDT-SWAP (同理, 类比 ZAMA) - 任何 `tickers.ZAMA-USDT-SWAP` 返回 null 的币种 ## 四、调杠杆信号 "3→4" 正确解读 = 目标杠杆 4 (不是 5) **会话内误读**: 熬鹰 ETH `🔧 注意, 大佬修改了杠杆 3→4` → 我手工调 ETH 到 5x (错!) → 用户说 "信号只到了 4" → 才反应过来信号意思是"调到 4x" **正确解析**: - 信号文本 `修改了杠杆 3→4` = 当前 3x → 改成 4x - 目标杠杆 = `4`(箭头右边的数字) - 永远取箭头右边的数字,不是左边 **代码层面已对**: `fields.get('leverage')` 提取 `永续|4x` → `new_lev = int(fields.get('leverage') or '10')` 取的就是信号当前显示的目标值。 **教训 (本会话错误)**: - 手工调杠杆时不要凭"感觉"读信号,要严格按 "4x" 字段来调 - 调完后再读一次信号原文,验证 "我调的 X 是箭头右边的 X" ## 五、X/Twitter 链接 agent 不能直接抓取 **会话内事件**: 用户发 `https://x.com/xalpha168/status/2092913107333152899` → 我答 "我无法直接抓取 X/Twitter 内容 (没 cookie/session)" **硬规则 (v4.5.65 新增)**: - X/Twitter 链接 (`https://x.com/...`, `https://twitter.com/...`) → agent 不能访问,只能回 "请复制推文文字给我" - 同类链接 (Instagram/Facebook 私密/LinkedIn 私密) → 同样处理 - 微信公众号文章 (搜狗缓存可以但实时不行) → 走搜狗缓存或要用户复制 **回复模板**: ``` 这条链接是 X 上 @ 的推文, 可能含交易信号或策略分析。 我无法直接抓取 X/Twitter 内容 (没 cookie/session)。 你能直接复制推文文字内容给我吗? 这样我就能识别有没有跟单信号。 ``` **不要尝试**: - ❌ `web_search "site:x.com <关键词>"` (搜不到内容, 搜到导航) - ❌ `web_extract https://x.com/...` (X 反爬, 拿不到) - ❌ 任何 wrapper browser tool 跑 X 链接 (X 登录墙 + JS 重度) ## 六、本次 session 净状态 **持仓变化**: - MSTR short 0.01张@5x → 加 1 张 → 加 3 张 → **4.01张@5x** (手动 7 成仓位) - ETH long 1.4张@3x (新开) → 调 4x (v4.5.64 修复后自动跟) → 平仓(代理抽风, 手工 close) → **新开 1.42张@3x** - 锁: MSTR-USDT-SWAP + ETH 全部手动 acquire_lock 熬鹰资本 **USDT 变化**: - 起始: $149.60 - 终止: $158.58 (平 ETH 盈利 ~$1.93, 开新 ETH 1.42 张占用 $118.80) ## 部署清单 (下次 session 第一件事) - [ ] `scripts/manual_order.py` 检查 `okx_post` / `set_leverage` 函数, 确认 body 用 keyword arg (`body=body`), 修同源 bug - [ ] `process_signal.execute_open_position` 加订单结果 null guard + 失败原因推 QQ (silent_order 不再静默) - [ ] 已知 silent_order 候选币种加入 reference 列表: ZAMA, NEIRO, 任何 ticker null 的币种 - [ ] 调杠杆信号 "A→B" 解读规则: 永远取 B, 不要凭感觉 - [ ] X/Twitter 链接处理模板入 frontmatter 或 readme - [ ] `_okx_raw_request` 所有调用点统一 null guard (已经在 close_path 修, 其他路径 check) ## v4.5.65 → v4.5.64 → v4.5.63 → v4.5.62 → v4.5.61 关联 ``` v4.5.61 trader 白名单闸 (只跟熬鹰) ↓ v4.5.62 dedup 手动清 + advisor 幽灵执行 + 用户 7/8 成手动加仓 ↓ v4.5.63 手动 execute 必须手动 acquire_lock + symbol 无后缀 + ETH ghost close ↓ v4.5.64 调杠杆信号自动跟进 + _okx_raw_request body keyword arg 修 ↓ v4.5.65 close null guard + silent_order (ZAMA) + X 链接处理 + 杠杆信号 "3→4" 解读 (本次) ``` 每一步都是踩坑 → 修, 全在 OKX 跟单这条线上, 跟其他 skill 不重叠。