Liquidity Stress Index: A Thermometer for Bitcoin's Market Plumbing
Most stress in Bitcoin markets is visible only after the fact: a wick on the chart, a wave of liquidation-tracker tweets, a funding rate that flipped negative overnight. By the time it’s obvious, it’s already history. What’s harder to get is a single, standing number that tells you right now, this hour, whether the market’s plumbing is calm or straining — without waiting for a headline to confirm it.
That’s what the Liquidity Stress Index (LSI), now live in the BGeometrics API, is for. It’s an hourly 0-100 composite built from three blocks — price, flow and leverage — and every input is normalised against its own trailing 90 days, so a reading of 40 means the same thing in a quiet month and a violent one. The idea takes its name and its three-block shape from Adler’s Crypto Insights’ Local Stress Index; the features, weights and scaling behind it are our own, built from what BGeometrics already collects.
How it is built
Eleven features across three blocks, all measured hour by hour, all fed only what was known at that hour — no look-ahead:
| Block | Feature | Source |
|---|---|---|
| Price | |1h log-return| | Hourly OHLC |
| Price | (high − low) / close | Hourly OHLC |
| Price | 24h realised volatility | Hourly OHLC |
| Price | Drawdown vs. 24h high | Hourly OHLC |
| Flow | Taker buy/sell imbalance | Binance taker volume |
| Flow | Taker volume (log) | Binance taker volume |
| Leverage | Liquidations, USD (log) | Binance forced liquidations |
| Leverage | |ΔOpen interest|, 1h and 24h | Binance open interest |
| Leverage | |Funding rate| | Binance perpetual funding |
| Leverage | Basis deviation from its 90d median | Binance annualised basis |
| Leverage | Δ Long/short ratio, 4h | Binance global long/short accounts |
Each feature gets a robust z-score: (value − rolling median) / (1.4826 × rolling MAD),
over the trailing 2,160 hours (90 days), always excluding the current hour. Only the tail of
that z-score counts as stress — max(0, z − 2), clipped at 8 — so a feature sitting near its
own normal range contributes nothing; only genuine outliers do. The three blocks are each the
mean of their available features, the three blocks are then averaged, and the result is squeezed
onto 0-100 with LSI = 100 × (1 − e^(−raw / c)), where c is calibrated so calm hours cluster
near the bottom of the scale rather than being spread thin across it.
Where we set the line wrong the first time
The first cut at the regime bands mirrored a convention already used elsewhere in the API: calm below 20, then elevated, stress, and extreme starting at 75. It seemed like a reasonable, round number.
Running it against six years of hourly history said otherwise: the index has never gone above about 68. Every historical stress event we checked it against — the May 2021 deleveraging, the June 2022 Celsius/3AC unwind, the November 2022 FTX collapse, August 2024’s carry-trade unwind, October 2025’s liquidation cascade — topped out in the 45-65 range. An “extreme” band starting at 75 was a label that could never fire. We recalibrated the bounds against the data instead of against convention: calm below 20, elevated 20-40, stress 40-60, extreme from 60. The band exists now; using it will still be rare, by construction — that’s the point of a 90-day tail score.
Where we are now
Calibrated on 2020-09 to 2026-09 (52,166 hourly observations):
c = 3.82— median LSI 0.09, p95 ≈ 20, p99 ≈ 35.7- Regime split: calm 95.0% of hours · elevated 4.4% · stress 0.6% · extreme 0.02%
And the index does find the events it’s meant to find — daily peaks on five known stress days:
| Event | Peak LSI | Regime | Driver |
|---|---|---|---|
| 2021-05-19 (deleveraging) | 60.9 | stress | price |
| 2022-06-13 (Celsius/3AC) | 44.6 | elevated | price |
| 2022-11-09 (FTX collapse) | 52.5 | stress | price |
| 2024-08-05 (carry unwind) | 64.3 | stress | price |
| 2025-10-10 (liquidation cascade) | 52.9 | stress | leverage |
One honest pattern in that table: driver reads price on almost every historical event, and
leverage only on the most recent one. That’s not the price block dominating by design — it’s
that our liquidations feed only starts in March 2026 and the basis feed in mid-2025, so most of
the historical series runs on 9 of the 11 features rather than all 11. October 2025 is the first
event in the table computed with the full feature set, and it’s also the only one the leverage
block, not price, flags as the dominant force. The API exposes nFeatures on every row precisely
so you can see which reading that is.
Limitations
It only uses data available in real time. Order-book depth and trade-size cohorts carry genuinely useful signal but arrive roughly a day late from their source, which would make a published hourly value silently change after the fact. We left both out of this version rather than ship a number that isn’t final when you read it.
A 90-day window means it takes time to relearn a new regime. If leverage stays elevated for months, the index gradually recalibrates to that as the new normal — a slow, sustained regime shift will understate itself relative to a sharp one-hour spike of the same absolute size.
It’s a thermometer, not a signal. A high reading says the market’s plumbing is under strain right now; it does not say which direction that resolves in. Treat it as context for other tools, not as an entry or exit trigger on its own.
Using it
GET https://bitcoin-data.com/v1/liquidity-stress-index-1h
GET https://bitcoin-data.com/v1/liquidity-stress-index-1h/last
GET https://bitcoin-data.com/v1/liquidity-stress-index (daily max/mean summary)
A single hourly row:
{
"d": "2026-09-14 10:00:00",
"unixTs": 1789379200,
"lsi": 4.2,
"priceSub": 7.1,
"flowSub": 0.0,
"leverageSub": 5.4,
"regime": "calm",
"driver": "leverage",
"nFeatures": 11
}
Full schema in the API documentation, and the series is also chartable at charts.bgeometrics.com/liquidity_stress_index.html, with the regime bands drawn directly on the chart.
Disclaimer: This article is informational analysis and does not constitute financial advice. Do your own research (DYOR). Investing in Bitcoin carries the risk of total loss.