2.7 KiB
2.7 KiB
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: 超限后的修正顺序
- 减仓到上限内 (reduceOnly 市价单)
- 再调杠杆 (cross 降杠杆 59108 时先减仓释放保证金)
- 验证: 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