Cumulative Volume Delta
Data & signals

Cumulative Volume Delta. Who is actually hitting the book.

Every trade has a buyer and a seller, so volume alone cannot tell you which side was in a hurry. Cumulative volume delta separates them by looking at who crossed the spread: market buys count positive, market sells count negative, and the running total is CVD.

It is the closest thing to a direct read on aggression, and its most useful signal appears when it disagrees with price.

How it works

Divergence between CVD and price is absorption

If aggressive selling is heavy and price does not fall, something is absorbing it: resting bids are soaking up every market sell without stepping back. That is a meaningfully different situation from price holding on light volume, and it is invisible on a candle chart. The same logic inverts at highs, where heavy aggressive buying that fails to lift price usually means someone is distributing into it.

What you can trade on it

Cumulative Volume Delta in a strategy

Absorption at levels

Falling CVD with flat price at support means sellers are being absorbed rather than winning.

Trend confirmation

A rally with CVD rising alongside it is being driven by real aggressive buying, not just thin books.

Exhaustion

A sharp CVD spike that produces almost no price movement often marks the end of a push.

Divergence as a filter

A strategy can require price and CVD to agree before it takes a signal.

A worked example

Buy absorption at a range low

The setup is a level holding while sellers keep hitting it. CVD is what turns "it feels like buyers are defending this" into a condition.

All conditions must hold
  • IFPrice is within 0.5% of a range low that has held at least twice
  • ANDCVD over the last 30 minutes is falling, showing sustained aggressive selling
  • ANDPrice over that same 30 minutes is flat or higher, so the selling is not working
  • ANDThe candle low has not broken the prior range low
ThenEnter long, stop below the range low, and target the opposite side of the range.
Why it is built this way

The whole signal lives in the contradiction between the third condition and the second. Falling CVD alone just means people are selling, which is normal. Falling CVD while price refuses to follow means the selling is being absorbed by resting bids, and whoever is doing that has more size than the sellers. It fails when the absorbing bid is pulled, which is why the stop sits below the level rather than at it.

Where the data comes from
Exchange trade feeds

Venues publish each execution with a flag for which side was the aggressor, which is the raw input CVD is built from.

Charting platforms

TradingView and most order flow tools compute CVD per venue directly from those trade prints.

Per-venue, not aggregated

CVD is meaningful for a single order book. Summing it across exchanges mixes separate books and mostly produces noise.

Know the limits

The aggressor flag is not always what it seems

CVD depends on the exchange correctly labelling which side initiated, and that labelling differs between venues and can be distorted by how an exchange reports large or self-matched trades. It is also strictly per-book, so a strong reading on one exchange can be contradicted on another.

Templates where this matters
Keep exploring
Liquid Edge

Turn Cumulative Volume Delta into a rule that fires.

Paper trade it first, go live when the numbers convince you.

  • Absorption at levels
  • Trend confirmation
  • Exhaustion