Quantitative Research·14 min read·Jul 2, 2026

Does Orderbook Imbalance Predict Crypto Returns? A 24-Asset Rank-IC Study

By Imbalance Labs Research

Every microstructure primer claims orderbook imbalance is “predictive.” Almost none of them show the number. So we measured it — properly, at scale, on the exact data we sell. Across 24 Hyperliquid assets, roughly 1.5 million one-minute snapshots each, we computed the rank correlation between top-of-book imbalance and the next move in the mid-price, at four horizons.

The short version: the signal is real, it is strongest on the most liquid instruments, and it decays fast — losing more than half its strength by the time you aggregate to 5-minute bars. That last point is the whole reason high-frequency depth data exists.

How We Measured It

We use the rank Information Coefficient (rank-IC) — the Spearman correlation between a signal and forward returns. It is the standard quant metric for “does this predict, monotonically, regardless of scale.” Our signal is the top-5 notional orderbook imbalance:

# Top-5 notional imbalance from L2 depth
bid_notional = sum(bid_px[i] * bid_sz[i] for i in range(5))
ask_notional = sum(ask_px[i] * ask_sz[i] for i in range(5))
obi5 = (bid_notional - ask_notional) / (bid_notional + ask_notional)

# Forward mid-return at horizon H bars
fwd = mid.shift(-H) / mid - 1

# rank-IC = Spearman correlation
rank_ic = spearman(obi5, fwd)

No lookahead, no survivorship tricks, no cherry-picked window — the full continuous history for every instrument. Because the data comes from a decentralized exchange, the depth is genuine committed capital, not the phantom spoofing that pollutes CEX books.

The Result: Rank-IC Across 24 Assets

Every value below is positive at the 1-minute horizon: higher imbalance, higher forward return, on every single asset. The signal is strongest on the deep, liquid majors and weakest on thin alts — an inversion that surprises most people, and one we unpack below.

AssetIC @ 1mIC @ 5mIC @ 15mIC @ 60m
BTC+0.1129+0.0508+0.0244+0.0105
ETH+0.0824+0.0359+0.0163+0.0012
SOL+0.0545+0.0251+0.0122+0.0047
XRP+0.0382+0.0168+0.0087+0.0019
DOGE+0.0359+0.0171+0.0106+0.0048
BNB+0.0266+0.0113+0.0061-0.0005
SUI+0.0260+0.0122+0.0062+0.0014
AVAX+0.0220+0.0103+0.0059+0.0001
LINK+0.0217+0.0108+0.0076+0.0047
TIA+0.0192+0.0126+0.0071+0.0005
NEAR+0.0174+0.0114+0.0087+0.0090
WIF+0.0172+0.0096+0.0054+0.0013
LTC+0.0164+0.0077+0.0050-0.0020
ARB+0.0140+0.0065+0.0017-0.0050
ETC+0.0132+0.0083+0.0084-0.0009
ADA+0.0126+0.0040+0.0006-0.0053
XLM+0.0108+0.0036-0.0013-0.0055
SEI+0.0096+0.0059+0.0037+0.0011
OP+0.0079+0.0037+0.0019-0.0001
APT+0.0079+0.0031+0.0018+0.0002
ATOM+0.0075+0.0044+0.0043+0.0013
INJ+0.0072+0.0040+0.0024+0.0022
DOT+0.0051+0.0029+0.0014-0.0013
FIL+0.0036+0.0030+0.0043+0.0043

Rank-IC (Spearman) of top-5 notional OBI vs forward mid-return. Hyperliquid L2 depth, ~1.5M 1-minute bars per asset. Positive = higher imbalance predicts higher forward return.

Why 1-Minute Data — the Decay Curve

Averaged across the eight most liquid instruments, the signal roughly halves at every step down in resolution. This is the single most important chart for anyone deciding what data to buy:

1 min
+0.0498
5 min
+0.0224
15 min
+0.0113
60 min
+0.0030

From +0.050 at one minute to +0.003 at one hour — a 94% collapse. By the time you aggregate to the 5-minute candles most vendors ship, you have already thrown away more than half the predictive content. The imbalance signal has a half-life measured in minutes, not hours. If your data is 5-minute or coarser, the alpha has already evaporated before it reaches your model.

The Signal Is Monotonic — BTC Deciles

A correlation number can hide a messy relationship. It does not here. Sorting every BTC bar into ten buckets by imbalance and averaging the next-minute return gives a clean, monotonic staircase — from −1.13 bps in the most ask-heavy decile to +1.12 bps in the most bid-heavy, a 2.25 bps top-to-bottom spread every single minute:

D1
-1.129 bps
D2
-0.584 bps
D3
-0.312 bps
D4
-0.099 bps
D5
-0.011 bps
D6
+0.095 bps
D7
+0.134 bps
D8
+0.266 bps
D9
+0.607 bps
D10
+1.118 bps

BTC: mean forward 1-minute mid-return by OBI decile. D1 = most ask-heavy, D10 = most bid-heavy. Monotonic across all ten buckets.

The Liquidity Inversion

Here is the counterintuitive part. The imbalance signal is strongest on BTC, ETH and SOL — the most liquid, most efficient books — and weakest on thin alts like FIL (+0.004) or DOT (+0.005). Most traders assume the opposite: that inefficiency lives in the small caps.

The mechanism is simple once you see it. On a deep book, a shift in top-of-book notional reflects real, informed flow that the market will chase — the depth is the information. On a thin book, the same imbalance is mostly noise: a single resting order distorts the ratio without carrying any directional intent. Deep liquidity doesn't dilute the microstructure signal — it sharpens it. It is a strong argument for prioritising the majors when you build depth-based features.

What This Is — and What It Isn't

We are data vendors, not signal sellers, so we will be blunt about the boundary. A rank-IC of +0.11 is a genuine, robust predictive structure — the kind of orthogonal, high-frequency edge that survives out-of-sample and stacks with other features. It is not, on its own, a turnkey money printer. At these horizons the raw signal sits inside the taker fee; harvesting it requires real execution — maker placement, queue position, adverse- selection control — which is exactly where a quant desk earns its keep.

That distinction is the point. We sell the clean, measured, high-resolution data in which this structure is visible and reproducible. The strategy on top is yours. Everything on this page you can verify yourself, on the free sample, in an afternoon.

Reproduce It on the Free Sample

The full study runs in a few lines of Pandas over our depth schema:

import pandas as pd, numpy as np

df = pd.read_parquet("btc_l2_depth_1m.parquet")

# top-5 notional imbalance
bid = sum(df[f"bid_price_level_{i}"] * df[f"bid_volume_level_{i}"] for i in range(1, 6))
ask = sum(df[f"ask_price_level_{i}"] * df[f"ask_volume_level_{i}"] for i in range(1, 6))
df["obi5"] = (bid - ask) / (bid + ask)

# forward mid-return, rank-IC at 1 / 5 / 15 / 60 minutes
mid = df["mid_price"]
for h in (1, 5, 15, 60):
    fwd = mid.shift(-h) / mid - 1
    ic = df["obi5"].corr(fwd, method="spearman")
    print(f"rank-IC @ {h:>2}m: {ic:+.4f}")

See the Signal in Your Own Notebook

Download the free 7-day sample — every instrument, 1-minute resolution — and reproduce this rank-IC study on real Hyperliquid depth before you commit to the full 12-month dataset.