# okx_trade.sh — 所有 OKX 下单的强制入口 (2026-07-21) **用户原话** (2026-07-21): "你查查TG有个跟单信号,有个错误" → 反复触发 ETH/BTC/MU 错单 / 乱下单 / 用裸 ccxt 不走 skill / leverage 丢失 / 9 档拒单 **用户规则**: "**所有下单走 skill 强制入口**" ## 设计 `~/.hermes/scripts/okx_trade.sh` 单一入口,所有 OKX 下单都走这里。**绝不**直接调 ccxt。 ## 用法 ```bash bash ~/.hermes/scripts/okx_trade.sh status # 查持仓 + 余额 bash ~/.hermes/scripts/okx_trade.sh open # advisor 算 + --execute bash ~/.hermes/scripts/okx_trade.sh close # 平仓(走 advisor --close) bash ~/.hermes/scripts/okx_trade.sh manual # 手动 raw REST(异常 fallback) bash ~/.hermes/scripts/okx_trade.sh advisor # 只 advisor 算,不 execute ``` ## 强制做的事 1. **走 skill 路径** — 调 `okx_position_advisor.py` 的 `recommend_position` + `execute_trade`,**不**直接 ccxt.create_order 2. **下单后立刻 fetch_positions 验证** — `time.sleep(1.5)` 后 `ex.fetch_positions()`,拿 **actual_leverage / actual_margin / actual_notional** 3. **报告用 actual_*** — advisor 推荐值 ≠ 实际成交值(参考 §2 agent-workflow-feedback-rules) ## 强制不做的事 1. ❌ 直接 `python3 -c "import ccxt; ex.create_order(...)"` 裸调 2. ❌ 跳过 advisor 自己算 size / leverage / SL / TP 3. ❌ 下单后不 fetch_positions 验证就报数据 4. ❌ 报"已下单" 之前 status=closed ## Pitfalls (2026-07-21 实战踩坑) ### Pitfall 1 — 不能用裸 ccxt 下单 用户问"跟单了吗" → 我用 `python3 + ccxt.create_order(...)` 直接下单 → 下单参数错(0.014 张 vs OKX 0.01 min_sz,实际成交 0.01) → **绕过 advisor**,出错也无处 review。 ### Pitfall 2 — advisor `leverage=5` 不生效 `params={'leverage': '5'}` 在 OKX v5 API 不被支持作为下单参数 → **实际用账户默认 leverage**(通常是 10x)。 实测: - advisor JSON: `leverage=5`, `margin=$46.79` (基于 5x) - 实际成交: `leverage=10x`, `margin=$26.82` (实际账户默认) - 推送: "0.31 张 @ 5x" — **错的,实际 10x** **唯一可靠**: 下单后 `fetch_positions()` 看 `p['leverage']` 字段。reference `leverage-pass-through-bug.md` 有详细 workaround(用 OKX 私有 API `/api/v5/account/set-leverage` 先设 leverage)。 ### Pitfall 3 — `mihomo` 节点挂掉 = 下单失败 SSL/timeout VPS 在国内,OKX 必须走 Clash 7890。Clash 节点 `ns1.accor.co.im` / `ns1.mercure.zone` / `01-synexvm-hk-std.node-ddns.top` 频繁 timeout(2026-07-21 实测,节点供应商挂)。 **对照方案**: - `BiXin Network` selector `select` type → 改成 `fallback` type(2026-07-21 改过) - `mihomo_watchdog.sh` 3 min 自动检测 + 重启(2026-07-21 建,可能还要 fix) - 节点全挂时 → 手动加新 wireguard 节点(Mihomo v1.19.8 内置支持 wireguard outbound) ### Pitfall 4 — 下单脚本不能 cp 顶层 symlink 到 stocks/ `hk_intraday_close_cron.sh` 等是顶层 symlink 指向 `stocks/`,如果用 `cp ~/.hermes/scripts/` 复制,**会复制成 plain file**,后续 `stocks/` 改动不生效。 正解: wrapper 写**绝对路径硬编码** `/home/openclaw/.hermes/scripts/stocks/hk_intraday_cli.py`。 ## Cron 集成 cron `script` 字段不要写 `python3 ~/.hermes/scripts/.py` —— 改为: ```yaml script: okx_trade.sh ``` 然后 cron 调 `bash ~/.hermes/scripts/okx_trade.sh ` 即可。 ## MEMORY 铁律 写入 MEMORY.md: - 铁律 14: **跟单不许反问** — 信号来了立即 advisor → 下单, 不问 yes/no/几张 - 铁律 15: **保单前查真实状态** — 不报 advisor 推荐值当事实; 下单后立即 fetch_positions() 验证 详细见 `~/.hermes/memories/MEMORY.md`。