Cumulative volume delta

Also written CVD, volume delta

Cumulative volume delta is a running total of buying volume minus selling volume, where a trade counts as buying when the aggressor, the taker who crossed the spread, was the buyer. Computed from individual trades it is exact for the venues included; computed from candles it is an estimate. Its level depends on where the sum started, so only its changes compare across tools.

Volume says how much traded. Volume delta says which side was in a hurry: every trade has a resting order on one side and an order that crossed the spread on the other, and delta is the taker-bought volume minus the taker-sold volume. Cumulative volume delta adds that up bar by bar.

How it works

The classification comes from the venue, in the trade record. A matching engine knows which order was resting and which arrived, and most crypto venues publish it on every public trade. They do not publish it the same way. Binance's trade and aggregate-trade streams carry a boolean, "Is the buyer the market maker?" — true means the seller was the aggressor. Coinbase's match messages carry a side field that, in its own documentation, "indicates the maker order side": a sell there is a buyer lifting the offer, an up-tick. Bybit's public trade stream has S, "Side of taker". Three venues, three conventions, and a parser that treats every side field as the aggressor gets Coinbase exactly backwards.

Trade-level CVD is exact for what it includes. Sum signed size over every trade and the result is the true delta for that market. Binance's aggregate stream groups the fills of a single taker order into one message, which changes the trade count and not the total. Binance also puts "taker buy base asset volume" into every kline, so a one-venue delta per candle can be read straight off its candles — sell volume is total volume minus that field.

Candle-level CVD is an approximation. Where no aggressor field is available, a tool infers one from price. TradingView documents its built-in indicator in detail: it fetches lower-timeframe bars inside each chart bar — one-minute bars under an hourly chart by default — and counts the whole of an intrabar's volume as buying if it closed above its open and as selling if below, with the previous close as tiebreaker. A one-minute bar with 100 BTC traded, 60 of it sold by takers, that still closed up counts as +100 where the true delta is −20. Precision rises as the intrabar timeframe falls, and history shrinks with it.

The cumulative part has an arbitrary start. A running total depends on when it began. TradingView resets at an anchor period you choose; crypto has no session open, so other tools start at the first loaded bar, a UTC day, or the start of their stored history. Two CVD lines with the same shape can sit thousands of coins apart, and neither level means anything on its own.

Why it matters here

Several cards in charting platforms list CVD, and the label is the least informative part. Three questions separate them.

Trades or candles? A tool that ingests the venue's trade feed — Aggr, which stores buy and sell volume separately on every bar it builds, Bookmap, ATAS, TensorCharts — can compute the real thing. A tool that only has candles is estimating it. For anything finer than a daily view, that is the difference between a measurement and a guess.

Which markets? Aggr sums the venues you tick into one tape, so its CVD is whatever you selected. Velo breaks it down by venue rather than merging. CoinGlass sells CVD in its order-flow set alongside footprint charts. Spot and perpetual delta on the same coin can point in opposite directions on the same hour, and a merged number across venues that quote contracts in different units is only as good as its conversion.

What does it cost to get? On GoCharting and TensorCharts CVD is a paid feature, which is common: trade-level history is more data to store than candles, and vendors price it that way.

A footprint chart is the same classification printed per price level instead of summed, so a tool that gets one right has the data to get the other right.

Where you will meet this

The cards where this changes a decision, then the rest that use the word.

Sources

  1. WebSocket Streams — Aggregate Trade Streams and Kline/Candlestick Streams — Binance, read
  2. Exchange WebSocket channels — Full channel, match messages — Coinbase, read
  3. V5 API — WebSocket public trade — Bybit, read
  4. Cumulative Volume Delta — TradingView, read

FAQ

Why do two tools show opposite CVD for the same market?

Most often the market is not the same: one sums a single venue's perpetual, the other several spot books, or both started summing at different moments. Less often it is a parsing error, because venues publish the aggressor side in opposite conventions — Binance flags whether the buyer was the maker, Coinbase's side field names the maker's side, and Bybit's names the taker's. Read one of them the wrong way round and every trade's sign flips.

Is a CVD drawn from one-minute candles good enough?

It is an estimate with a known bias. TradingView's built-in indicator assigns the whole of each lower-timeframe bar's volume to buying if the bar closed above its open and to selling if it closed below, so a one-minute bar that rose on mostly aggressive selling counts entirely as buying. Lower intrabar timeframes are more precise and cover less history, which is the trade the vendor documents.

Updated

Report an error on this page

Quote the line and say what it should be.

The vendor’s page, filing or documentation that says otherwise.

Only if you want to hear back. Never published.

Read by a person. It fixes a fact and moves nothing else.