Files
Hermes-Skills/okx-auto-position/references/v4.5.74-2026-09-02-advisor-safety-factor-1.07.md
T

3.8 KiB
Raw Blame History

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)