tickdistill-learn

What Is Trade Imbalance in Order Flow, and Why Measure It in Sigma?

By TickDistill — order-flow microstructure signals. Educational content, not financial advice.

The short answer

Trade imbalance is the net directional pressure of aggressive market orders over a fixed time window, expressed as the fraction of volume that was buy-initiated versus sell-initiated. The public formula is TI = (buy_volume − sell_volume) / total_volume, giving a value in [−1, +1]. A raw percentage is misleading because the same imbalance ratio carries no consistent meaning across markets or regimes — measuring it in sigma (standard deviations from the recent norm) converts a magnitude into a rarity reading, which is the unit that actually matters.

What does trade imbalance measure?

Trade imbalance is the signed ratio of taker buy volume to taker sell volume within a measurement window. It is a standard, textbook trade-only construct — the signed-ratio form of trade/volume imbalance:

TI = (B − S) / (B + S)

where B is the total notional (or contract count) of buy-aggressor trades and S is the total notional of sell-aggressor trades in the window. TI = +1 means every executed trade was a buy market order; TI = −1 means every trade was a sell market order; TI = 0 means the window was perfectly balanced.

The key input is the aggressor side: who crossed the spread. On Binance aggTrades, isBuyerMaker = false means a buy-taker hit the ask (aggressor = buyer). On Bybit and OKX, the side field directly identifies the taker. Without this flag, TI is not computable from raw OHLCV candles alone.

Why raw percentage is misleading

A raw TI of 65% buy is not informative on its own. Two problems arise:

Problem Why it breaks raw TI
Cross-market incomparability A market with structural buy bias (e.g. a perpetual in a bull funding regime) may average 65% buy in calm sessions. A balanced market may average 50%. The same 65% reading signals very different things in each case.
Cross-regime incomparability A 65% reading during a low-volume overnight session is a different event than a 65% reading during a high-volume breakout. The denominator changes; the ratio does not capture how unusual the event is.

Trade imbalance is informative only when it is genuinely large relative to baseline. The word “relative” is load-bearing: a fixed percentage cutoff cannot be “large” in a consistent sense across instruments or time. This is why the long-memory of order-flow signs — institutional metaorders split into same-side child orders, documented by Lillo, Mike, and Farmer (2005) — shows up as a high-sigma imbalance rather than a fixed-threshold one.

Why sigma is the right unit

Sigma-normalization converts TI from a magnitude into a rarity score. The z-score of trade imbalance is:

TI_z = (TI − μ_TI) / σ_TI

where μ_TI and σ_TI are the rolling mean and standard deviation of TI computed causally — using only observations that occurred strictly before the current measurement moment. This is the point-in-time constraint described in Sigma-Normalization: Why Order-Flow Signals Should Be Measured in Standard Deviations, Not Raw Numbers.

A TI_z of +2.5 means the current buy/sell ratio is 2.5 standard deviations above what this market has historically produced in similar windows. That statement is meaningful on BTC, ETH, and SOL using identical code — the per-market baseline absorbs the structural differences. An 80/20 buy/sell split may be 1.0σ on one market and 3.0σ on another. Sigma tells you which case you are in.

The long-memory of order-flow signs documented by Lillo, Mike, and Farmer (2005) in Physical Review E — where aggressive order signs are strongly auto-correlated over long horizons because institutional metaorders are split into child orders of the same side — is precisely why a rarity-framed TI is meaningful: a high-sigma imbalance is the signature of a metaorder in progress, not random noise.

What counts as “buy” and “sell”: the aggressor rule

Exchange Field Aggressor = buy if
Binance aggTrades isBuyerMaker false (taker lifted the ask)
Bybit publicTrade S (side of taker) Buy
OKX trades channel side (side of taker) buy

All three venues expose the taker side directly or derivably. Candle-based OHLCV data does not contain this information — TI requires a trade feed with aggressor identification. For an overview of why the aggressor side matters, see What Is Order-Flow Microstructure?.

Trade imbalance vs CVD: what is the difference?

Trade imbalance and cumulative volume delta (CVD) are related but measure different things.

Property Trade Imbalance (TI) CVD
Output range [−1, +1] (ratio, dimensionless) Unbounded (running sum in contracts or notional)
Window Fixed rolling window Path-dependent running total
Normalization Divides by total volume, so two sessions with different total size but the same buy/sell split produce the same TI Accumulates net volume, so a high-volume session produces larger CVD swings
Rarity framing Natural (z-score the ratio directly) Requires its own baseline for the running level

TI is the appropriate input when you want a window-bounded, volume-normalized rarity reading. CVD is more useful for tracking the cumulative directional commitment over a longer path. For a full treatment of CVD, see What Is Cumulative Volume Delta (CVD)?.

How trade imbalance is used as a shared primitive

TI is not only a standalone signal — it is a primitive that appears inside more complex computations. Two examples:

Directional coherence in conviction-zone detection. When TickDistill’s density-separated-big-orders signal asks whether a cluster of large, separated prints is directionally consistent, it computes the buy/sell ratio r = (B − S) / (B + S) over the separated prints in the window and then z-scores that ratio against its own causal baseline. The sigma reading of that ratio — not the raw percentage — is the threshold condition. For background on how separated prints differ from aggregated sweeps, see Big Orders: Aggregated vs. Separated.

Cross-venue divergence. The cross-venue flow signal computes TI independently on each exchange (Binance, Bybit, OKX) over the same time bucket and then measures the divergence D_f = TI_fast − TI_reference. That divergence is then sigma-normalized against its own causal baseline to produce a rarity reading of cross-venue flow misalignment. Here TI serves as the per-venue input; the signal lives in the relationship between venues, not in any single TI reading.

In both cases, the pattern is the same: compute TI using the public formula, then express the result (or a derived quantity) in sigma units using a point-in-time rolling baseline. The public formula is textbook; the calibration of the baseline and the threshold for what counts as “rare” are proprietary.

Why point-in-time causality is non-negotiable

A TI z-score is only honest if the baseline μ and σ are computed from data that was available at the moment of the reading. If any future data enters the baseline — even accidentally — the backtest signal looks sharper than it is in live trading.

TickDistill computes every baseline causally: rolling statistics use only past observations, and mechanical windows such as perpetual funding settlements (commonly at 00:00/08:00/16:00 UTC, though cycles vary by contract and venue) are excluded from the baseline to prevent structural volume spikes from distorting the distribution. The result is a backtest and live signal that use the same yardstick, so the live behavior matches what the backtest showed.

FAQ

Q: Can I compute trade imbalance from candle data (OHLCV)? No. OHLCV candles record price and total volume but not which side of the trade was the aggressor. TI requires a trade feed — such as Binance aggTrades, Bybit publicTrade, or OKX trades — that identifies whether each execution was a buy-taker or sell-taker lift.

Q: What does a TI_z of +2 mean in practice? It means the current buy/sell volume ratio in the measurement window sits approximately 2 standard deviations above its recent baseline for this market. Under a normal distribution, roughly 2.3% of observations (2.28%) exceed +2σ in one tail. The exact rarity depends on the empirical distribution of TI for the specific instrument, which is why TickDistill uses a per-market causal baseline rather than a universal table.

Q: Is a high TI a buy signal? No. TI_z is a measurement of the current state of aggressive order flow — it tells you that buyers (or sellers) are unusually dominant in the window. It does not forecast whether that pressure will persist, reverse, or move price. TickDistill sells measured state (an input to your own analysis), not directional forecasts.

Q: Why normalize by total volume rather than use the raw buy-minus-sell delta? Dividing by total volume (B + S) produces a ratio in [−1, +1] that is independent of session size. A high-volume session and a low-volume session with the same directional skew produce the same TI. The unnormalized delta (B − S) conflates magnitude with direction and requires a separate volume baseline to interpret — TI’s ratio form builds that normalization in.

Q: How does TI differ from OFI (order-flow imbalance)? OFI, defined by Cont, Kukanov, and Stoikov (2014), measures net aggressive pressure at the best bid and ask from limit-order-book changes — it requires Level 2 data. TI uses only executed trades and is computable from a public trade feed. For trade-only stacks, TI is the correct primitive; OFI requires a live order-book feed and is a distinct (more granular) signal.


TickDistill sells clean, computed order-flow inputs — not trading advice or guaranteed alpha. Backtests are illustrative and not a promise of future results.