Appearance

Personalize your experience

Mode
Accent Color
Direction
Order-Book Imbalance Candles

Order-Book Imbalance (OBI) 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.

What the chart shows

Markets carry two kinds of pressure. Passive pressure is the limit orders resting in the book: when far more size waits on the bid than on the ask, buyers are willing to wait for price. Aggressive pressure is market orders crossing the spread, which is what cumulative delta measures. This chart shows both on one ±100 % scale, so you can see at once when they agree and when they disagree.

Menu
Chart type → → Book imbalance
Engine type
obi-candles
Y axis
Imbalance in percent: +100 = all resting size on the bid, −100 = all on the ask
Combines
Recorded order-book snapshots (passive) + bid / ask volume per bar (aggressive)
Unique to this chart
Imbalance candles per bar, time-weighted book, and passive-vs-aggressive divergence

Anatomy of the chart

Anatomy of the order-book imbalance chart100500-50-100OBI candle: book imbalance in the bartime-weighted book (TWA)aggressor Δ% of the bar's tradesdivergence: book bid-heavy, trades sellingbid-heavy zone (> +30 %)ask-heavy zone (< −30 %)book flips to the ask sideBars 5–6: buyers rest on the bid while sellers hit it. Two bars later the bids are gone and the book flips.
Imbalance candles with the time-weighted book (white), the aggressor share (amber dashed) and two divergence bars (violet).
PartWhat it isHow to read it
OBI candleOpen, high, low and close of the imbalance over the snapshots inside the bar.Teal above zero: bid-heavy book; rose below: ask-heavy. Stronger tint means more one-sided.
TWA lineImbalance averaged over the bar, weighted by how long each snapshot lasted.What the book really showed, little affected by a brief flash order.
Aggressor stepBar delta / bar volume, in percent.Who crossed the spread: +40 % means 70 % of the volume was buying.
Divergence columnBook and beyond the threshold on opposite .Passive and aggressive participants disagree; see the four cases below.
Bands beyond ± the zone threshold.Candles inside a zone mean a clearly one-sided book.
Hatched areaTime before depth was recorded.No candles there: OBI needs the book.
Last imbalance on the .The current reading.

How the values are calculated, step by step

Imbalance of one book snapshot (5 levels, linear weights)ask 1 · w 1120ask 2 · w 0.8150ask 3 · w 0.690ask 4 · w 0.4200ask 5 · w 0.2160bid 1 · w 1320bid 2 · w 0.8180bid 3 · w 0.6260bid 4 · w 0.4140bid 5 · w 0.290B = Σ bid size × weight = 694A = Σ ask size × weight = 406OBI = (B − A) / (B + A) = +26 %Linear: weight of level k = (N − k) / NExponential: e^(−k / (N / 3))Equal: 1 for every levelEvery recorded snapshot gives one value. A bar's candle is the path of those values inside the bar.
One snapshot: weighted bid and ask size over the best N levels give one imbalance value.
  1. 1
    Take the best N levels per side
    Each recorded snapshot contributes its best Levels per side bid and ask levels.
  2. 2
    Weight them
    With linear or exponential weighting, levels near the count more. Distant orders are cheap to place and rarely trade, so they say less about intent.
  3. 3
    Compute the imbalance
    OBI = (B − A) / (B + A) × 100, where B and A are the weighted bid and ask sizes.
  4. 4
    Form the bar
    The snapshots inside the bar give its open (first), high, low and close (last). The time-weighted mean uses how long each snapshot lasted.
  5. 5
    Add the aggressor share
    The bar's delta / volume, from supplied bid / ask volume or the estimate (the legend says when it is estimated).
  6. 6
    Mark divergences
    Where the time-weighted book and the aggressor share are both beyond Divergence beyond but on opposite .

Reading the chart, step by step

Passive (book) versus aggressive (trades)Book bid-heavy · trades buyingagreement: strong bid, continuation upBook bid-heavy · trades sellingdivergence: passive buyers absorb sellersBook ask-heavy · trades sellingagreement: strong offer, continuation downBook ask-heavy · trades buyingdivergence: passive sellers absorb buyersDivergences are marked when both readings are beyond the threshold (25 % by default) on opposite sides.
The four combinations of book and trades.
  1. 1
    Read the book side
    Candles in the bid-heavy zone mean buyers are under price; in the ask-heavy zone, sellers are stacked above.
  2. 2
    Compare with the aggressor line
    When the amber line is on the same side, both kinds of participants agree and moves tend to continue.
  3. 3
    Act on divergences carefully
    A bid-heavy book while sell means passive buyers are absorbing. If the hold, price often up; if the candles drop out of the zone, the bids were and selling usually accelerates.
  4. 4
    Watch flips
    A candle that opens bid-heavy and closes ask-heavy (a long rose body crossing zero) shows liquidity leaving one side within one bar.
  5. 5
    Mind the depth used
    3 levels the and change fast; 25 levels measure the wider book and change slowly. Use both to separate quote from real repositioning.

Setting it up, step by step

  1. 1
    Choose a symbol with depth
    The broker must stream the order book. Recording starts when the chart type is selected.
  2. 2
    Use short bars
    15 s to 1 min bars get many snapshots each; on hourly bars the candles only cover the recorded part of one bar.
  3. 3
    Select the chart type
    Chart type menu → → Book imbalance, then open the gear.
  4. 4
    Pick the depth
    Start with 10 levels and linear weights. Use the Top of book preset for queue dynamics and Deep book for positioning.
  5. 5
    Supply bid / ask volume
    Feed setFootprintData so the aggressor line uses real rather than an estimate.

Common setups

Scalping

3 levels, equal weights, candles, divergence beyond 20 %. Short-lived queue shifts at the .

Intraday positioning

25 levels, linear weights, area style, fit scale. Slow shifts in where the book is .

With CVD

Run this chart beside a CVD chart: CVD gives the running aggressive total, OBI the passive side.

Limitations

!
Caution: can be at any time and some are placed to mislead. A one-sided book is information about intent, not a commitment; with (the aggressor line, the absorption map) before acting on it.
  • Only recorded depth is available; bars before recording have no candle.
  • The book covers only the levels the broker sends; with fewer levels than the setting, all available levels are used.
  • Without supplied bid / ask volume, the aggressor share is estimated from .

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
Candles of book imbalance per 15-second bar, with the time-weighted book (white) and aggressive flow (amber). Violet columns: the book leaned one way while trades went the other.
Loading the Quatick chart engine…
obi-candles · 0 bars · last — · 0 trades · drag to pan, wheel to zoom

How the engine draws Order-book imbalance

Order-book imbalance: native Quatick pipelineDATA INENGINE COMPUTESRENDERERDRAWN ON TOPsetOrderbookSnapshot(book)Bid / ask per price(optional)1. Imbalance per snapshotover N levels2. OHLC + time-weightedmean per bar3. Aggressor Δ% per bar4. Divergence: book vstradesCanvas 2DBid- / ask-heavyzonesTWA line, aggressorstepDivergence columns,legendLive update cost: Only bars from the last recorded column onward are recomputed
Inputs, computation, renderer and overlay layers of the Order-book imbalance chart type in the native engine.
StageWhat happens
insetOrderbookSnapshot(book)
Bid / ask per price (optional)
Imbalance per snapshot over N levels
OHLC + time-weighted mean per bar
Aggressor Δ% per bar
Step 4Divergence: book vs
Canvas 2D
LayersBid- / ask-heavy · TWA line, aggressor step · Divergence , legend
updatesOnly bars from the last recorded column onward are recomputed

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 rangessetFootprintData(levels)FootprintStore.setAllchanged bars onlysetOrderbookSnapshot(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: 'obi-candles',
  theme: 'dark',
  renderer: 'canvas',
  showVolume: false,
});
const series = chart.addSeries({ type: 'candlestick' });
chart.setData(series.id, bars); // [{ time, open, high, low, close, volume }] — time in seconds

// Real bid / ask volume per price, keyed by bar time
chart.setFootprintData({ [bar.time]: [{ price, bid, ask }, ...] });

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

// 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

  • 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.

  • 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.

  • 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.

  • 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.

  • 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 →