跳到主要内容

下单预估与强平价

交易面板三项预估——强平价格订单价值预估占用(含手续费)——是成交前的本地试算, 与持仓列表上的链上展示值、以及 Liquidate 是否真正触发,口径不完全相同。

本页给出三项字段的计算公式,并按 全仓 / 逐仓 × 做多 / 做空 列出差异。 杠杆 L 由用户在面板调节(链上 SetLeverage),公式里始终当变量代入,不是固定倍数。 除法一律向零截断ADR-0026 / 精度约定)。链上 admission 见 write-actions §7.0


1. 符号

符号含义取值
Q下单数量(币,绝对值)币本位输入;U 本位输入时 Q = 金额 / P_order
P_order订单展示价限价 = 限价。市价多 = max(mark, ask);市价空 = max(mark, bid);无盘口回退 mark
P_mark标记价市场 mark
P_fill手续费名义所用价限价 = 限价。市价多 = ask(无盘口则 mark);市价空 = bid(无盘口则 mark)
P_entry预估入场价下单窗假设本单立即成交:P_entry = P_order
L杠杆(可调)面板当前杠杆;链上为该市场 SetLeverage。范围 1 ≤ L ≤ min(市场 max_leverage, 命中档 max_leverage)L = 0 表示未设、按档位 im_rate
im / mm档位初始 / 维持保证金率市场 margin_table 命中档的 im_rate / mm_rate(SCALE_6)
f预估费率市价 / IOC / 条件单 = 生效 taker;限价 GTC / ALO = max(taker, maker)(覆盖两种结局)
account_value账户权益balance + Σ uPnL(含逐仓仓位 uPnL)。见 getAccount

生效费率:账户 custom_taker_fee_rate / custom_maker_fee_rate 优先,否则市场默认。 档位:按名义价值升序取第一个 notional ≤ tier.max_notional 的档(见 getMarketmargin_table)。

内部金额为 SCALE_6(6 位);面板 USD 字段再展示 2 位,强平价按市场 price_decimals


2. 初始保证金(IM)

N_mark = |Q| × P_mark
N_fill = |Q| × P_fill
N_entry = |Q| × P_entry

IM(N, L) = max( floor(N / L), floor(N × im) )

floor = 向零截断。L = 0 时关闭杠杆维,退化为 N × im

调高 L 会降低 N/L 这一项;当 1/L < im(杠杆已高于该档 1/im)时,占用由档位 im_rate 托住,再加杠杆占用不再变小。

mm 用于强平价时,按 当前 mark 名义 N_mark 选档(忽略 liq 换档的二阶项;这是估算,不是链上强平判定)。


3. 订单价值

与保证金模式、杠杆无关。多空只改所用价格。

订单价值 = Q × P_order
场景P_order
限价限价
市价做多max(mark, ask),无 ask 则 mark
市价做空max(mark, bid),无 bid 则 mark

面板展示 2 位小数。链上成交名义为 |size| × 实际成交价(SCALE_6)。


4. 预估占用(含手续费)

下单窗对全仓、逐仓走同一套 IM + feereduce_only 不预估开仓占用,显示 N/A)。

预估占用 = IM(N_mark, L) + floor(N_fill × f)

IM 用 mark 名义,手续费用 fill 名义。 市价时两者可以不同。

维度公式
全仓 / 逐仓占用公式相同。差别是资金来源:全仓扣 cross_trading_available;逐仓从 balance 划入 isolated_margin,目标 ≥ position_im + open_orders_im + fee
做多 / 做空相同 Q 时 IM 相同(都用 mark)。fee 用 P_fill:市价多看 ask、空看 bid
杠杆 L(可调)占用随 L 变:IM = max(N_mark / L, N_mark × im)。调 L 立刻重算此项

链上市价吃单、无剩余挂单时的 admission 等价于:

模式开仓需要
全仓taker_fee + Δposition_imbalance + cross_account_upnl − Σ(Cross IM);手续费本身必须由真实 available_balance 覆盖(uPnL 不能付 fee)
逐仓isolated_margin ≥ position_im + open_orders_im + taker_fee;不足则从 available_balance(不含 uPnL)划入

详见 write-actions §7.0


5. 强平价格

求解 margin + uPnL(liq) = MM(liq)。令 s = +1 做多、s = −1 做空:

liq = (margin − s × |Q| × P_entry) / (|Q| × (mm − s))

展开:

做多:liq = (margin − Q × P_entry) / (Q × (mm − 1))
= P_entry × (1 − m) / (1 − mm)

做空:liq = (margin + |Q| × P_entry) / (|Q| × (mm + 1))
= P_entry × (1 + m) / (1 + mm)

其中 m = margin / (|Q| × P_entry)

liq ≤ 0、仓位为 0、无匹配档或分母为 0 → 面板 / API 为 N/Anull(无有效正强平价)。

5.1 下单窗预览用的 margin(无仓新开)

这是全仓 / 逐仓强平价的唯一差别。

模式margin含义
逐仓IM(N_entry, L)只拿本仓初始保证金,强平价贴着开仓价
全仓account_value(> 0 时)整户权益作垫;闲置余额越大,多头 liq 越低、空头 liq 越高。若权益不可用则回退 IM

RPC getEstimatedLiquidationPrice逐仓 what-ifmargin = IM(N_entry, leverage),不读账户权益。与下单窗逐仓新开一致,与下单窗全仓(用 account_value)不同。

5.2 持仓列表展示(成交后)

同一方程,margin 换成仓位权益底数:

模式margin
逐仓isolated_margin(开仓划入后 ≈ IM;fee 已从钱包扣除)
全仓balance + 全部 Cross uPnL − 本仓当前 mark 的 uPnL(假设仅本市场 mark 走到 liq,其余 Cross 仓 uPnL 冻结)

字段:getAccount / WS account.*positions[].liquidation_price

5.3 链上是否真强平

展示价不是执行 gate。Liquidate 判定为 equity < MM(mark)write-actions §8.1):

模式equity
逐仓isolated_margin + 本仓 uPnL
全仓balance + 全部 Cross uPnL(多市场净额,不扣 IM 预占)

uPnL = size × (mark − entry)size 带符号,空头自然取负)。


6. 全仓 / 逐仓 × 做多 / 做空(无仓新开)

m_iso = max(1/L, im)。逐仓新开 margin = m_iso × N_entry。全仓预览 m_cross = account_value / N_entryaccount_value > 0)。

订单价值预估占用强平价
逐仓 · 多Q × P_orderIM(N_mark, L) + N_fill × fP_entry × (1 − m_iso) / (1 − mm)
逐仓 · 空同上(市价用 bid 侧 P_order同上(fee 用 bid 侧 P_fillP_entry × (1 + m_iso) / (1 + mm)
全仓 · 多与逐仓多相同与逐仓多相同P_entry × (1 − m_cross) / (1 − mm)
全仓 · 空与逐仓空相同与逐仓空相同P_entry × (1 + m_cross) / (1 + mm)

订单价值不随 L、保证金模式变化。预估占用随 L 变(受档位 im 托底)。强平价:逐仓随 L 变(margin = IM);全仓预览用整户权益,调 L 通常不改预览强平价(只改占用)。


7. 已有仓位时的预览修正

下单窗在已有仓位上会先投影成交后仓位,再代入 §5:

成交后变化仓位入场价逐仓 margin
同向加仓size_old + signed(Q)数量加权均价原 isolated_margin(或 margin_used)+ 本单 IM
减仓未翻向剩余仓位沿用原 entry按剩余 / 原仓位绝对值比例缩 margin_used
翻向新方向数量本单 P_entry新仓 IM(N_entry, L)
全平0不估算(N/A)

全仓预览只要 account_value > 0,仍优先用整户权益作 margin(已含其他仓 uPnL)。


8. 字段对照

面板字段预览公式链上对应
订单价值Q × P_order成交 notional = |size| × fill_price
预估占用(含手续费)IM(N_mark, L) + N_fill × f全仓 taker_fee + Δposition_im;逐仓划入 isolated_marginposition_im + oo_im + fee
强平价格§5,无仓逐仓 ≈ getEstimatedLiquidationPrice持仓 estimate_liquidation_price;是否强平见 Liquidate gate

实现真源:zepto_types::initial_marginzepto_clearinghouse::estimate_liquidation_price / cross_liquidation_display_marginzepto_clearinghouse::fees::taker_fee