Read the indicator's sign and distribution, avoid two common misreads, and put it into a strategy.
After a sharp drop, Liquidation History shows a very deep negative bar. Were lots of longs force-closed, or does this coin's value often run negative anyway? 0 is not the coin's usual level, and this point decides how you read that bar. If you are looking at liquidations by price level, that is a different estimate; see the Liquidation Map guide.
The Liquidation Indicator is a Blave proprietary indicator of whether shorts or longs were force-closed more over a period, and how unusual the gap is. A liquidation is an exchange force-closing a leveraged position: when a long is liquidated the exchange sends a sell order, and when a short is liquidated it sends a buy order.
Positive means more short liquidations, negative more long liquidations, and 0 is not the coin's usual level. The value has no upper or lower bound:
| Value | Meaning |
|---|---|
| > 0 | More short than long liquidations within the timeframe |
| < 0 | More longs than shorts were liquidated |
| ≈ 0 | The two sides cancel out, no liquidations were recorded, or data was interrupted; not the coin's usual level |
The distribution is lopsided: the lower tail (long liquidations) runs deeper than the upper one. These are Blave's measured quantiles on 1-hour bars with timeframe 24h, from 2024-09-15 to 2026-09-14, one value per hour (n = 17,520):
| Coin | p1 | p50 | p99 | Share of time above 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% |
Above 0 means more short than long liquidations; below 0 means more long than short. But a coin that has long seen more long liquidations sits systematically negative, so 0 is not this coin's "usual level".
The table above gives the share of time above 0 over that measurement period (1h bars, 24h timeframe). The same 0 sits near BTC's median, but for DOGE it already leans further toward short liquidations than most of the time.
Public exchange liquidation feeds have a push limit, so not every liquidation in the same moment gets sent. That makes this a sample, and the more violent the move, the more it undercounts. While data is interrupted, the value looks as if nothing was liquidated, with no missing-data flag.
So do not read the depth of a single bar as an exact liquidation size; look at which end of the coin's own distribution it falls in.
No official strategy uses liquidation data today, so all three uses below are sketches, not backtested. The thresholds in the code borrow the quantiles measured above as a starting point; they did not come from a parameter scan. For how to scan, see How to scan thresholds.
The most direct approach flags the periods when the value lands in either tail. Because the lower tail runs deeper, do not use the same absolute value for both sides. For BTC, p1 is about −3.8 and p99 about +3.3.
LONG_FLUSH_TH = -3.8 # sketch: about BTC's p1 at 1h × 24h SHORT_FLUSH_TH = 3.3 # sketch: about BTC's p99 at 1h × 24h liq = fetch_liquidation(SYMBOL, INTERVAL, START, END, hdrs, timeframe='24h') df['LIQ'] = liq['alpha'] long_flush = df['LIQ'] <= LONG_FLUSH_TH # concentrated long liquidations short_flush = df['LIQ'] >= SHORT_FLUSH_TH # concentrated short liquidations
How to trade the flags is your research: Blave has not verified whether price reverses or continues after concentrated liquidations. Quantiles also differ by coin. ETH, SOL and DOGE all have a deeper p1 than BTC, so recompute when you switch coins.
Since 0 is not a balance point, a rule like "above 0 means shorts are getting liquidated" breaks down on coins like DOGE that lean negative for long stretches. Use the coin's own quantiles over a past window instead, which is less affected by that long-run lean:
# sketch: quantiles over the past 180 days; window length not scanned
lo = df['LIQ'].rolling('180D').quantile(0.01)
hi = df['LIQ'].rolling('180D').quantile(0.99)
extreme = (df['LIQ'] <= lo) | (df['LIQ'] >= hi)
With too short a window, the thresholds drift with recent conditions. Also keep the window out of the stretch right after the coin's data starts (around 2023-01 for BTC and ETH): values there are not yet stable and produce false extremes.
A more conservative use adds it to an existing strategy's entry rule: skip new positions while the value sits in either tail. It reuses the two thresholds from use 1. Replace compute_entry with your strategy's own entry condition:
# sketch: no entry while the value sits in either tail flush = (df['LIQ'] <= LONG_FLUSH_TH) | (df['LIQ'] >= SHORT_FLUSH_TH) entry = compute_entry(df) & ~flush
This combination is not backtested, and Blave has not verified that avoiding concentrated liquidations improves performance. It only treats "a wave just got liquidated" as a reason to pause new entries.
The Liquidation Indicator has two settings. The timeframe is how long a stretch of liquidations it looks at: 15min, 1h, 4h, 8h, 24h or 3d, defaulting to 24h. The period sets how often a value is taken: 5min, 15min, 1h, 4h, 8h or 1d. Changing the timeframe changes the distribution; here is the same period measured with timeframe 1h (1-hour bars):
| Coin | p1 | p50 | p99 | Share of time above 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% |
Compared with 24h, 1h has narrower tails, a median of 0.00 for every coin, and a share above 0 closer to half. So recompute thresholds whenever you change the timeframe; one set of numbers does not carry over. 15min, 4h, 8h and 3d were not measured here.
Quantiles are only a starting point. List a row of candidate thresholds for the long side and the short side (for example p1, p2, p5 against p99, p98, p95), backtest each pair, and pick an area where results are all decent, not the single best cell.
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))) # replace backtest with your own backtest function; compare each pair after fees
Rescan whenever you change the timeframe, coin or bar interval. For why to pick a flat area instead of the peak, see Avoiding Overfitting.
| Page | What it shows | Access |
|---|---|---|
| Liquidation Overview | A dropdown switches between the short-liquidation and long-liquidation rankings, top 30 each. Tile size is the absolute value, not a liquidation amount; color is the price change over the timeframe. | Log in |
| Liquidation History | Bars of one coin's liquidation indicator over price, with timeframe and bar interval options and the stat fields. | Last 7 days delayed for non-Pro |
These are ideas for combinations, not verified conclusions:
| Pair | Use |
|---|---|
| Liquidation + Whale Hunter | Use Whale Hunter to spot unusual open-interest moves, then check which tail the liquidation indicator sat in over the same period to see whether the move came with concentrated liquidations. |
| Liquidation + Taker Intensity | The Liquidation Indicator only sees the side that was force-closed; use Taker Intensity to see how aggressively traders were buying and selling over the same stretch, adding the voluntary half. |
The Liquidation Indicator endpoint is GET /liquidation/get_alpha with symbol, period, timeframe (default 24h) and start/end dates (start_date, end_date); in Blave Agent the helper is fetch_liquidation. Only closed bars are returned, with timestamp, alpha and stat, and ranges longer than 1 year are truncated. The earliest coins (BTC, ETH) have data from 2023-01-01, with values of 0 before that; other coins may start later. Values right after data starts are not yet stable, so do not set thresholds from them.
The stat object from get_alpha describes the latest value:
| Field | Meaning |
|---|---|
up_prob | The model's estimated probability of a rise 24 hours later. It is an estimate, not a guaranteed win rate. |
avg_up_return /avg_down_return | The average gain when the price was up 24 hours later, and the average loss when it was down, regardless of the Liquidation Indicator level. |
exp_value | up_prob × avg_up_return + (1 − up_prob) × avg_down_return, as a decimal, not a percentage. |
is_data_sufficient | Whether there is enough history; when false, treat these numbers as reference only. |
For the Liquidation Map, Map Change and By Exchange endpoints and fields, see How to Read the Liquidation Map.
stat is an estimate, not a win rate. Validate any threshold with your own backtest.