Skip to main content

DOM z-score

Two order book indicators: 1% price bands coloured by how unusual the resting size in them is compared with the history of the same level. A map of the book, not an entry signal — tested on ten months of history.

What it is​

DOM z-score looks for places in the order book where there are unusually many limit orders (a wall) or unusually few (a void). The indicator was written by SpreadFighter subscriber Roman (mrzafod) and sent as a ready merge request. Thank you, Roman, for the contribution.

This is a z-score of resting size in the order book. Do not confuse it with the Z-Score indicator, which measures how far price is from its moving average.

The data is the same as in the Depth of market indicator: cumulative order size on each bar in bands from 1 to 10% from price, separately for bids and asks.

How it is calculated​

  1. Price is sliced into bands, 1% of price by default.
  2. For each band, the current resting size in it is taken.
  3. This size is compared with what used to rest at the same price level. The history is collected back up to 200 bars, starting 20 bars before the current one. Collection stops earlier if in the past this level was on the other side of price.
  4. By default each sample is divided by the whole book on its bar. This way a general growth of the book or a price rally does not colour all bands at once.
  5. The deviation is a robust z-score on the median and MAD (median absolute deviation): it reacts less to rare outliers in the level's history.
  6. Full colour is reached at a 5σ deviation. Bands with a deviation up to 2σ are not drawn. A band appears only once it has collected 50 samples.

What it looks like​

There are two indicators, and they calculate the same way:

  • DOM zscore highlighter is drawn over price. Each price band around the current price, up to ±8% by default, is coloured on every bar.
  • DOM zscore is drawn in a separate pane. Asks are stacked in rows upward from the zero line, bids downward, one row per band, up to ±10% from price. Row height carries no data; only the colour carries the value.
ColourWhat it means
Green below priceBid wall: more buy orders than usual
Amber above priceAsk wall: more sell orders than usual
Lime and redThe strongest bid and ask walls, at full colour
VioletVoid: fewer orders than usual
No colourDeviation within the dead zone or too few samples

The DOM zscore pane has three more elements:

  • Ask level and Bid level. Bands from price out to the selected one (the fifth by default) are drawn three times taller than the rest, and the selected band itself gets a dotted line.
  • Ask/Bid imbalance — the imbalance line: ask size from price to Ask level against bid size from price to Bid level, from −1 to +1. It is amber when asks outweigh, green when bids do. The scale is non-linear: a small skew is stretched so it can be seen.
  • Imbalance momentum — a dotted line: how much the imbalance has changed over the last 200 bars.

Settings​

InputDefaultWhat it sets
SymbolemptyWhose order book to measure. Empty — the chart's symbol
Bucket size (% of price)1Band height in % of price, from 0.2 to 4.2
Depth (% away from price)8 in the highlighter, 10 in the paneHow far from price to draw bands on each side, no more than 10
Ask level, Bid level5Pane only: which band from price to highlight
Window length (bars)200The maximum number of bars to take into the level's history
Normalize byShare of bookShare of book — share of the whole book on the bar. Raw coins and Raw USD — size in coins or dollars without division
Deviation measureRobust z (median/MAD)Robust z, plain Z-score (window) or Percentile rank. Percentile rank does not use Sensitivity and Dead zone
Sensitivity (σ at full color)5The deviation at which colour is full
Dead zone (σ)2Deviations up to this value are not drawn
Minimum samples50How many samples a band needs before it appears
Baseline gap (bars)20How many recent bars to skip so a fresh wall does not end up in its own history
Momentum lookback (bars)200Pane only: over how many bars to measure the change in imbalance

Where to find it​

Find it: Indicators → search "DOM zscore". In the list the indicators are called [SFM] DOM zscore highlighter and [SFM] DOM zscore, on the chart — [SF] DOM Z-score and [SF] DOM Vol Z-Score. The indicators are available on all plans.

Test on history​

We tested whether walls hold price. The period is 30 November 2025 — 22 September 2026, 8 Binance USDT-M perpetual futures, 1h and 15m timeframes, default settings. The indicator was rewritten in Python and matched against the code in the app: zero mismatches across 215,063 coloured cells. Hypotheses were written down before the calculation; each wall was compared with a neutral band of the same coin at the same distance from price.

Key results:

  • A wall does not hold price. For bands within 3% of price, a wall gets broken within 12 hours no less often than a neutral band, but more often: for bids 23.8% vs 20.6%, for asks 22.6% vs 16.1%. Once you account for how close price has come to the level and its momentum, the difference disappears.
  • A wall lights up when price approaches the level. The band's history is collected while price was further away from it, and further from price the book is thinner. Of the bands that price approached by 1.5 pp or more, 84% are painted as walls; of those it moved away from, 1.4%.
  • Bands right next to price are often empty. On 1h a band within 1% of price collects 50 samples only 22.6% of the time.
  • Trading from walls does not make money. Limit entry at the edge of the nearest wall, stop beyond the band, take profit at 2R, fee 0.04% on entry and exit: on 1h −0.074R per trade on average, no better than the same rules from neutral bands.
  • The link with the liquidation map was not confirmed. A Liquidation Map liquidation zone with a wall is broken just as often as one without. None of the 14 checks written down in advance passed.

The report proposes a fix for a second version: compare a band not with the history of the same price level but with the history of bands at the same distance from price. It lowers the share of walls among approached bands from 84% to 11.5% and colours almost all bands near price. The app currently runs the first version.

The report names three candidates for a forward test. Two relate to the second version: a bid wall is broken slightly less often than a neutral band, and a void above price more often. The third is the imbalance line in the DOM zscore pane: when asks outweigh, returns that follow are slightly lower on average. These effects did not pass the strict threshold written down in advance, so they are candidates, not signals.

The full report with tables and charts is on the backtests page in the app.

How to use it​

As a map of the book: where liquidity is thicker than usual and where it is thinner. In the current version a wall often just means "price has come to the level", so it should not be taken as an entry signal.

note

A band with no colour right next to price does not mean the book there is ordinary. Most often it has not collected 50 samples yet.