3.8 KiB
3.8 KiB
v4.5.74 — 2026-09-02 advisor 加 SAFETY_FACTOR 1.07 防 51008
1. 实战现场 (2026-09-03 02:35 北京时间)
用户看到的错误
推送连续 2 条:
⚠️ 订单错误 (2 条新增)
• 2026-09-03T02:35:20 place_order SKHYNIX/USDT:USDT buy 0.324张 4x
❌ [51008] 保证金不足
💬 Order failed. Insufficient USDT margin in account
• 2026-09-03T02:35:52 place_order SKHYNIX/USDT:USDT buy 0.324张 4x
❌ [51008] 保证金不足
用户原话: "这个失败是为什么, 后面能不能推送原因出来?" → 同时推动 2 件事: (1) 推送带原因 (parse_order_errors.py 已修), (2) 根本原因 advisor 估算逻辑错了。
2. 根本原因诊断
当时账户状态
- SPCX short 1.65 张 @ 4x (已占 $57.96 保证金)
- Free 显示 $98.41
- SKHYNIX 想加仓 0.324 张 @ 4x = 392.83 / 4 = $98.21 保证金
- advisor 推算 Free $98 ≥ 需 $98.21 → 看似够 → 下单 → 51008 失败
为什么 Free $98 加仓 $98 会失败?
OKX 实际冻结 = 名义/杠杆 + 维持保证金 0.5% + taker 手续费 0.05% + funding 缓冲
| 项目 | 金额 |
|---|---|
| 仓位保证金 | $98.21 |
| 维持保证金 (0.5%) | $1.96 |
| taker 手续费 | $0.20 |
| funding (1 次) | $0.10 |
| 实际冻结 | ~$100.5 |
实际冻结 ≈ 名义/杠杆 × 1.07, 但 advisor 用 min(usdt_free, single_coin_avail) 直接对比保证金, 漏算 7% 缓冲,所以 51008 反复发生。
3. 修复方案
改 ~/.hermes/skills/trading/okx-auto-position/scripts/okx_position_advisor.py
# 同时考虑 free 余额 (不能超过 free)
# 2026-09-02: 加 1.07 缓冲 (OKX 实际冻结 = 保证金 + 维持 0.5% + 手续费 + funding),
# 不加会复现 SKHYNIX 加仓 51008 失败 (Free $98 + 实际冻结 $105 = 差 $7)
SAFETY_FACTOR = 1.07
avail_margin = min(acct_info['usdt_free'] / SAFETY_FACTOR,
single_coin_avail / SAFETY_FACTOR)
margin_per_contract = ct_val * price / leverage
修复前后对比
| 场景 | 旧 advisor | 新 advisor |
|---|---|---|
| Free=$98, 加仓需 $98 | ✓ 可以 (实际失败 51008) | ✗ 不会建议 (98/1.07=$91.6 < $98) |
| Free=$110, 加仓需 $98 | ✓ 可以 | ✓ 可以 (110/1.07=$102.8 > $98) |
| Free=$98, 加仓需 $90 | ✓ 可以 | ✓ 可以 (98/1.07=$91.6 > $90) |
4. 铁律 (新)
加仓所需 Free ≈ 名义价值 / 杠杆 × 1.07 (含 7% 缓冲: 维持保证金 + 手续费 + funding)
- advisor 估算时必须用
usdt_free / 1.07作为有效可用余额 - 不要只看
usdt_free >= margin, 这样会 51008 - 同理 apply 到 single_coin_cap (75% × total), 也要除 1.07
5. 关联改
okx_position_advisor.py加SAFETY_FACTOR = 1.07乘到 avail_margin- 这个 7% 系数也可以加到
format_signal的"预计占用"显示 (optional) - 推送的"净盈利"已经包含手续费和 funding, 不需要再算
6. 后续待做 (offer 给用户, 待确认)
- 调 SKHYNIX 杠杆到 3x: 保证金 = 392/3 = $130 (占用更大但抗爆仓能力强)
- 减少 SKHYNIX 张数: 0.324 → 0.2 张 @ 4x = $60 保证金
- 先减 SPCX 0.5 张, 释放 $18 保证金
- 不动, 抗过去 (当前账户健康, Free $98.95, 占用 37%)
7. 实战教训
- ❌ 不要只看
free >= required_margin就下单 — OKX 实际冻结 = 理论 × 1.07 - ❌ 不要忽略"手续费 + funding"在加仓瞬间就产生 — 不是只在平仓收
- ✅ advisor 加 SAFETY_FACTOR, 让推荐更保守
- ✅ 用户问"需要多少保证金"时, 直接给公式 + 7% 缓冲
- ✅ push 错误带 sCode 翻译后, 用户能立刻诊断 (本次 51008 → 保证金不足 → 看顾问算法)
8. 关联 reference
references/v4.5.73-2026-09-02-order-errors-scode-translation.md— 推送 sCode 翻译references/parse-order-errors-scode-dict.md— sCode 字典 (待建)- memory.md 不需要记录 (此条已经写进 advisor 代码注释 + SKILL.md)