强制平仓
强制平仓保护系统免受无法继续履行保证金义务的账户的影响。当账户权益低于其维持保证金要求时,清算流程会将仓位转移给有偿付能力的对手方。
触发条件
当账户变为**资不抵债(underwater)**时触发强制平仓:
组合保证金:
标准保证金:
其中维持保证金 = 权益 - 所需 MM。
系统持续轮询所有持仓账户以检查健康状况。
状态机
账户会经历四种清算状态:
| 状态 | 描述 | 订单限制 |
|---|---|---|
| Healthy(健康) | 权益 > 所需 MM | 无 |
| PreLiquidation(预清算) | 权益 < MM,宽限期生效中 | 禁止增加风险的订单 |
| InLiquidation(清算中) | 拍卖进行中 | 禁止所有订单 |
| Liquidated(已清算) | 拍卖完成 | 账户已清空 |
状态转换
- Healthy → PreLiquidation:账户低于 MM 阈值
- PreLiquidation → Healthy:账户恢复至 MM 以上(用户追加资金或平仓)
- PreLiquidation → InLiquidation:宽限期届满且未恢复
- InLiquidation → Liquidated:拍卖成功完成
预清算宽限期
当账户进入预清算状态时:
- 增加风险的订单会被立即禁止
- 降低风险的订单(平仓)仍然被允许
- 开始 60 秒宽限期
- 如果账户在宽限期结束前恢复(权益 > MM),则返回 Healthy 状态
- 如果宽限期结束后仍然资不抵债,清算拍卖开始
宽限期为用户提供时间来:
- 存入额外的抵押品
- 平仓以降低保证金要求
- 应对市场突发波动
清算拍卖
宽限期届满后,荷兰式拍卖开始:
有偿付能力拍卖(权益 > 0)
起始价格 = 权益 ×(1 - 罚金),并随时间递减。
清算人出价接管该账户的仓位,以换取:
- 账户权益(扣除罚金)
- 承担所有仓位的责任
罚金为清算人的参与创造激励。
无偿付能力拍卖(权益 < 0)
如果账户资不抵债(权益为负),保险基金会提供奖励,以激励清算人吸收资不抵债的仓位。
仓位转移
清算完成后:
- 所有仓位从被清算账户转移至清算人
- 清算人收取(有偿付能力)或支付(无偿付能力时获得奖励)结算价值
- 保证金根在链上更新
- 账户状态转换为
Liquidated
部分清算与全部清算
| 类型 | 条件 | 行为 |
|---|---|---|
| 部分清算 | ≤ 5 个仓位 | 清算特定仓位直至 MM 恢复 |
| 全部清算 | > 5 个仓位 | 清算整个账户 |
部分清算是确定性的:
- 仓位按一致的算法排序(非随机)
- 清算人按既定顺序接收仓位
- 当账户恢复健康状态时流程停止
无偿付能力瀑布机制
当清算无法收回全部价值时,损失按以下顺序吸收:
- 账户权益:被清算用户在其权益范围内承担损失
- 保险基金:当权益不足时弥补缺口
- ADL(自动减仓):如果保险基金耗尽,则按比例对盈利对手方进行减仓
- 社会化损失:最终兜底机制(目前尚未实施)
保险基金
保险基金:
- 从清算罚金中累积
- 覆盖无偿付能力的清算
- 通过交易手续费和罚金补充
- 设有最低储备目标
ADL(自动减仓)
如果保险基金无法覆盖损失:
- 选出持有盈利仓位的对手方
- 仓位以标记价格被强制平仓
- 选择时优先考虑利润和杠杆最高者
- 受影响的用户会收到通知
API 端点
获取清算状态
GET /liquidation/status?wallet=0x...
响应:
{
"success": true,
"data": {
"wallet": "0x...",
"state": "pre_liquidation",
"margin_mode": "portfolio",
"equity": "4500.00",
"mm_required": "5000.00",
"maintenance_margin": "-500.00",
"entered_pre_liq_at": 1737312000000,
"mm_shortfall": "500.00",
"auction_id": null
}
}
获取清算历史
GET /liquidation/history?wallet=0x...&limit=20
返回账户的状态转换历史。
获取公开清算历史
GET /liquidations?limit=50
返回跨钱包的清算状态转换历史,按最新优先排序。该端点为公开端点,采用游标分页,供清算机器人和监控工具使用。
查询参数
cursor:上一页返回的不透明游标。limit:每页数量,默认50,最大100。wallet:可选的钱包过滤条件。status或state:可选的清算转换状态过滤条件。可接受的值为healthy、pre_liquidation、in_liquidation和liquidated。margin_mode:可选的保证金模式过滤条件。可接受的值为standard和portfolio。liquidation_mode:可选的清算模式过滤条件。可接受的值为partial和full。
响应:PublicLiquidationsResponse,包含清算转换条目以及用于下一次请求的 page.next_cursor。
获取拍卖详情
GET /liquidation/auction/{auction_id}
返回拍卖状态、仓位和结算详情。
WebSocket 通知
清算状态变更会在 liquidation 频道广播:
{
"type": "LiquidationStateChange",
"wallet": "0x...",
"previous_state": "healthy",
"new_state": "pre_liquidation",
"equity": "4500.00",
"mm_required": "5000.00",
"shortfall": "500.00",
"auction_id": null,
"timestamp": 1737312000000
}
订阅即可接收您钱包的实时更新。
参数
| 参数 | 值 | 描述 |
|---|---|---|
poll_interval | 5 秒 | 健康检查频率 |
grace_period | 60 秒 | 拍卖开始前的时间 |
min_shortfall_threshold | 0 | 触发预清算的最小缺口 |
partial_liquidation_threshold | 5 个仓位 | 低于此数量时采用部分清算 |
最佳实践
交易者须知
- 监控保证金率:保持权益远高于 MM(建议 2 倍缓冲)
- 设置警报:使用 WebSocket 及早发现预清算状态
- 准备备用资金:随时准备好可存入的备用抵押品
- 使用止损:在强制平仓之前自动减少仓位
查询健康状况
定期检查您的保证金状态:
# Portfolio margin
curl "https://api.hypercall.xyz/portfolio?wallet=0x..."
# Look for:
# - equity vs maintenance_margin_required
# - margin_ratio (equity / IM)
宽限期内的恢复
如果您进入预清算状态:
- 通过资金流程存入抵押品
- 平仓以降低保证金要求
- 取消会增加风险的未成交订单
降低风险的操作始终被允许,即使处于预清算状态也是如此。
链上与链下
| 组件 | 位置 | 说明 |
|---|---|---|
| 健康监控 | 链下 | 5 秒轮询 |
| 状态转换 | 链下 | 记录并持久化 |
| 宽限期计时器 | 链下 | 可配置 |
| 拍卖执行 | 链上 | 通过 Controller 合约进行仓位转移 |
| 结算 | 链上 | 价值转移和保证金根更新 |
链下引擎负责检测与协调;链上执行确保结算的最终性。
另请参阅: