Skip to main content

Liquidation Map Methodology

A liquidation map shows where forced closing of leveraged perpetual-futures positions sits relative to the current price: how many US dollars of long positions would be liquidated if the price fell to each level, and how many dollars of short positions if it rose to each level.

Blocklens publishes two maps that are built in fundamentally different ways and are always labelled separately:

SourceWhat it isCoinsHistory
Binance — modelAn estimate. Binance does not disclose positions, so levels are reconstructed from public open interest and hourly candles with the model described below.BTC, ETH, SOL, HYPE (USDⓈ-M perpetuals BTCUSDT, ETHUSDT, SOLUSDT, HYPEUSDT)from 2023-01-01; HYPE from 2025-06-06
Hyperliquid — actual positionsFacts. Hyperliquid positions and their liquidation prices are public; we read them for every holder.BTC, ETH, SOL, HYPEfrom 2025-07-29

The map is available in Lab → Dashboards → Blocklens Special → Liquidation Map.

Most of this page documents the Binance model in full — formulas, parameters, calibration and known limitations — so that anyone can reproduce it from the free public data. The Hyperliquid part is described for contrast.

Not a trading signal

The liquidation map is a descriptive tool, not a price target or a trading signal. See What the evidence says.


1. How to read the map​

1.1 Buckets​

The price axis is cut into equal-width buckets (price bands). On the current map a bucket is about 0.25% of the price, rounded to a «nice» step of 1, 2, 2.5 or 5 × 10ⁿ: $250 for BTC, $10 for ETH at current prices.

A bucket's value is the USD size of positions whose liquidation price falls inside it, valued at the liquidation price:

bucket USD=∑positions in bucket∣size in coins∣×liquidation price\text{bucket USD} = \sum_{\text{positions in bucket}} |\text{size in coins}| \times \text{liquidation price}
  • Longs are drawn below the current price (they are liquidated when the price falls), shorts above (when it rises).
  • The map covers ±50% of the current price. Volume further away is not drawn — it would pile up in the edge bucket and look like a false peak — but is reported in the summary as «beyond the range».
  • Cumulative curves add buckets from the current price outward: the long curve at $80K is the total USD of longs liquidated if the price fell from the current level to $80K.
  • Peaks (labelled clusters) are the up to 5 largest buckets per side, at least 3% of price apart.

1.2 Snapshots and the heatmap​

There is one map per day:

  • Binance model — the state at 00:00 UTC of the day (built from all hourly data up to the end of the previous day).
  • Hyperliquid — the latest day comes from our own scan (early UTC morning, the exact time is shown with the map); history comes from daily archive snapshots of the full exchange state (see §3.4); days missing from the archive are reconstructed estimates (§3.5).

The heatmap puts these daily maps side by side: x — date, y — price, colour — the USD that the map of that day placed at that price. It is not a record of liquidations that actually happened. To keep days comparable when the price (and therefore the bucket step) changes, heatmap rows use a fixed absolute grid: BTC $500, ETH $20, SOL $0.5, HYPE $0.25, within ±50% of each day's price. The price line is drawn on top.


2. Binance — model​

2.1 Why a model​

Binance publishes aggregate open interest, trades and candles, but not individual positions, entry prices or leverage. Any Binance liquidation map — ours or a third party's — is therefore a model: an assumption about when positions were opened, at what price, on which side, with what leverage, and how they disappear. Ours makes every one of these assumptions explicit.

The idea in one paragraph: every hour in which open interest grows, the new contracts are placed at that hour's typical price and split into longs and shorts using the taker-buy share; each side is spread over a fixed leverage distribution, which turns entry prices into liquidation prices. Every hour in which open interest falls, all open positions shrink proportionally. Every hour, the price range of the candle erases the levels it reached — those positions have been liquidated.

2.2 Inputs​

All inputs are free and public.

InputSourceHow it is used
Hourly candles (open, high, low, close, volume, taker-buy volume)data.binance.vision futures/um/monthly/klines/<SYMBOL>/1h (past months) and …/daily/klines/<SYMBOL>/1h (current month)typical price, taker-buy share, the price range that erases levels
Open interest every 5 minutes (in coins)data.binance.vision futures/um/daily/metrics/<SYMBOL>open interest at the end of each hour
Live tail (hours not yet archived)Binance REST /fapi/v1/klines (1h) and /futures/data/openInterestHist (period 1h)the same fields for the last hours before the snapshot

For each hour tt the model uses:

  • Typical price Pt=(Ht+Lt+Ct)/3P_t = (H_t + L_t + C_t) / 3 — a single representative entry price for the hour.
  • Taker-buy share bt=taker-buy volumet/volumetb_t = \text{taker-buy volume}_t / \text{volume}_t (0.5 if the volume is zero) — the share of the hour's volume in which the buyer was the aggressor (market order).
  • Open interest at the end of the hour OItOI_t — the last valid 5-minute record within the hour.

The daily archive appears about a day late. Hours after the last archived day are taken from the REST API; a map built with such a live tail is rebuilt from the archive once it is published (within a week), so the newest day can change slightly.

2.3 New positions​

If open interest grew over the hour, ΔOIt=OIt−OIt−1>0\Delta OI_t = OI_t - OI_{t-1} > 0, the new contracts are opened at PtP_t. Every new contract has one long and one short leg, but the two legs do not carry the same liquidation risk: the aggressive side (taking liquidity with market orders — typically leveraged speculators) is counted in full, the passive side (market makers, hedgers) is reduced by the imbalance of the hour:

new longst=ΔOIt⋅min⁡(1, 2bt),new shortst=ΔOIt⋅min⁡(1, 2(1−bt))\text{new longs}_t = \Delta OI_t \cdot \min(1,\ 2 b_t), \qquad \text{new shorts}_t = \Delta OI_t \cdot \min(1,\ 2 (1 - b_t))

With a balanced hour (bt=0.5b_t = 0.5) both sides receive the full ΔOIt\Delta OI_t. With bt=0.6b_t = 0.6 (buyers more aggressive) longs receive ΔOIt\Delta OI_t and shorts 0.8 ΔOIt0.8\,\Delta OI_t. Neither side ever exceeds the increase of open interest.

2.4 Leverage distribution and liquidation price​

Each side's new mass is spread over eight leverage levels with fixed weights:

Leverage LL3×4×5×10×20×25×50×100×
Weight11331111
Share of the mass8.3%8.3%25%25%8.3%8.3%8.3%8.3%

The weights are calibrated, see §2.8. The liquidation price of a position opened at PP with leverage LL uses the isolated-margin approximation:

long: P⋅(1−1L+mmr),short: P⋅(1+1L−mmr)\text{long: } P \cdot \left(1 - \frac{1}{L} + mmr\right), \qquad \text{short: } P \cdot \left(1 + \frac{1}{L} - mmr\right)

where mmrmmr is the maintenance-margin rate of the symbol's first (smallest-position) tier:

SymbolmmrmmrLeverages used
BTCUSDT0.4%all eight
ETHUSDT0.5%all eight
SOLUSDT0.5%all eight
HYPEUSDT1.0%3–50× (no 100×)

The SOL and HYPE rates are Binance's first-tier rates (public leverage brackets, checked 2026-10-21). For ETH the model keeps 0.5%, the value it was calibrated with, although Binance's first tier is 0.4% today. Leverages above the symbol's first-tier maximum are dropped and the remaining weights renormalised: HYPEUSDT allows at most 75×, so it uses the seven levels 3–50× with weights summing to 11.

A 10× long opened at $100,000 is liquidated at $100,000 × (1 − 0.1 + 0.004) = $90,400.

The mass (in coins) is added to the bucket that contains the liquidation price.

2.5 Closing: falling open interest​

If open interest fell over the hour, ΔOIt<0\Delta OI_t < 0, some positions were closed — but the data does not say which. The model closes all open positions proportionally, on both sides and at every level:

mapt=mapt−1⋅OItOIt−1\text{map}_t = \text{map}_{t-1} \cdot \frac{OI_t}{OI_{t-1}}

Hours in which open interest did not change leave the map as it is.

2.6 Liquidation: the price erases levels​

Every hour, before the hour's new positions are added, the candle erases the levels the price reached during the hour:

  • all long buckets at or above the hour's low are set to zero;
  • all short buckets at or below the hour's high are set to zero.

Those positions are considered liquidated. New positions of an hour are therefore first exposed to the next hour's candle: within one hour the order of trades is unknown, so a position opened at the typical price is not erased by a wick of the same hour.

2.7 Window and the 180-day warm-up​

The map of day DD (state at 00:00 UTC of DD) is built from the hourly data of the 181 calendar days [D−181, D−1][D - 181,\ D - 1] — a 180-day window plus the last day, 4,344 hours. The model starts with an empty map at the start of the window and runs hour by hour to the end. The first hour only sets the reference open interest.

Why 180 days. The model has no knowledge of positions opened before its window, so the window has to be long enough for the result to stop depending on it. The map is a balance between inflow (new positions) and two decay processes (proportional closing on every fall of open interest, erasing by every price move). Old positions survive only if open interest kept growing and the price never reached their levels, so their weight shrinks with age. We tested this directly: on the map of 2026-10-03, windows from 180 to 730 days give the same profile, while a 30-day window misses about 39% of the positions present in the converged map. The 90-day and 180-day maps of 2026-10-04 have the same three largest clusters on both sides, for BTC and ETH. One map with a 180-day warm-up is therefore published instead of several short-window variants.

For an independent reference point: on Hyperliquid, where actual position ages can be observed, the survival curve of positions fitted on its history is S(t)=0.32 e−t/2.1+0.68 e−t/86S(t) = 0.32\,e^{-t/2.1} + 0.68\,e^{-t/86} (tt in days) — about 8% of positions are still open after 180 days and about 1% after a year.

Positions older than 180 days. Positions opened before the window are not in the map at all — the model does not «drop» them at day 181, it never saw them. The working assumption is that by that age they are mostly gone: closed proportionally by the many falls of open interest, and/or erased because the price has passed their levels. This is a limitation of the model: genuinely long-lived positions — for example low-leverage longs opened far below the current price, or hedges and basis-trade legs that stay open for many months — are underrepresented, mostly in the far, low-leverage part of the map.

Newly listed symbols: warm-up incomplete. A full window needs 181 whole days of data. HYPEUSDT was listed on Binance futures during 2025-05-30, so the listing day is incomplete; its maps are published from 2025-06-06 (after the first week of data), but until the window is full the model has seen only the days since the listing. Such maps are marked «warm-up incomplete» (in the map's quality data: warmup_complete = false and warmup_days, the number of whole days the model has seen). They contain only positions opened since the listing and, like a short-window map, understate the far, low-leverage levels. This applies to the 175 HYPE maps of 2025-06-06 … 2025-11-27. The first full window is 2025-05-31 … 2025-11-27 (181 days), so HYPE maps have the full window from 2025-11-28. BTC, ETH and SOL have archives from 2019–2021, so every published day since 2023-01-01 has the full window.

2.8 Calibration of the leverage weights​

The leverage weights are the only fitted parameters. They were calibrated against publicly available liquidation maps (third-party models) of the Binance BTC/USDT perpetual — as a calibration target, not as a claim that those maps are correct:

  • 30 prominent long-liquidation levels were marked on the reference maps on 9 dates (January–August 2026, 1-month and 3-month windows);
  • because the map is linear in the weights, the map of each leverage was computed once and the weights were found by a grid search;
  • result: 81% of the 30 reference levels lie within ±1% of one of the six largest peaks of the model; six random levels score 27% on average (99th percentile 46%).

The calibration shows a recognisable structure: large clusters are explained by 3–10× leverage from price zones where the market spent a long time (on 2026-08-04, reference levels at $57.7K / $51.5K / $48.3K / $42.7K correspond to 10× / 5× / 4× / 3× from about $64K).

2.9 Data quality​

Invalid open-interest records. The Binance archive contains glitch records with open interest = 0 (BTC and ETH, on about 20 days since 2023 — for example BTCUSDT on 2026-10-15, 13:40–14:40 UTC, and 2024-07-09…15). Taken at face value, such a record means a −100% fall of open interest: step 2.5 would scale the whole map to zero, and the next hour would rebuild it from a single hour of inflow. On the 2026-10-15 glitch this collapses the BTC map from about $4.4B to well under $1B for the following days. Therefore:

  • open-interest records that are ≤ 0, non-numeric or non-finite are skipped;
  • an hour without a valid record is treated as missing: no positions are opened or closed in that hour (the candle still erases levels), and the next valid hour is compared with the last valid one.

Quality gate. For every map the pipeline counts, over the full 181-day hour grid, the expected hours, the missing candles, the longest gap and the hours without open interest. If more than 3 candles or more than 24 hours of open interest are missing, the day is not published (it is shown as a gap instead of a misleading map). On the whole history since 2023-01-01 no window has a missing candle and the worst window has 10 hours without open interest, so every day passes.

Other details: timestamps of some archives since 2025 are in microseconds and are normalised; duplicate candles are dropped.

2.10 Pseudo-code​

# inputs: hourly candles kl[t] = {high, low, close, volume, taker_buy} for the 181-day window,
# oi[t] = last valid 5-minute open interest of hour t (missing if none)
LEVERAGE = {3: 1, 4: 1, 5: 3, 10: 3, 20: 1, 25: 1, 50: 1, 100: 1}
MMR = {"BTCUSDT": 0.004, "ETHUSDT": 0.005, "SOLUSDT": 0.005, "HYPEUSDT": 0.01}[symbol]
MAX_LEVERAGE = {"BTCUSDT": 150, "ETHUSDT": 150, "SOLUSDT": 100, "HYPEUSDT": 75}[symbol]
lev = {L: v for L, v in LEVERAGE.items() if L <= MAX_LEVERAGE}
w = {L: v / sum(lev.values()) for L, v in lev.items()}

longs, shorts = Buckets(), Buckets() # coins per price bucket
prev_oi = None
for t, c in enumerate(kl):
longs.zero_at_or_above(c.low) # liquidated during hour t
shorts.zero_at_or_below(c.high)
cur = oi.get(t)
if cur is None or cur <= 0: # missing / glitch: skip the hour
continue
if prev_oi is not None:
d = cur - prev_oi
if d < 0: # positions closed proportionally
longs.scale(cur / prev_oi); shorts.scale(cur / prev_oi)
elif d > 0: # new positions at the typical price
p = (c.high + c.low + c.close) / 3
b = c.taker_buy / c.volume if c.volume > 0 else 0.5
for L in w:
longs.add(p * (1 - 1 / L + MMR), d * w[L] * min(1, 2 * b))
shorts.add(p * (1 + 1 / L - MMR), d * w[L] * min(1, 2 * (1 - b)))
prev_oi = cur

mark = kl[-1].close
map_usd = {bucket: coins * bucket.mid for bucket, coins in longs.below(mark) + shorts.above(mark)}

The production implementation additionally renormalises the scale factor for numerical precision and walks only between the outermost non-empty buckets when erasing; the output is identical.

2.11 Worked example​

BTCUSDT, one hour with a typical price of $100,000, open interest up by 1,000 BTC and a taker-buy share b=0.6b = 0.6. New longs = 1,000 × min(1, 1.2) = 1,000 BTC, new shorts = 1,000 × min(1, 0.8) = 800 BTC.

LeverageWeightLongs, BTCLong liq. priceLongs, USDShorts, BTCShort liq. priceShorts, USD
3×1/1283.3$67,067$5.59M66.7$132,933$8.86M
4×1/1283.3$75,400$6.28M66.7$124,600$8.31M
5×3/12250.0$80,400$20.10M200.0$119,600$23.92M
10×3/12250.0$90,400$22.60M200.0$109,600$21.92M
20×1/1283.3$95,400$7.95M66.7$104,600$6.97M
25×1/1283.3$96,400$8.03M66.7$103,600$6.91M
50×1/1283.3$98,400$8.20M66.7$101,600$6.77M
100×1/1283.3$99,400$8.28M66.7$100,600$6.71M

Then:

  1. Next hour, open interest falls by 10%. Every bucket, both sides, is multiplied by 0.9: the 5× long cluster at $80,400 becomes 225 BTC (≈ $18.1M).
  2. The hour after, the candle's low is $95,200. All long buckets at or above the $95,000–95,250 bucket are erased: the 20×, 25×, 50× and 100× longs from our hour ($95,400 and up) are gone; the 3×–10× longs remain. The shorts are untouched because the high did not reach $100,600.

Repeated over 4,344 hours, these three operations produce the daily map.

2.12 Parameters​

ParameterValue
SymbolsBTCUSDT, ETHUSDT, SOLUSDT, HYPEUSDT (USDⓈ-M perpetuals)
Time step1 hour
Entry pricetypical price (H+L+C)/3(H + L + C)/3
Side splittaker-buy share: longs min⁡(1,2b)\min(1, 2b), shorts min⁡(1,2(1−b))\min(1, 2(1-b)) of ΔOI\Delta OI
Leverage / weights3, 4, 5, 10, 20, 25, 50, 100× / 1, 1, 3, 3, 1, 1, 1, 1; leverages above the symbol's first-tier maximum dropped (HYPE: no 100×)
Maintenance marginBTC 0.4%, ETH 0.5%, SOL 0.5%, HYPE 1.0% (first tier)
Closingproportional on every fall of open interest
Liquidationlevels reached by the candle range, from the next hour
Window180 days + the last day (181 days of hourly data); shorter while a newly listed symbol warms up
Snapshotdaily, 00:00 UTC
Bucket≈ 0.25% of price, «nice» step; heatmap bins BTC $500, ETH $20, SOL $0.5, HYPE $0.25
Map range±50% of price
Quality gate≤ 3 missing candles and ≤ 24 hours without open interest per window

2.13 Limitations of the model​

  • Assumed leverage. A fixed leverage distribution is applied to every hour and every side; real leverage varies by trader, market regime and side.
  • Isolated-margin approximation. Cross-margin positions are liquidated based on the whole account, and large positions have higher maintenance-margin tiers; neither is modelled.
  • One entry price per hour. All of an hour's new positions enter at the typical price.
  • Proportional closing. In reality traders close selectively (for example, losing positions close more often); the model cannot know which positions were closed.
  • No positions older than the window (§2.7); early HYPE maps have an incomplete warm-up.
  • Weights calibrated on BTC. The leverage weights were fitted on BTC levels and are used unchanged for ETH, SOL and HYPE.
  • Binance only. The model uses open interest of one exchange and one contract per coin.
  • Daily snapshot. Positions opened or closed after 00:00 UTC are not reflected until the next day.

3. Hyperliquid — actual positions​

3.1 Why it is different​

On Hyperliquid every account's positions are public, including the liquidation price computed by the exchange. No model is needed: we collect the positions and put them into buckets with exactly the same code as the Binance model output (§1.1).

3.2 Collecting positions​

  1. Addresses. All holders with a position of at least $1,000 in the latest daily archive snapshot of the full exchange state (positions from $1,000 hold 99.7–99.9% of the volume), plus every address that traded at least $1,000 after that snapshot, from the stream of Hyperliquid trades (a new position can only appear through a trade). About 40,000 addresses per day.
  2. Positions. Each address is queried through the public Hyperliquid API (clearinghouseState): size and side, entry price, leverage, margin type and liquidation price. Positions without a liquidation price (fully collateralised) are counted but not mapped. The scan takes about 1.5 hours within the exchange's rate limits.
  3. Coverage. Found long size ÷ half of the exchange open interest (the exchange reports both sides summed), and the same for shorts. Normal coverage is above 99% (for example, BTC 99.7% / 99.7%, ETH 99.8% / 100.0% on 2026-10-20). Coverage is shown with the map.

Quality gate. A scan is not published if BTC or ETH coverage is below 99% on either side, if too many address requests failed, or if the address list did not come from the full snapshot. There is no silent fallback to a partial address list.

3.3 Interpreting Hyperliquid levels​

  • Partial liquidations. Hyperliquid liquidates large positions in parts, so a bucket's volume is an upper bound of the forced selling or buying at that price.
  • Cross margin. The liquidation price of a cross-margin position depends on the whole account and moves with it; for large accounts we have seen it move by 1–2.5% within six hours.
  • Whales. The 20 largest positions on each side hold about 44% of Hyperliquid volume (median by day, range 37–62%, July 2025 – October 2026). Their levels are real but idiosyncratic. The «without the 20 largest positions» toggle removes them (by size in coins, per coin and day); in our research the map without them describes Binance open-interest behaviour as well as the full map.
  • Past the price. Positions already past the current price (price moved during the scan) are counted in the summary, not drawn.

3.4 History and gaps​

Historical days are built directly from the daily archive snapshots of the full exchange state (so coverage does not apply; the price is the median notional ÷ size). The snapshot time varies: about 20:00 UTC of the date until 2025-10-24, about 00:00–00:10 UTC since mid-December 2025.

The source of the archive snapshots has no data for 2025-08-01 and 2025-10-25 … 2025-12-14 (52 days). These days are filled with reconstructed maps — an estimate, not an exchange snapshot, labelled «Estimate» on the charts (see §3.5). A reconstructed day never replaces a real snapshot.

3.5 Reconstructed days (estimate)​

For each day without an archive snapshot, the positions are rebuilt from the neighbouring archived snapshots:

  1. Sizes and entry prices are replayed exactly from the exchange's trades between the snapshots, including liquidations, so the reconstructed open interest equals the sum of real position sizes.
  2. Liquidation prices are estimated. They depend on each account's collateral, which is rebuilt from the snapshot plus realised profit and loss, fees, funding and the account's deposits, withdrawals and transfers. Positions in markets other than BTC, ETH, SOL and HYPE are held at their snapshot state. Accounts that did not exist at either snapshot get a typical margin level of newly opened positions.
  3. Each day uses the nearer snapshot: before it (replayed forward) or after it (replayed backward).

Accuracy. The method was checked on 51 days that do have real snapshots (2025-12-15 … 2026-02-04, the same length as the gap), comparing each reconstructed map with the real one:

  • the five largest clusters per side match within ±1% of price in 56% of cases, against 50% for simply using the previous day's real snapshot — reconstruction is about as close to the truth as the natural day-to-day change of the map;
  • accuracy falls with the distance to the nearer snapshot — 68% of clusters matched 1–3 days away, 46% at 22–26 days (the middle of the long gap is about 25 days from either side);
  • HYPE is the least accurate coin (41% of clusters matched), because large HYPE accounts use spot collateral and hedges that the replay does not see; HYPE reconstructed days carry a reduced-accuracy warning.

Treat reconstructed days as an estimate of the map's shape, not as an exchange record.


4. Binance model vs Hyperliquid positions​

Binance — modelHyperliquid — actual positions
Positionsreconstructed from open interest and candlesread from the exchange
Leveragefixed calibrated distributionactual, per position
Liquidation priceisolated-margin formula, first-tier mmrcomputed by the exchange (incl. cross margin)
Closing / ageingproportional closing, erasing by price, 180-day warm-upactual state at the snapshot
Quality measurecompleteness of the hourly datacoverage of exchange open interest
Main caveatit is a modelone venue; partial liquidations; whales

The two maps measure different markets and are not expected to match. Comparing them is informative: where both show a cluster, the evidence for forced flow there is stronger.


5. What the evidence says​

We tested the maps (ours and third-party ones) against Binance market data while building them (October 2026):

  • Acceleration, not attraction. When the price moves through a cluster of long liquidations, Binance open interest falls more than for the same move through an empty area — a weak but consistent effect (rank correlation about 0.1 in the strongest 20% of 5-minute moves). The map describes where forced closing can accelerate a move.
  • Clusters do not attract the price. Over a long history (530 days) the price touches the largest clusters no more often than random levels. Apparent «magnet» effects over half a year disappear on longer samples — a property of the period, not of the map.
  • Maps disagree. Third-party liquidation maps disagree with each other on longs (rank correlation between two models of the same provider: −0.05), and two widely used third-party maps correlate negatively with actual Hyperliquid positions for longs (−0.22 and −0.20). Treat any single map — including ours — as one estimate.
  • Weak link even for facts. Even the actual Hyperliquid map explains open-interest drops only weakly (correlation about 0.1): useful for comparing scenarios and placing levels, not for predicting individual moves.

The liquidation map is a descriptive tool, not a price target or a trading signal.