简短的答案
Hyperliquid 算的是 liq_price = price - side * margin_available / position_size / (1 - l * side),其中 side 对多头是 1、对空头是 -1,l 是维持杠杆的倒数,而 margin_available 对一个全仓仓位是账户价值减去所需的维持保证金,对一个逐仓仓位是逐仓保证金减去同样这笔要求。维持保证金是这个资产最大杠杆下初始保证金的一半,这把它放在一个 40 倍资产上名义金额的 1.25 % 和一个 3 倍资产上的 16.7 % 之间。
用话说:取这个仓位被估值的那个价格,把它移动你还能亏掉的那笔保证金,摊到这个规模上,再加一点小修正,因为随着价格逆向走,那笔维持保证金的要求自己也在变小。
四个输入
price:这个仓位被估值所用的标记价格。position_size:以这个资产的单位计的规模,不是以美元计。side:多头是 1,空头是 -1。margin_available:对一个全仓仓位,是账户价值减去所需的维持保证金;对一个逐仓仓位,是逐仓保证金减去同样这笔要求。l:维持杠杆的倒数,而维持杠杆是这个资产最大杠杆的两倍。在一个有保证金分档的资产上,维持杠杆取的是这个仓位在强平价格上的价值所落入那一档的。
一个算例
取一个最大杠杆是 20 倍的市场。在那个杠杆下初始保证金是名义金额的 5 %,所以维持保证金是 2.5 %,维持杠杆是 40,而 l 是 0.025。
在标记价格 100,000 上开一个 0.1 单位的多头,逐仓,十倍杠杆。
| 步骤 | 数字 |
|---|---|
| 名义金额 | 0.1 x 100,000 = 10,000 |
| 逐仓保证金,按 10 倍 | 10,000 / 10 = 1,000 |
| 所需的维持保证金,2.5 % | 0.025 x 10,000 = 250 |
| 可用保证金 | 1,000 - 250 = 750 |
| 强平价格,多头 | 100,000 - 750 / 0.1 / 0.975 = 92,307.69 |
这个多头在 92,307.69 被强平,比入场低约 7.7 %。同一个仓位做成空头,side 取 -1,得到 100,000 + 750 / 0.1 / 1.025,也就是 107,317.07,比入场高约 7.3 %。那个不对称来自修正项,不是一笔手续费。
改成全仓持有,在一个账户价值为 1,000 且没有其他仓位的账户里,数字一模一样。账户价值变成 2,000 时,margin_available 变成 1,750,强平价格降到 82,051.28。这就是文档说一个全仓仓位的强平价格不取决于所设杠杆时的意思:只有站在它后面的抵押品会推动这个价格。
一个估算值为什么不是触发点
- 在你开仓之前,显示的估算值取决于那一刻订单簿上的流动性,而文档说它可能不准确。
- 一旦仓位开着,资金费的支付每小时都在动你的账户价值,你其他那些全仓仓位的未实现结果也一样。
- 保证金不够时,这个估算值假定账户已经被补到初始保证金的要求。
- 保证金分档让维持杠杆取决于这个仓位在强平价格上的价值,所以一个大仓位是按一档更严的标准来判的,而不是像一个小仓位那样。
- 手续费和资金费在这个公式里哪儿都没有。它们照样会离开账户,而这么一走就动了那个触发的价格。
强平用的是标记价格,它把外部交易所的价格和 Hyperliquid 自己订单簿的状态合在一起。在一个波动的日子里,它可以离最后一笔成交很远,所以一次强平可能在你的图从没画出来的价格上触发。文档建议照着那个确切的公式走,而不是照着图上的一条线。
本站算什么,又漏掉什么
阶梯计算器排布一个分步建仓的仓位的各步,并报出完整阶梯全部成交之后到强平之前还剩多少余量,用的是和智能体代码一样的算术。它不算手续费、持有期间的资金费,也不算滑点;持仓成本计算器算前两样。
智能体自己的估算照着上面那个公式走,资产的维持杠杆是从交易所读来的。它仍然是一个估算值,而这正是为什么每日决策把一个仓位的规模定成:在每一步都成交之后,价格还能逆向走 100 % 才会碰到任何强平。重点是那份余量,不是最后一位小数。