User 2026-07-30 反馈: - 脚本名 lottery_te_ma.py → lottery_特码.py (中文, 更直观) - 同步 SKILL.md 引用 (description + scripts 段) - version 1.2.5 → 1.2.6
83 lines
3.8 KiB
Markdown
83 lines
3.8 KiB
Markdown
# 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 <SYMBOL> <SIDE> <LEVERAGE> # advisor 算 + --execute
|
|
bash ~/.hermes/scripts/okx_trade.sh close <SYMBOL> # 平仓(走 advisor --close)
|
|
bash ~/.hermes/scripts/okx_trade.sh manual <SYMBOL> <SIDE> <QTY> # 手动 raw REST(异常 fallback)
|
|
bash ~/.hermes/scripts/okx_trade.sh advisor <SYMBOL> <SIDE> <LEVERAGE> # 只 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/<file>` 复制,**会复制成 plain file**,后续 `stocks/<file>` 改动不生效。
|
|
|
|
正解: wrapper 写**绝对路径硬编码** `/home/openclaw/.hermes/scripts/stocks/hk_intraday_cli.py`。
|
|
|
|
## Cron 集成
|
|
|
|
cron `script` 字段不要写 `python3 ~/.hermes/scripts/<x>.py` —— 改为:
|
|
|
|
```yaml
|
|
script: okx_trade.sh
|
|
```
|
|
|
|
然后 cron 调 `bash ~/.hermes/scripts/okx_trade.sh <action> <args>` 即可。
|
|
|
|
## MEMORY 铁律
|
|
|
|
写入 MEMORY.md:
|
|
- 铁律 14: **跟单不许反问** — 信号来了立即 advisor → 下单, 不问 yes/no/几张
|
|
- 铁律 15: **保单前查真实状态** — 不报 advisor 推荐值当事实; 下单后立即 fetch_positions() 验证
|
|
|
|
详细见 `~/.hermes/memories/MEMORY.md`。 |