Files
Hermes-Skills/okx-auto-position/references/v4.5.117-2026-09-26-ctval-contract-size-bug-and-200-cap-violation.md

65 lines
2.7 KiB
Markdown
Raw Permalink 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.117 (2026-09-26): 合约面值 ctVal 事故 — 名义/保证金算小10倍, $200上限违反
## 事故经过 (本 session 最痛教训)
ONDO-USDT-SWAP 合约 **1张 = 10 ONDO** (`ctVal=10`)。整个 session 我按 **1张=1 ONDO** 算名义和保证金, 全部算小 **10倍**:
| 步骤 | 我以为 | 实际 |
|---|---|---|
| advisor 加仓 329张 (总383张) @10x | 名义 $198 | **$1,986** (超 $140 上限 14 倍) |
| "减半"到 191张 @2x | 名义 $99, 合规 | **$992.82** (仍超限 7 倍) |
| frozen $496.50 之谜 | "OKX cross 显示延迟" | **= 真实 2x 保证金 ($992.82 ÷ 2)** |
| 最终 26张 @2x | — | **$134.81, 合规** (< $140) |
## 用户愤怒信号
- 看到保证金近 $500: "保证金为什么还是将近500刀啊"
- 我还在猜"显示延迟"时: "调啊,我操"
- 早前: "你是不是又忘了,我说的200刀的限制啊"
**$200 单币上限是反复违反的铁律** — advisor config 里有 `single_coin_ceiling_usdt=200`, 但**手动 raw REST 下单时我完全没检查**, 也没算 ctVal。
## 根因与铁律
### 铁律 1: 任何名义/保证金/张数计算前必查 ctVal
```
GET /api/v5/public/instruments?instType=SWAP&instId=ONDO-USDT-SWAP
→ data[0].ctVal = "10" (每张面值, ctValCcy=ONDO), lotSz=1, minSz=1
真实名义 = contracts × ctVal × markPx
保证金 = 真实名义 / lever
```
**常见 OKX ctVal 陷阱** (都不是 1):
- ONDO: 1张 = 10 ONDO
- ZEC: 1张 = 0.01 ZEC
- BTC: 1张 = 0.01 BTC
- PEPE: 1张 = 10000 PEPE
### 铁律 2: frozenBal 异常大 = 名义算错了
降杠杆/减仓后 frozen 不降反维持高位 → **不是显示延迟, 是仓位实际超限**。先查 ctVal 重算名义, 再怀疑交易所。
### 铁律 3: 手动 raw REST 也要过单币上限
单币名义上限 = `min(账户权益, $200) × 70%` (≈$140)。advisor 自动检查, 但 **raw REST 路径绕过了 advisor** — 手动下单前必须自己算: `上限名义 / (ctVal × markPx) = 最大张数`, 下单量取 min(信号比例张数, 上限张数)。
### 铁律 4: 超限后的修正顺序
1. 减仓到上限内 (reduceOnly 市价单)
2. 再调杠杆 (cross 降杠杆 59108 时先减仓释放保证金)
3. 验证: check_account 看 frozen ≈ 名义/杠杆, avail 恢复
## 修复后的最终状态 (2026-09-26)
- ONDO 26张 @2x, 名义 $134.81 (上限 $140 内, 96% 利用率)
- frozen $67.34 = 真实保证金, USDT 可用 $507
- 强平价 0.22 (缓冲 58%)
## 相关
- 频道已切回 `@jiankongshipan` (chats.id=1, chat_id=3805472665) — 新频道 @shipan_jiankong 的 chat_id bug 修复不彻底, 用户指令回切
- 转发模板 time_template 改为 "⏱转发时间: {time}" (原 "⏱信号时间" 语义误导)
- 杠杆行内解析 bug 已修 (leverage 正则 fallback `|永续|全仓|Nx`), 见 v4.5.116