Order Flow & Volume-at-Price Deep Dive

Cumulative Volume Delta (CVD) Explained: Formula, Classification, and Example

Spot the edge. Swoop in.

Cumulative volume delta tracks the running balance between buyer-initiated and seller-initiated volume. The number itself is simple arithmetic - the hard part is that exchanges don't publish which side initiated a trade, so every platform has to guess, and different guesses produce different CVD lines from the exact same trades.

By Swoopr Editorial Team

Published · Updated

AI-assisted content · Swoopr is responsible for the final published article.

Direct Answer

Cumulative volume delta (CVD) is the running sum of per-interval volume delta, where delta equals buyer-initiated volume (traded at the ask) minus seller-initiated volume (traded at the bid). Because exchanges typically don't publish whether a given print was buyer- or seller-initiated, platforms infer it with a trade-classification algorithm - and different platforms use different algorithms and data feeds, so the exact same underlying trades can produce meaningfully different CVD readings depending on where you're looking.

Key Takeaways

What Is Cumulative Volume Delta (CVD)?

Cumulative volume delta is a running total of "delta" - the net difference between aggressive buying and aggressive selling - accumulated over a session or a chart. At each interval (a time bar, a price bar, or an individual trade, depending on the platform), delta is calculated as the volume classified as buyer-initiated minus the volume classified as seller-initiated. CVD then adds that interval's delta to the running total from before, producing a line that rises when buyers are more aggressive on net and falls when sellers are more aggressive on net.

CVD is distinct from raw volume, which simply counts how much traded regardless of direction, and distinct from price, which can move for reasons unrelated to the immediate balance of aggressive buying and selling (a large resting limit order absorbing flow, for instance). CVD is meant to describe who was more aggressive at each interval, not to predict what price does next.

How Is Delta Calculated at Each Interval?

Delta at a single interval is: Delta = Ask-side (buyer-initiated) volume − Bid-side (seller-initiated) volume. "Ask-side" means a trade executed at or near the prevailing ask price, interpreted as a buyer aggressively taking liquidity; "bid-side" means a trade executed at or near the prevailing bid, interpreted as a seller aggressively taking liquidity. Cumulative volume delta then carries forward: CVD at time t = CVD at time t−1 + Delta at time t. The running sum is what makes it "cumulative" rather than a per-bar reading like a single bar's delta alone.

Every trade in a continuous market has both a buyer and a seller by definition - what delta actually measures is which side of the trade was the aggressor (the one who crossed the spread to trade immediately) versus the passive side (the one whose resting order got filled). That aggressor/passive distinction is the entire basis of CVD, and it's also exactly the piece of information that isn't directly published on most exchange tapes.

Why Do Trade-Classification Methods Make CVD Differ Across Platforms?

This is the central limitation of CVD as a tool. Most exchanges publish a tape of executed trades - price, size, and timestamp - but not a flag stating whether each trade was buyer-initiated or seller-initiated. To build a CVD line, a platform has to infer that classification using a trade-classification algorithm applied after the fact. The two most common approaches are described below.

What Is the Tick Rule?

The tick rule classifies a trade by comparing its price to the immediately preceding trade price: if the trade occurs at a higher price than the last trade (an "uptick"), it's classified as buyer-initiated; if it occurs at a lower price (a "downtick"), it's classified as seller-initiated; a trade at the same price commonly inherits the classification of the last price change. The tick rule only needs the trade tape itself, which makes it simple to compute, but it can misclassify trades during fast, choppy sequences where price bounces don't cleanly reflect aggressor side.

What Is the Quote Rule?

The quote-comparison rule instead compares each trade's execution price to the prevailing best bid and ask at the moment of execution: a trade at or near the ask is classified as buyer-initiated, a trade at or near the bid is classified as seller-initiated, and a trade that lands between the bid and ask (a "midpoint" print) is typically handled with a platform-specific tiebreak rule. The quote rule generally requires access to a full quote (bid/ask) feed, not just the trade tape, so it depends on data the platform may or may not have licensed at the same resolution the exchange itself sees.

Can CVD Readings Be Compared Across Different Platforms?

Not reliably. A platform using the tick rule on a delayed, single-venue trade feed can produce a visibly different CVD line from a platform using a quote-comparison rule on a full consolidated feed - for the identical instrument, over the identical period. Neither line is simply "wrong"; they're measuring the same underlying trades through different classification lenses. The practical implication is to treat CVD as a within-platform, internally consistent metric: track how your platform's CVD behaves over time and relative to its own history, rather than comparing its absolute reading to a screenshot or number from a different tool.

Worked Hypothetical Example: Four-Interval CVD Calculation

The table below walks through a hypothetical instrument over four consecutive intervals (these could be one-minute bars, five-minute bars, or any other fixed interval a platform uses). Each interval's ask-side and bid-side volume is already classified - the arithmetic itself is simple addition and subtraction, shown step by step so it can be hand-verified.

IntervalAsk-side volume (buyer-initiated)Bid-side volume (seller-initiated)DeltaCumulative volume delta
1800500+300+300
2400650−250+50
3900300+600+650
4350700−350+300

Interval 1: 800 ask-side minus 500 bid-side gives a delta of +300, so CVD starts the session at +300. Interval 2: 400 minus 650 gives a delta of −250, which is added to the prior CVD of +300 to give +50 (300 − 250 = 50). Interval 3: 900 minus 300 gives +600, carried forward to 50 + 600 = +650. Interval 4: 350 minus 700 gives −350, carried forward to 650 − 350 = +300. The session's CVD ends at +300, meaning buyer-initiated volume exceeded seller-initiated volume by 300 contracts or shares over the four intervals combined, even though interval 2 and interval 4 were both net-seller-initiated on their own.

Assumptions and limitations:

Tick Rule Versus Quote Rule Classification

MethodWhat it comparesData requiredMain weakness
Tick ruleCurrent trade price vs. the previous trade priceTrade (tape) data onlyCan misclassify trades during rapid, choppy price sequences
Quote ruleCurrent trade price vs. the prevailing bid/ask at executionTrade data plus a synchronized quote feedNeeds a quote feed at the same resolution as the exchange; midpoint prints need a tiebreak rule

Neither method is universally "more correct" - each is an inference built on different available data, and platforms don't always disclose which one, or which variant of it, they use.

Misconceptions Versus Reality

MisconceptionReality
Exchanges publish whether each trade was buyer- or seller-initiatedMost exchange tapes only publish price, size, and timestamp - the aggressor side is inferred by the platform, not disclosed by the exchange
A CVD reading of +300 on one platform means the same thing as +300 on another platformDifferent classification methods and data feeds can produce different absolute CVD values from identical underlying trades, so the numbers aren't directly comparable across platforms
CVD and price should always move in the same directionPrice and CVD can diverge - price can rise while CVD falls, or vice versa - and a divergence is a descriptive observation, not an automatic signal
A rising CVD guarantees rising prices nextCVD describes historical aggressor-side volume balance; it does not forecast future price direction on its own

Risks and Limitations

Treat CVD as a within-platform, methodology-dependent metric, not a universal, cross-platform number - and treat any single reading as descriptive of what already happened, not a guarantee of what happens next.

Checklist Before Relying on a CVD Reading

CVD Glossary

Frequently Asked Questions

What Is Cumulative Volume Delta (CVD)?

Cumulative volume delta is the running sum of per-interval volume delta, where delta at each interval is buyer-initiated volume (traded at the ask) minus seller-initiated volume (traded at the bid). CVD accumulates that delta across a session or chart rather than resetting each bar, so it tracks the net direction of aggressive trading over time rather than at a single instant.

How Is Delta Calculated at Each Interval?

Delta at a given interval equals the volume classified as buyer-initiated (trades executed at or near the ask) minus the volume classified as seller-initiated (trades executed at or near the bid). The interval can be a time bar, a price bar, or a single trade, depending on the platform.

Why Do Trade-Classification Methods Make CVD Differ Across Platforms?

Exchanges typically don't publish whether each print was buyer- or seller-initiated, so platforms infer it using a trade-classification algorithm, commonly a variant of the tick rule or a quote-comparison rule. Different platforms use different classification methods and different underlying data feeds, so the same underlying trades can produce meaningfully different CVD readings depending on which platform calculated them.

Can CVD Readings Be Compared Across Different Platforms?

Not reliably. Because classification methodology and data feeds differ by platform, a CVD series from one platform is not directly comparable to a CVD series from another, even for the identical instrument and time period. CVD is best used consistently within one platform's own methodology rather than compared across tools.

Related Reading