Appearance

Personalize your experience

Mode
Accent Color
Direction
Liquidity Heatmap

Liquidity Heatmap

Charts / Chart Types / Volume Charts

Resting order-book size at every price over time, drawn on the GPU, with executed trades as bubbles.

What the chart shows

A candle chart shows where happened. It does not show the limit orders that were waiting in the book, which is where the market had to go through or turn back. The liquidity heatmap records the order book many times per second and paints the size resting at each price as colour: dark for little size, bright for a lot. Over time, each order becomes a , and you can see when it was placed, how long it stayed and whether it was traded through or .

Price is drawn on top as a line or candles, with the best bid and best ask as trails and as bubbles sized by volume. This style is known from tools such as Bookmap.

Menu
Chart type → → Liquidity heatmap
Engine type
liquidity-heatmap
Data
order-book snapshots (depth) and, ideally, with aggressor side
Renderer
WebGL2 heat texture with palette and bloom; Canvas 2D fallback without bloom; Canvas 2D overlays
History
Only what was recorded while the depth feed ran in this
Good for
Seeing support and resistance from resting orders, spoofing, absorption, intraday

Anatomy of the chart

Anatomy of the liquidity heatmap1.2KRecording since 10:41 · 2,140 snapshots · trades from tapebefore recording: emptylarge resting ask (wall)order pulled: heat stopsbest ask trailtrade bubble + buy ringprice linebest bid trailbid wallcurrent book profilestatus line
Every part of the liquidity heatmap. Bright bands are large resting orders; the left edge is empty because recording had not started.
PartWhat it isHow to read it
Heat Resting size at one price for one time column.Brighter = more size waiting. Dark = thin book; price moves through it easily.
A row of bright over time: one or more orders that stayed in the book.Where the starts, the order was placed; where it ends, it was or .
Empty areaTime before recording started, or prices outside the received depth.Not "no liquidity": no . Check the status line.
or candlesLast price over the heatmap.Watch how price reacts when it reaches a .
Best bid / ask trailsThe best bid (lower) and best ask (upper) over time.The gap is the spread. A that jumps away from price shows liquidity being .
Trade bubble merged per time bucket and price. Area grows with size.Big bubbles at a show the band being hit. Fill colour shows the dominant side.
Buy share ringArc around a bubble (bubble style only).A full ring = all buying; a quarter ring = 25% buying.
Current book profileThe latest snapshot as bars at the edge.Shows the book as it is now, in the same as the heatmap.
order labelDashed line and size on the largest levels (up to 8) that are at least N × the level.The levels that matter most in the current book.
Status lineRecording start, snapshot count and the trade source (tape or inferred).Tells you how much history the is based on.

How the heatmap is built, step by step

From order-book snapshots to heat columnssnapshot 1snapshot 2snapshot 3→heat columns (time →)wall pulledin column 31. Each snapshot is binned into price rows on a fixed grid.2. One column per "Column width" seconds keeps the latest size per row.3. Sizes become intensity, then colour through the palette (on the GPU).
Three order-book snapshots become three heat columns. The bright ask in snapshot 1 and 2 is gone in snapshot 3: it was pulled or filled.
  1. 1
    Receive snapshots
    The terminal sends every order-book update to the chart with chart.setOrderbookSnapshot(), stamped in chart time so line up with candles.
  2. 2
    Bin into price rows
    Each level is placed in a price row on a grid. The row size is the book , detected from the first snapshot, so do not shift when the view moves.
  3. 3
    Bin into time columns
    Snapshots are grouped into of Column seconds. Within a column the latest snapshot wins, because resting size is a state, not a . older than Keep history are dropped.
  4. 4
    Fit the visible window
    For the visible time and , and are packed into a texture: one texel per column and row, merged when there are more than the screen can show. Merging keeps the largest size, so a wall stays visible when you . Red holds bid intensity, green holds ask intensity.
  5. 5
    Normalise
    The reference size is the Saturation percentile of the visible non-zero sizes. Each size is divided by it and clipped at 1, so a single huge order does not darken everything else.
  6. 6
    Colour on the GPU
    A fragment shader applies Gamma, removes values below Hide below, and looks up the colour in a 256-entry palette texture. A bloom pass then spreads light from bright by Bloom glow. Changing these settings does not re-upload any .
  7. 7
    Draw the overlays
    Price, best bid / ask trails, trade bubbles, the current book profile, -order labels and the status line are drawn on top in Canvas 2D.

Intensity, gamma and palettes

Size → intensity → coloursize ÷ percentile reference (clipped at 1)intensityhidden below cut-offgamma 0.6gamma 1gamma 1.6gamma 2.5Bookmap palette01Saturation percentile sets what countsas "full": 98.5 = the top 1.5% ofvisible sizes are white.Contrast, gamma, cut-off and palette are applied on the GPU without re-uploading data.
How a resting size becomes a colour. Gamma above 1 darkens small sizes so large orders stand out.
SettingLower valueHigher value
Saturation percentileMore of the map is bright; in orders is lostOnly the largest orders reach full colour; the rest is darker
Gamma orders become visible (busy )Only orders remain bright (clean )
Hide belowThin liquidity is drawnThin liquidity is removed completely
Bloom glowCrisp orders glow into their neighbours
  • Heat (both ) colours and asks with one palette. The best bid / ask trails tell the apart.
  • Bid / ask hues uses the bid and ask colours, so the side of each is obvious.
  • only or only hides one side, for example to study only the support below price.

Reading the chart, step by step

  1. 1
    Check the status line
    how long depth has been recorded and whether come from the tape or are inferred. A heatmap recorded for two minutes says little about older levels.
  2. 2
    Find the bright bands near price
    These are the resting orders price must deal with next. The current book profile at the edge shows their size now.
  3. 3
    Watch price arrive at a band
    If bubbles appear and the stays, the order is being and is holding price. If the band disappears before price reaches it, the order was .
  4. 4
    Look for absorption
    Many sell bubbles at a bid , with the band staying bright and price not falling, means a buyer is absorbing the selling.
  5. 5
    Follow the book
    Bands that move with price (stepping down in a decline) show liquidity providers repositioning. The direction of the shift often leads price.
  6. 6
    Confirm with trades
    A break through a with bubbles and a full buy ring (or empty for selling) is a genuine break; a break on small bubbles after the band was is weaker.
Patterns to look forWall holdsprice stalls under abright band; trades hit itPulled (spoof)band vanishes as priceapproaches; no tradesAbsorptionmany sell bubbles, bidrefills, price holdsLiquidity shiftsbands step down withprice: sellers in control
Four common patterns.

Setting it up, step by step

  1. 1
    Choose a market with live depth
    The broker must stream order-book depth for the symbol. Delta Exchange also streams with aggressor side; other brokers infer trades from volume.
  2. 2
    Select the chart type
    Chart type menu → → Liquidity heatmap. Recording starts now; history in from the .
  3. 3
    Use a short timeframe
    Candles of 1 minute or less line up with the heat . The heatmap is drawn on the chart's time .
  4. 4
    Open the settings
    Click the gear to the left of the name. Try the presets first: Bookmap, Bid / ask split, Thermal, Deep ocean, Clean, orders only.
  5. 5
    Tune the contrast
    If the map is mostly dark, lower the saturation percentile or gamma. If it is a blur, raise gamma and Hide below.
  6. 6
    Tune the trades
    Raise Hide below to keep only meaningful ; raise Merge within if bubbles overlap.
  7. 7
    Keep the chart open
    Depth is recorded only while this chart is open with a depth-based chart type. Switching symbol clears it. Changing Column also clears it.

Feeding the chart from code

typescript
// Every depth update: [price, size] pairs, best first
chart.setOrderbookSnapshot(
  { bids: [[24510.0, 120], [24509.5, 340]], asks: [[24510.5, 90], [24511.0, 410]] },
  { time: chartTimeSeconds },
);

// Real trades with aggressor side (turns off inference from ticks)
chart.addTrades([{ time: chartTimeSeconds, price: 24510.5, size: 25, side: 'buy' }]);

// On symbol change
chart.clearMarketDepth();

// For a status UI
const { snapshots, firstTime, trades, realTrades } = chart.getMarketDepthInfo();

Common setups

Scalping futures

Bookmap preset, column 0.5 s, history 30 min, merged within 0.5 s, -order labels at 5×.

Crypto perpetuals

Bid / ask split preset, candles as price, minimum trade size set to retail .

Level hunting

orders only preset: high cut-off and contrast, sharp , labels on. Shows only the walls.

Limitations

!
Caution:The heatmap only shows depth recorded in this . There is no stored depth history: scrolling back before the recording start shows an empty area, and reloading the page starts again.
  • Depth is limited to the levels the broker sends (often 5 to 20 per side). Prices beyond them are empty, not thin.
  • Visible orders are not all orders: icebergs show only their visible part, and some venues hide size.
  • Without from the tape, bubbles are inferred from volume and the side is estimated with the tick rule.
  • Without WebGL2 the Canvas 2D fallback is used: same colours, no bloom, slower on windows.

Native Quatick implementation and live demos

The charts below are the real Quatick engine (@quatick/quatick-charts), the same code the trading terminal runs, fed by a deterministic simulated market. Switch between demos, press Run market to stream ticks, order-book snapshots and , to pan and use the wheel to zoom. Show code exactly the calls each makes.

Live demo
Simulated depth recorded for four minutes, then live. Walls appear, are hit or pulled; bubbles show trades.
Loading the Quatick chart engine…
liquidity-heatmap · 0 bars · last — · 0 trades · drag to pan, wheel to zoom

How the engine draws Liquidity heatmap

Liquidity heatmap: native Quatick pipelineDATA INENGINE COMPUTESRENDERERDRAWN ON TOPsetOrderbookSnapshot(book,{ time })addTrades(trades)OHLCV bars1. Bin book into rows ×time columns2. Pack visible window intoRG8 texture3. Percentile, gamma,cut-off (shader)4. Palette LUT + bloomWebGL2 (Canvas 2Dfallback)Price line / candlesBBO trails, tradebubblesLive book profile,walls, statusLive update cost: One texture upload per frame; palette / gamma changes need no upload
Inputs, computation, renderer and overlay layers of the Liquidity heatmap chart type in the native engine.
StageWhat happens
insetOrderbookSnapshot(book, { time })
addTrades()
bars
Bin book into × time
Pack visible into RG8 texture
Percentile, gamma, cut-off (shader)
Step 4Palette LUT + bloom
WebGL2 (Canvas 2D fallback)
Layers / candles · BBO trails, trade bubbles · book profile, walls, status
updatesOne texture upload per frame; palette / gamma changes need no upload

How data reaches the screen

How data reaches the screenYour app / broker feedChart APIEngine stores & cachesScreen (rAF)new Chart({ container, chartType })setData(series, bars)bars → data managerindex + boundssetChartTypeOptions(type, {...})sanitise against schemaclamp rangessetOrderbookSnapshot(book, { time })OrderbookModel + LiquidityHistoryrow gridaddTrades(trades)TradeTape (sorted)real trades winupdate(series, formingBar) — every tickrecompute forming barO(1)request redrawone framerender price action + overlays
The calls your code makes, what the engine stores, and when it draws. Redraws are coalesced into one animation frame.

Minimal implementation

The first above, as standalone code:

typescript
import { Chart } from '@quatick/quatick-charts';

const chart = new Chart({
  container: document.getElementById('chart')!,
  chartType: 'liquidity-heatmap',
  theme: 'dark',
  renderer: 'webgl',
  showVolume: false,
});
const series = chart.addSeries({ type: 'candlestick' });
chart.setData(series.id, bars); // [{ time, open, high, low, close, volume }] — time in seconds

chart.setChartTypeOptions('liquidity-heatmap', {
  palette: "bookmap",
  colorMode: "heat",
  gamma: 1.1,
  bubbleScale: 0.7
});

// Live: every tick updates the forming bar (a new time opens a new bar)
feed.onTick(bar => chart.update(series.id, bar));

// Depth and trades
feed.onBook(book => chart.setOrderbookSnapshot(book, { time: chartSeconds }));  // { bids: [[price, size]], asks: [[price, size]] }
feed.onTrades(trades => chart.addTrades(trades));  // [{ time, price, size, side: 'buy' | 'sell' }]

Quatick settings reference

Loading the settings list…

See also

Related articles

  • Composite Profile

    Charts / Chart Types / Volume Charts

    Volume, time and resting liquidity at every price of a session, side by side, with three points of control and each row classified.

  • Absorption & Iceberg Map

    Charts / Chart Types / Volume Charts

    Hidden liquidity made visible: levels where more traded than the book showed, and levels that absorbed heavy flow without breaking.

  • Cumulative Delta (CVD)

    Charts / Chart Types / Volume Charts

    Candles of the running total of buy volume minus sell volume, with divergence detection against price.

  • Depth Footprint

    Charts / Chart Types / Volume Charts

    Each bar split in two: what traded at every price, and what was resting in the book at that price.

  • DOM Ladder

    Charts / Chart Types / Volume Charts

    Depth of market on the chart's price scale: resting bids and asks, your orders, traded volume and delta at every price, with recent candles beside it.

  • Order-Book Imbalance Candles

    Charts / Chart Types / Volume Charts

    Candles of how one-sided the resting book was, with what aggressive traders actually did on the same scale.

  • Orderflow Chart

    Charts / Chart Types / Volume Charts

    An enterprise-grade orderflow visualization combining footprint, CVD, depth ladder, whale detection, and time & sales.

  • TPO Market Profile

    Charts / Chart Types / Volume Charts

    Time-Price-Opportunity Market Profile using letter-based visualization to reveal where price spent time.

  • Volume Footprint

    Charts / Chart Types / Volume Charts

    A bid/ask volume histogram overlaid on each price bar, revealing who is buying and selling at every price level.

Browse all knowledge base articles →