读懂爆仓指标的正负号与分布,避开两个常见误读,再放进策略。
急跌之后,爆仓历史上出现一根很深的负柱——是很多多单被强平,还是这个币的数值本来就常偏负?0 不等于这个币的平常水准,这一点决定你怎么读这根柱子。如果你看的是价位上的爆仓地图,那是另一个估算,见爆仓地图怎么读。
爆仓指标是 Blave 自制指标,衡量一段时间内空单与多单哪一边被强平得多、差距有多不寻常。爆仓是杠杆仓位被交易所强制平仓:多单被强平时交易所送出卖单,空单被强平时送出买单。
正值代表空单爆仓较多、负值代表多单较多,0 不等于这个币的平常水准;数值没有上下限:
| 数值 | 意思 |
|---|---|
| > 0 | 该 timeframe 内空单爆仓多于多单 |
| < 0 | 多单爆仓多于空单 |
| ≈ 0 | 两边相抵、那段没有爆仓纪录,或数据中断;不代表这个币的平常水准 |
分布不对称,下缘(多单爆仓)比上缘深。以下是 Blave 实测的分位数,1 小时 K 线、timeframe 24h,期间 2024-09-15~2026-09-14,每小时取一个值(n = 17,520):
| 币种 | p1 | p50 | p99 | 大于 0 的时间比例 |
|---|---|---|---|---|
| BTC | −3.76 | −0.01 | +3.31 | 48.8% |
| ETH | −4.07 | −0.08 | +2.79 | 43.1% |
| SOL | −4.01 | −0.17 | +2.87 | 37.6% |
| DOGE | −4.07 | −0.23 | +2.97 | 31.1% |
数值大于 0 代表空单爆仓多于多单,小于 0 代表多单爆仓多于空单。但长期多单爆仓偏多的币,数值会系统性偏负,0 并不是这个币的「平常水准」。
在上面的测量期间(1 小时 K 线、timeframe 24h),数值大于 0 的时间比例见上表。同样是 0,在 BTC 大约是中位数,在 DOGE 已经比多数时候偏向空单爆仓。
交易所公开的强平数据有推送上限,同一时间的大量强平不会全部送出,所以这是抽样,行情越剧烈低估越多。数据中断期间,数值会像那段没有爆仓,不会标示缺数据。
所以别把单根柱子的深浅当成精确的爆仓规模,要看它落在这个币自己分布的哪一端。
目前没有任何官方策略使用爆仓数据,以下三种用法都是示意、未回测。代码里的阈值借用上面量到的分位数当起点,不是参数扫描的结果;怎么扫见阈值怎么扫。
最直接的写法是把数值落在分布两端的时段标出来。因为下缘比上缘深,两边门槛不要用同一个绝对值:以 BTC 为例,p1 约 −3.8、p99 约 +3.3。
LONG_FLUSH_TH = -3.8 # 示意:约 BTC 1h × 24h 的 p1 SHORT_FLUSH_TH = 3.3 # 示意:约 BTC 1h × 24h 的 p99 liq = fetch_liquidation(SYMBOL, INTERVAL, START, END, hdrs, timeframe='24h') df['LIQ'] = liq['alpha'] long_flush = df['LIQ'] <= LONG_FLUSH_TH # 多单集中爆仓 short_flush = df['LIQ'] >= SHORT_FLUSH_TH # 空单集中爆仓
标出来之后怎么交易要自己研究:Blave 没有验证过集中爆仓之后价格会反转还是延续。分位数也因币而异,ETH、SOL、DOGE 的 p1 都比 BTC 深,换币要重算。
因为 0 不是平衡点,「大于 0 就算空单爆仓偏多」这种写法,在 DOGE 这类长期偏负的币上会失真。改用该币自己过去一段期间的分位数当门槛,比较不受长期偏向影响:
# 示意:用过去 180 天的分位数当门槛,窗口长度没有扫描过
lo = df['LIQ'].rolling('180D').quantile(0.01)
hi = df['LIQ'].rolling('180D').quantile(0.99)
extreme = (df['LIQ'] <= lo) | (df['LIQ'] >= hi)
窗口太短,阈值会跟着近期行情漂移;窗口也不要跨进该币刚有数据的那一段(BTC、ETH 约 2023 年 1 月),那段数值还不稳,会算出假的极端值。
另一种保守的用法,是把它加在既有策略的进场条件上:数值落在任一端时,先不开新仓。沿用第 1 种用法的两个门槛,compute_entry 换成你原本策略的进场条件:
# 示意:数值落在任一端时不进场 flush = (df['LIQ'] <= LONG_FLUSH_TH) | (df['LIQ'] >= SHORT_FLUSH_TH) entry = compute_entry(df) & ~flush
这个组合没有回测,也没有验证过避开集中爆仓能改善绩效;只是把「刚爆完一波」当成暂停开新仓的条件。
爆仓指标有两个设定:timeframe 是看多长一段时间的爆仓,可选 15min、1h、4h、8h、24h、3d,默认 24h;周期(period)决定多久取一次值,可选 5min、15min、1h、4h、8h、1d。换 timeframe,分布就会变;同一期间改用 timeframe 1h(1 小时 K 线)的量测如下:
| 币种 | p1 | p50 | p99 | 大于 0 的时间比例 |
|---|---|---|---|---|
| BTC | −2.62 | 0.00 | +2.12 | 52.5% |
| ETH | −2.84 | 0.00 | +2.17 | 48.8% |
| SOL | −3.07 | 0.00 | +2.21 | 45.5% |
| DOGE | −3.50 | 0.00 | +2.09 | 40.3% |
跟 24h 比,1h 的两端比较窄,中位数都是 0.00,大于 0 的比例也比较接近一半。所以门槛要跟着 timeframe 重算,不能把一组数字套到另一组;15min、4h、8h、3d 本文没有测量。
分位数只是起点。把多单端、空单端阈值各列一排候选值(例如 p1、p2、p5 对 p99、p98、p95),逐组回测,挑一片表现都不差的区域,而不是挑最高的那一格。
results = []
for q_lo in [0.01, 0.02, 0.05]:
for q_hi in [0.95, 0.98, 0.99]:
lo = df['LIQ'].rolling('180D').quantile(q_lo)
hi = df['LIQ'].rolling('180D').quantile(q_hi)
extreme = (df['LIQ'] <= lo) | (df['LIQ'] >= hi)
entry = compute_entry(df) & ~extreme
results.append((q_lo, q_hi, backtest(entry))) # backtest 换成你自己的回测函数,每组都扣手续费后再比
timeframe、币种、K 线周期换一个就重扫一次;为什么挑平坦区而不挑最高点,见避免过拟合。
| 页面 | 看什么 | 谁能看 |
|---|---|---|
| 爆仓总览 | 下拉切换「空单爆仓」「多单爆仓」两张排行,各取前 30 名。方块大小是数值的绝对值,不是爆仓金额;颜色是该 timeframe 的价格涨跌。 | 登录 |
| 爆仓历史 | 单一币种的爆仓指标柱状图叠上价格,可选 timeframe 与周期,附 stat 字段。 | 非 Pro 最近 7 天延后显示 |
以下是组合思路,不是验证过的结论:
| 组合 | 用途 |
|---|---|
| 爆仓 + 巨鲸警报 | 用巨鲸警报看未平仓量有没有反常变动,再看同一段爆仓指标落在哪一端,分辨那次变动是否伴随集中强平。 |
| 爆仓 + 多空力道 | 爆仓指标只看被强平的一方,用多空力道看同一段交易员积极买卖的力道,补上自愿交易的那一半。 |
爆仓指标的端点是 GET /liquidation/get_alpha,参数有 symbol、period、timeframe(默认 24h)与起止日期(start_date、end_date);Blave Agent 里对应 fetch_liquidation。只回传已收盘的 K 线,字段是 timestamp、alpha 与 stat,区间超过 1 年会自动截短。最早的币种(BTC、ETH)数据从 2023-01-01 起、之前的数值是 0,其他币种可能更晚;刚有数据的那一段数值还不稳,别拿来定阈值。
get_alpha 的 stat 对象描述最新一笔数值:
| 字段 | 意思 |
|---|---|
up_prob | 模型估计 24 小时后上涨的概率,是估计值,不是保证的胜率。 |
avg_up_return /avg_down_return | 24 小时后上涨时的平均涨幅、下跌时的平均跌幅,不分爆仓指标高低。 |
exp_value | up_prob × avg_up_return +(1 − up_prob)× avg_down_return,是小数,不是百分比。 |
is_data_sufficient | 历史数据是否足够;false 时这几个数字仅供参考。 |
爆仓地图、地图变化与多交易所汇总的端点和栏位,见爆仓地图怎么读。
stat 是估计值不是胜率——任何阈值都要用你自己的回测验证。