# 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` ```python # 同时考虑 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)