# Cumulative volume delta

Also written CVD, volume delta.

*https://cryptomarkets.tools/glossary/cumulative-volume-delta · next to Crypto Charting Platforms & Screeners*

**Definition:** 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](https://cryptomarkets.tools/categories/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](https://cryptomarkets.tools/tools/aggr), which stores buy and sell volume separately on every bar it builds,
[Bookmap](https://cryptomarkets.tools/tools/bookmap), [ATAS](https://cryptomarkets.tools/tools/atas), [TensorCharts](https://cryptomarkets.tools/tools/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](https://cryptomarkets.tools/tools/velo) breaks it down by venue rather than merging. [CoinGlass](https://cryptomarkets.tools/tools/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](https://cryptomarkets.tools/tools/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](https://cryptomarkets.tools/glossary/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

- [AGGR](https://cryptomarkets.tools/tools/aggr.md)
- [Velo](https://cryptomarkets.tools/tools/velo.md)
- [CoinGlass API](https://cryptomarkets.tools/tools/coinglass.md)
- [GoCharting](https://cryptomarkets.tools/tools/gocharting.md)
- [TensorCharts](https://cryptomarkets.tools/tools/tensorcharts.md)
- [Bookmap](https://cryptomarkets.tools/tools/bookmap.md)
- [ATAS](https://cryptomarkets.tools/tools/atas.md)
- [TradingView](https://cryptomarkets.tools/tools/tradingview.md)
- [Hyblock Capital](https://cryptomarkets.tools/tools/hyblock-capital.md)

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

## Sources

1. [WebSocket Streams — Aggregate Trade Streams and Kline/Candlestick Streams](https://developers.binance.com/docs/binance-spot-api-docs/web-socket-streams) — Binance, read 2026-10-04
2. [Exchange WebSocket channels — Full channel, match messages](https://docs.cdp.coinbase.com/exchange/websocket-feed/channels) — Coinbase, read 2026-10-04
3. [V5 API — WebSocket public trade](https://bybit-exchange.github.io/docs/v5/websocket/public/trade) — Bybit, read 2026-10-04
4. [Cumulative Volume Delta](https://www.tradingview.com/support/solutions/43000725058-cumulative-volume-delta/) — TradingView, read 2026-10-04

*Last updated 2026-10-04. A reference page, corrected in place — not a dated post.*
