Appearance
ADL 风控
ADL(Auto-Deleveraging,自动减仓)是交易所在保险基金或清算机制无法正常承接风险时,对对手方盈利仓位执行的强制减仓。跨交易所套利中,任何一腿被 ADL 都可能立即形成裸露方向,因此必须把“发生概率预警”和“已经发生的硬事件”分开处理。
L1–L5是熊猫寨为了统一展示而定义的内部风险等级,不是交易所官方通用标准。平台没有公开个人排名时必须显示UNKNOWN,不能根据杠杆、强平价或主观判断伪造等级。
平台字段与统一映射
| 平台 | 官方预警字段 / 事件 | 原始等级含义 | 已发生 ADL 的判断 | 统一风险等级建议 |
|---|---|---|---|---|
| Binance | adlQuantile,接口 /fapi/v1/adlQuantile | 0–4,数值越高风险越高;HEDGE 仅为标记 | 查询强平订单中的 autoCloseType=ADL | 0→L1,1→L2,2→L3,3→L4,4→L5 |
| OKX | 持仓字段 adl | 0–5,0 最低,5 最高;未实现盈利和杠杆越高,优先级通常越高 | 历史持仓 type=5 部分 ADL,type=6 完全 ADL;事件类型为 adl | 原始值直接映射;0 为空仓/最低风险 |
| Bybit | adlRankIndicator | 0 为空仓默认值,1–5 为风险等级,5 最高 | positionStatus=Adl;同时可参考全局 adlAlert | 原始值直接映射 |
| Gate | adl_ranking / WebSocket rank_division | 与其他平台相反:1 最高,5 最低;6 表示无仓位或正在清算 | /futures/{settle}/auto_deleverages 查询已发生 ADL | 1→L5,2→L4,3→L3,4→L2,5→L1;6 单独标记 |
| Bitget | /api/v2/mix/position/adlRank 的 rank | 0–1 小数,越接近 1 越容易 ADL;adlRank 已废弃 | 官方排名接口不是已发生事件,需结合持仓、成交和账本变化确认 | <0.2=L1,0.2–0.4=L2,0.4–0.6=L3,0.6–0.8=L4,≥0.8=L5 |
| Hyperliquid | 没有公开个人 ADL 等级字段 | 官方按未实现盈利、杠杆和仓位规模排序,核心排序指标为 (标记价/开仓价) × (仓位名义额/账户价值) | 官方公开接口没有统一 ADL 等级;需通过仓位、成交和账户事件确认 | UNKNOWN,不能根据杠杆或强平价自行伪造等级 |
| Lighter | 没有公开 ADL 排名;WebSocket 有 deleverage 事件 | 不能提前得到统一风险等级 | Trade.type=deleverage 或私有通知 kind=deleverage 时,可确认已发生 Deleverage | UNKNOWN;只在明确事件出现时标记硬事件 |
统一风险等级
| 统一等级 | 含义 | 建议动作 |
|---|---|---|
L1 | 当前处于最低公开排名区间 | 正常监控,保留原始字段和更新时间 |
L2 | 风险开始抬升 | 提高采样频率,检查双腿仓位和可用保证金 |
L3 | 中等风险 | 发出预警,限制继续扩大仓位 |
L4 | 高风险 | 停止新的加仓步骤,准备任务归属型退出 |
L5 | 最高公开排名区间 | 触发严重告警,优先保护双腿净敞口 |
UNKNOWN | 平台未公开等级、字段缺失或数据过期 | 不解释为安全;保持未知状态并依赖硬事件检测 |
风险等级只表示进入 ADL 队列的相对优先级,不代表一定会发生 ADL。反过来,低等级也不能代替成交、持仓和账户事件核对。
预警与硬事件必须分开
系统至少应持久化两组状态:
text
adl_risk_level: L1 | L2 | L3 | L4 | L5 | UNKNOWN
adl_event_status: NONE | SUSPECTED | CONFIRMEDadl_risk_level用于提前告警和限制风险增加。adl_event_status=CONFIRMED只能由交易所明确事件、ADL 订单或可审计的成交记录触发。- 排名达到最高级不能直接写成“已发生 ADL”。
- 已确认 ADL 的优先级高于任何预警等级;即使等级为
L1或UNKNOWN,仍必须立即处置。
数据采集要求
保留原始证据
每次采集应保存平台、账户、标的、持仓方向、原始字段、原始值、统一等级、交易所事件时间和本地接收时间。不要只保存转换后的 L1–L5,否则无法在平台字段变化后重新审计。
按腿、按方向记录
双向持仓账户可能同时返回多腿数据。Binance 的 LONG、SHORT、BOTH 和 HEDGE 不能互相替代;风险状态必须绑定具体账户、标的和方向。
过期数据不沿用
如果私有接口失败、WebSocket 断开或数据超过允许时效,应把当前值降为 UNKNOWN,同时产生数据源异常告警,不能继续展示上一次低风险等级。
防止重复事件
使用平台事件 ID、订单 ID、成交 ID和时间戳建立幂等键。相同 ADL 事件重复推送时只更新确认信息,不得重复触发平仓订单。
已确认 ADL 后的处置
- 立即停止任务继续加仓,并冻结自动重试开仓。
- 持久化交易所原始事件、仓位快照、挂单和最近成交。
- 分别查询两腿真实仓位,不根据本地计划数量推断剩余敞口。
- 撤销可能继续增加风险的任务归属挂单。
- 计算 ADL 后的实际净敞口,并进入人工复核或任务归属型安全退出。
- 退出订单只能使用可验证的
reduce-only语义,禁止盲目反向下单。 - 通过 Telegram、邮箱或飞书发送最高级告警,并持续对账到仓位和挂单状态稳定。
两个交易所不会同时原子执行 ADL。任何一腿发生自动减仓后,另一腿可能继续保持原仓位,因此“重新读取真实仓位”必须先于后续处置。
实现检查清单
- [ ] 原始等级与统一等级同时保存
- [ ]
UNKNOWN不按低风险处理 - [ ] 排名预警与已发生事件使用不同字段
- [ ] Gate 排名方向已反转映射
- [ ] Bitget 使用
rank,不再依赖已废弃的adlRank - [ ] Hyperliquid、Lighter 不伪造个人预警等级
- [ ] WebSocket 断线和数据过期会产生告警
- [ ] 已确认事件会阻止继续加仓
- [ ] 处置前重新读取双腿真实仓位
- [ ] 重启后能恢复事件与对账状态,不重复下单
