# How to read a liquidity heatmap, wall by wall

> Walls, pulling, stacking, icebergs: what the order book heatmap paints, how it pairs with the footprint, and the three situations to learn first.

Published October 14, 2026 · By the fillprint desk

A liquidity heatmap is the order book drawn over time. Every resting limit order is painted at its price, the colour gets hotter as the size gets bigger, and the price line runs through it. You read it by watching what happens when price reaches the bright bands: the size holds, it disappears before contact, or price eats through it. Each of those three outcomes says something different about the next move.

## What a liquidity heatmap paints

A liquidity heatmap shows where limit orders were waiting, at every price, at every moment. Time runs left to right, price runs bottom to top, and each cell is coloured by how many contracts were resting there. Cold colours mean a thin book, hot colours mean size. Most heatmaps also print trades as bubbles on the price line, so you see the aggressive volume hitting the book.

A DOM shows you the book right now. A heatmap keeps the history. A level that has held 500 contracts for twenty minutes draws a long bright line. A level that flashed for three seconds draws a short dash. That history is the whole point: you see whether liquidity is patient or nervous.

## Walls, pulling, stacking and refreshing

The heatmap shows four behaviours of resting liquidity, and each has a name traders use.

### Walls

A wall is an unusually large resting size at one price, much bigger than the levels around it. It shows as a bright horizontal line ahead of price. A wall is a place where someone is willing to trade size, not a guarantee that price will stop.

### Pulling

Pulling is liquidity removed before price arrives. The line is bright while price is far away, then it fades or vanishes as price gets within a few ticks. The size was never there to be filled at that price, or the trader changed their mind. Either way, the level offers no support.

### Stacking

Stacking is size added at a price, or at several prices in a row, as price approaches. The band gets brighter instead of dimmer. It shows growing willingness to defend a zone, and it can lean in the direction of the stack.

### Refreshing and iceberg orders

A refreshing level keeps roughly the same visible size while trades go through it. Two hundred contracts trade at the bid, and the bid still shows a hundred. That is the signature of an iceberg: an order that shows only a fraction of its total size and refills after each fill. On the heatmap it looks modest. On the tape it absorbs far more than it displays.

> **Size on the screen is intent, not a promise**
> Resting orders can be cancelled at any time and cost nothing until they trade. Spoofing, placing orders you do not intend to fill to move other traders, is prohibited under CME rules and US law, and it still happens. You cannot read intent from a screen. Treat any wall as a hypothesis until trades confirm it.

## How the heatmap complements the footprint

The heatmap shows passive intent, the footprint shows what traded. The heatmap paints limit orders waiting to be hit. The [footprint](https://fillprint.io/en/journal/reading-a-footprint-chart) prints market orders that actually hit them, split between bid and ask. One is the wall, the other is the traffic crashing into it.

Read alone, each one misleads. A wall without trades is just a promise. Heavy selling at the bid without a heatmap leaves the question open: did price hold because buyers were passive and large, or because sellers simply stopped? Together they answer it. You see the size waiting, then you see how much was thrown at it and whether it moved.

## Three situations to learn first

Almost every heatmap read comes down to one of three outcomes when price meets a wall: it holds, it is pulled, or price goes through it.

### A wall that holds

Price reaches the wall, the footprint shows heavy volume traded into it, and price does not progress. The wall stays bright, or refreshes. That is absorption: passive size taking everything the aggressors send. It often marks the end of a push, but only once price leaves the level. The difference with a move that simply runs out of buyers is covered in [absorption vs exhaustion](https://fillprint.io/en/journal/absorption-vs-exhaustion).

### A wall that is pulled

Price approaches, the wall fades before contact, and price trades through the empty level with little volume. Nobody was defending it. Pulling under price is a warning for longs: the support you saw on the screen was not there, and the move tends to continue.

### Price through a wall

Price reaches a real wall, trades a lot of volume at it, and the wall gets consumed. Aggressors took the whole size. That is breakout fuel: the passive side that was capping price has been filled, and traders who sold at the wall now sit on a losing position. The old wall level often flips and acts as support on the retest.

### A worked example on NQ

Take a hypothetical NQ session. Price trades at 18,504 and the heatmap shows a bright bid of about 600 contracts at 18,500, with the levels around it near 40. Price drops into it. Over two minutes the footprint prints roughly 900 contracts sold at the bid at 18,500, yet the heatmap still shows 400 to 600 there and price never trades 18,499.75. More size traded than the wall displayed, and it held: absorption, with a likely refreshing order behind it.

You buy at 18,501 with a stop at 18,497, below the level. That is 4 points, or 16 ticks: 80 dollars per NQ contract (16 × 5 dollars), 8 dollars per MNQ. On a hypothetical 50K account with a 2,000 dollar drawdown, risking 160 dollars means 2 NQ or 20 MNQ. If the bid at 18,500 fades while price sits on it, the read is gone: you get out before the stop, not at it. Nothing here guarantees the level holds. It only defines where you are wrong.

## What you see, what it can mean, what confirms it

No heatmap pattern means anything on its own: each needs a confirmation from the trades.

| What you see | What it can mean | What confirms it |
|---|---|---|
| Bright wall ahead of price | Real interest at that price, or bait | Price reaches it and the size stays |
| Wall fades as price approaches | Pulling: no real support or resistance | Price trades through the level on light volume |
| Visible size steady while trades hit it | Refreshing order, likely an iceberg | Traded volume at the level well above the displayed size |
| Size added as price approaches | Stacking: a zone being defended | Price stalls and the footprint shows absorption |
| Wall consumed by heavy volume | Aggressors filled the passive side | Price holds beyond the level on the retest |
| Big orders appearing and vanishing fast | Noise, or possible spoofing | Nothing: ignore them until they stay |

## Why per-order data changes the read

Per-order data lets you tell one large order from many small ones, and a real wall from a refreshing order. Most feeds send aggregated depth: one total per price level. A level showing 500 could be one order of 500 or fifty orders of 10. If 300 trade and the level still shows 500, aggregated depth cannot tell you whether new orders arrived or the same order refilled.

Market by order (MBO) data, which CME publishes, sends every order individually: when it is added, modified, cancelled or filled, and its place in the queue. With it, a platform can follow a single order through time. That is how [DeepDom](https://my.deepcharts.com/redirect/deepdom?affId=OFF&utm_source=fillprint&utm_medium=affiliate) (code OFF) separates a wall that is one patient order from an order that keeps reloading the same size, and flags icebergs on price. The heatmap looks similar either way. The information behind it is not.

## Settings that make a heatmap readable

A heatmap is only as good as its settings: most of the work is removing noise so the levels that matter stand out.

- **Zoom**: compress time to see which levels lasted the whole session, expand it to watch how a level reacts on contact. Keep enough price range on screen to see the next wall above and below.
- **Contrast**: if the colour scale follows the largest size on screen, one huge order washes everything else out. Lower the intensity, or use fixed size thresholds, until normal levels look cool and real walls look hot.
- **Filter small size**: hide orders below a size threshold that fits the instrument. On NQ a few contracts at a level mean nothing; on MNQ the useful threshold is different again.
- **Focus near price**: liquidity far from price gets moved and pulled constantly. The levels within a few points of the market are the ones that will be tested soon, and the ones worth your attention.

Options positioning gives a second map of where price may stick or run, built from hedging flows rather than the book: see [GEX for futures traders](https://fillprint.io/en/journal/gex-for-futures-traders). In [DeepCharts](https://my.deepcharts.com/redirect/deepchart?affId=OFF&utm_source=fillprint&utm_medium=affiliate) (code OFF), the heatmap, the Iceberg Detector and stop-run detection come with [DeepDom](https://my.deepcharts.com/redirect/deepdom?affId=OFF&utm_source=fillprint&utm_medium=affiliate) (code OFF), a separate licence that reads the CME MBO book: plans and data costs are on [our page about the platform](https://fillprint.io/en/deepcharts). Before you use it on an evaluation, check that your firm supports the platform and its data feed: see [which prop firms accept it](https://fillprint.io/en/journal/prop-firms-that-accept-deepcharts).

[Firms that run DeepCharts](https://fillprint.io/en/prop-firms?f=deepcharts)

> **[DeepCharts](https://my.deepcharts.com/redirect/deepchart?affId=OFF&utm_source=fillprint&utm_medium=affiliate) · code OFF** — Sign up through our partner link and the OFF discount is applied automatically. If a code is asked for at checkout, type OFF. [Get DeepCharts](https://my.deepcharts.com/redirect/deepchart?affId=OFF&utm_source=fillprint&utm_medium=affiliate)

## Terms used in this article
- [Iceberg order](https://fillprint.io/en/glossary/iceberg-order)
- [DOM](https://fillprint.io/en/glossary/dom)
- [Liquidity heatmap](https://fillprint.io/en/glossary/liquidity-heatmap)
- [Data feed](https://fillprint.io/en/glossary/data-feed)

---

Futures trading involves substantial risk of loss and is not suitable for every investor. fillprint is an independent publication, not a broker or a prop firm.

Some links are affiliate links: if you sign up through them, the firm or DeepCharts pays us a commission, at no extra cost to you, and often with a discount for you. Affiliate links are marked and carry rel="sponsored". Being an affiliate never moves a firm up the board. Firms without a program stay listed, marked “no affiliation”.

HTML: https://fillprint.io/en/journal/reading-the-liquidity-heatmap · Prop firm data: fundedyield.com · © fillprint
