Appearance

Personalize your experience

Mode
Accent Color
Direction
Cumulative Delta (CVD)

Cumulative Delta (CVD)

Charts / Chart Types / Volume Charts

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

What the chart shows

Every trade has an aggressor. A buyer who lifts the offer at the ask; a seller who hits the bid at the bid. The difference between the two in one bar is the bar's delta. Cumulative delta (CVD, cumulative volume delta) adds the deltas bar after bar, so its level shows who has been more since the last reset and its slope shows who is aggressive now.

In Quatick the CVD chart type replaces the price candles in the main pane with candles of cumulative delta. Price can be drawn on top on its own scale, so the two can be compared directly. The chart also finds swing where price and CVD disagree (divergences) and marks them.

Menu
Chart type → → Cumulative delta
Engine type
cvd
Data
Real bid / ask volume per bar when supplied; otherwise estimated from
Renderer
Canvas 2D, incremental (a only recomputes the forming bar)
Good for
Confirming breakouts, spotting absorption and exhaustion, intraday divergence trading

Anatomy of the chart

Anatomy of the cumulative delta chartprice overlay (own scale)Bull divprice: lower lowCVD: higher lowCVD candleopen = previous closeclose = open + deltamoving averagezero linebar delta histogramPrice keeps falling, but selling pressure weakens and buyers start to absorb it.
Every part of the CVD chart. Here price makes a lower low while CVD makes a higher low, which is marked as a bullish divergence.
PartWhat it isHow to read it
CVD candleOpen = previous CVD close. Close = open + this bar's delta. High / low = the CVD extremes reached inside the bar.Green: more buying than selling in the bar. Red: more selling. A long body means one side dominated.
The and lowest CVD inside the bar, estimated from the bar's .A long lower wick on a green CVD candle: sellers pushed first, buyers then took over.
Zero lineCVD = 0, the reset level.Above zero, buyers have been net since the reset; below zero, sellers.
or SMA of the CVD close.CVD above a rising average: buying pressure is building. A shows a shift in .
Bar Each bar's own delta at the bottom of the pane.Shows the bars that moved CVD the most, without the running total.
Price overlayPrice close as a line on its own scale. shapes: when price and CVD move apart, the move is not backed by .
Divergence line and A line between two CVD values at consecutive price swing , with a shaded around it.Regular divergences warn of reversals; hidden divergences suggest the trend continues.
break where CVD resets to zero. CVD levels within one only.
Estimate in the corner when delta is estimated.Shapes are useful, but exact values need real bid / ask .

How the chart is built, step by step

  1. 1
    Split each bar into buy and sell volume
    If the host supplied bid / ask volume per price (chart.setFootprintData(), the same the footprint chart uses), the bar's buy volume is the sum of ask volume and its sell volume is the sum of bid volume. Without that data, the volume is split with the same estimate the footprint chart uses: the buy share follows the bar direction and where it closed in its range.
  2. 2
    Compute the bar delta
    Delta = buy volume − sell volume. A bar with 620 bought and 380 sold has a delta of +240.
  3. 3
    Add it to the running total
    CVD close = previous CVD close + delta. At a reset the previous close is taken as 0.
  4. 4
    Estimate the high and low
    With Wicks: Estimated from bar , the bar is assumed to travel open → low → high → close (up bars) or open → high → low → close (down bars). Sell volume is spent on the down legs and buy volume on the up legs, in proportion to distance. The and highest CVD reached on that walk become the .
  5. 5
    Draw the extras
    The , zero line, , price overlay and divergence marks are drawn from the finished series.
  6. 6
    Update live
    A new recomputes only the forming bar. Supplied bid / ask recomputes from the earliest bar it changed, so history is never rebuilt without need.
From bid / ask volume to cumulative deltaBarBuy (ask)Sell (bid)DeltaCVD1620380+240+2402540460+80+3203300700-400-804450350+100+205820280+540+5600Each CVD candle opens where the previous one closed and moves by the bar delta.
Worked example: five bars, their buy and sell volume, the bar delta and the running CVD.
Estimated wicks: walking the bar pathUp price barOLHCO → L → H → C→CVD candlelow: sells on the down legshigh: buys on the up legsopen = previous CVD closeclose = open + bar deltaDown bars walk O → H → L → C. Choose "Body only" to skip the estimate.
How a CVD wick is estimated from an up bar: sells on the way down to the low, then buys on the way up to the high.

Reset modes

CVD is a running total, so its level depends on where it starts. The Reset setting chooses the start.

Reset modesEvery sessionzero at each openFrom first visible barzero at left edgeNever (all history)level depends onloaded history
The same deltas with three reset modes. Only the session reset makes levels comparable from day to day.
  • Every (default): CVD returns to zero at each start, set by length and starts at. For NSE equities use a start of 9.25 (09:15) and a length that covers one trading day.
  • From first visible bar: CVD starts at zero at the left edge of the view and changes as you . Useful to over exactly what you are looking at.
  • Never: CVD runs over all loaded history. The absolute level then depends on how much history is loaded; read the slope, not the level.

Divergences, step by step

A divergence is a disagreement between price and CVD at two consecutive swing . The chart detects them as follows.

  1. 1
    Find price swings
    A swing high is a bar whose high is above the highs of Pivot length bars on each side; a swing low is the mirror . Only visible bars are searched.
  2. 2
    Compare consecutive swings
    For each pair of consecutive swing highs (and each pair of swing lows), the chart compares the price extremes and the CVD extremes of the same two bars.
  3. 3
    Classify
    Regular bearish: higher price high, CVD high not higher. Regular bullish: lower price low, CVD low not lower. Hidden bearish: lower price high, higher CVD high. Hidden bullish: higher price low, lower CVD low.
  4. 4
    Mark
    A line joins the two CVD (solid for regular, dashed for hidden), with an optional label and a shaded around the line.
Regular and hidden divergencesBearpriceCVDBullpriceCVDH BearpriceCVDH BullpriceCVDhigher high, lower CVDlower low, higher CVDlower high, higher CVDhigher low, lower CVDSolid = regular (reversal warning) · dashed = hidden (continuation)
The four divergence types. The top line of each panel is price, the bottom line is CVD.
!
Caution:A swing point is only confirmed after Pivot length more bars have closed. With the default of 5, a divergence on a 5-minute chart appears at least 25 minutes after the second swing. Smaller values earlier but find more, weaker swings.

Reading the chart, step by step

  1. 1
    Check the data source
    If the estimate is shown, treat values as approximate and focus on . With real bid / ask , values are exact.
  2. 2
    Read the level against zero
    Above zero: buyers have been net this . Below zero: sellers.
  3. 3
    Read the slope
    A steep CVD slope with price moving the same way confirms the move. A flat CVD while price trends means the move is carried by passive orders or few participants.
  4. 4
    Compare with price at swings
    Look for divergence marks at new . A new price high on a lower CVD high means buyers are paying up less: the breakout is weak.
  5. 5
    Look for absorption
    Strongly negative CVD bars while price does not fall mean sellers are hitting that are being refilled. A buyer is absorbing the selling, which often comes before a move up. The mirror case applies at highs.
  6. 6
    Use the moving average for timing
    A CVD of its average in the direction of the higher-timeframe trend is a common entry .

Setting it up, step by step

  1. 1
    Select the chart type
    Open the chart type menu, go to and click Cumulative delta.
  2. 2
    Open its settings
    Click the gear to the left of Cumulative delta in the same menu.
  3. 3
    Set the session
    In Calculation, keep Reset: Every and set the start and length for your market.
  4. 4
    Choose the style
    Candles show the inner structure of each bar. Line or area with glow gives a cleaner view for comparing with price; turn on Price overlay for that.
  5. 5
    Tune divergences
    Start with Pivot length 5 and regular divergences only. Add hidden divergences once you trade continuations.
  6. 6
    Supply real data where possible
    For exact values, feed bid / ask volume per price with chart.setFootprintData(). The footprint, and CVD charts share the same store.

Example: real bid / ask data

typescript
// bar time (chart seconds) → levels with volume at bid (sells) and ask (buys)
chart.setFootprintData({
  '1730275200': [
    { price: 24510.0, bid: 120, ask: 340 },
    { price: 24510.5, bid: 210, ask: 180 },
  ],
});
// Live: replace the levels of the forming bar
chart.updateFootprintBar(1730275500, levels);

Common setups

Intraday futures

Reset every , candles, 21, regular divergences, pivot length 5. the session CVD level with yesterday's close.

Scalping

1-minute bars, line style with glow, price overlay on, pivot length 2–3, delta labels on. Watch for CVD pushing against a flat price.

Swing context

Reset never, line style, SMA 50. Use the long-term slope to judge whether rallies are driven by buyers or by short covering.

Data requirements and limitations

ℹ
Note:Without bid / ask , delta is an estimate based on each candle's direction and close location. It follows the real CVD in trending markets but can differ in ranging bars, where real trading is close to balanced.
  • CVD levels from different instruments are not comparable; volume units differ.
  • With reset "From first visible bar", values change while you . Do not levels taken at different scroll positions.
  • Divergences need confirmed swings, so they always appear with a delay of the pivot length.
  • Estimated wicks assume one through the bar. Real order can differ.

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, to pan and use the wheel to zoom. Show code exactly the calls each makes.

Live demo
Session-reset CVD candles with EMA 21 and the delta histogram, from real bid / ask data.
Loading the Quatick chart engine…
cvd · 0 bars · last — · drag to pan, wheel to zoom

How the engine draws Cumulative delta

Cumulative delta: native Quatick pipelineDATA INENGINE COMPUTESRENDERERDRAWN ON TOPOHLCV barsBid / ask per price(optional)1. Bar delta (real orestimated)2. Running total with reset3. Estimated wicks from thebar path4. Pivots → divergencesCanvas 2D(candlestickrenderer for CVDcandles)MA, zero lineDelta histogramPrice overlay,divergencesLive update cost: O(1) per tick; supplied data recomputes from the earliest changed bar
Inputs, computation, renderer and overlay layers of the Cumulative delta chart type in the native engine.
StageWhat happens
in bars
Bid / ask per price (optional)
Bar delta (real or estimated)
Running total with reset
Estimated wicks from the bar
Step 4Pivots → divergences
Canvas 2D ( for CVD candles)
LayersMA, zero line · · Price overlay, divergences
updatesO(1) per ; supplied recomputes from the earliest changed bar

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 onlyupdate(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: 'cvd',
  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

chart.setChartTypeOptions('cvd', {
  style: "candles"
});

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

Quatick settings reference

Loading the settings list…

See also

Related articles

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

  • Orderflow Chart

    Charts / Chart Types / Volume Charts

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

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

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

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

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

  • TPO Market Profile

    Charts / Chart Types / Volume Charts

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

Browse all knowledge base articles →