What Is CVD in Crypto? Cumulative Volume Delta Explained
Price tells you what happened. CVD tells you who made it happen. Cumulative Volume Delta is one of the most direct ways to see whether aggressive buyers or aggressive sellers are in control — and it often disagrees with price right before a reversal.
The idea: every trade has an aggressor
Every executed trade has two sides — a passive limit order that was sitting in the order book, and an aggressive market order that crossed the spread to hit it. The aggressor is the side that wanted the trade badly enough to pay for immediacy. When a trade executes at the ask price, the buyer was the aggressor. When it executes at the bid, the seller was.
Volume delta for a period is simply: buy volume (buyer-aggressed) minus sell volume (seller-aggressed). Cumulative Volume Delta adds these deltas up over time, producing a running line — the CVD. Rising CVD means aggressive buying dominates; falling CVD means aggressive selling dominates.
How CVD is calculated
Accurate CVD requires tick data — a feed of every individual trade with its price and aggressor side. Exchanges like Coinbase and Kraken publish this over WebSocket. Each trade is classified as buyer-initiated (executed at or above the ask) or seller-initiated (executed at or below the bid), and the signed volumes are accumulated.
When tick data isn't available, CVD can be approximated from OHLCV candles using methods like CLV (Close Location Value) — estimating the buy/sell split from where the candle closed within its range. It's a usable approximation, but it cannot see intra-candle battles, so treat CLV-based CVD as lower resolution.
How to read CVD
Confirmation
The healthy case: price makes a new high and CVD makes a new high with it. Aggressive buyers are pushing, and the move is "paid for" with real market orders. Trends confirmed by CVD tend to continue.
Divergence — the interesting part
- Price up, CVD flat or falling: the rally isn't driven by aggressive buying. Either passive bids are being pulled higher, or a small amount of buying is moving a thin book. Rallies without CVD support frequently fail.
- Price flat, CVD rising: aggressive buyers keep hitting the ask but price doesn't move — someone large is absorbing them with passive sell orders. Often precedes a sharp move once absorption ends.
- Price makes a higher high, CVD makes a lower high: the classic bearish divergence. The second push had less real buying behind it than the first.
Where CVD fails
- It's exchange-specific. CVD built from one exchange only shows that exchange's aggression. Combining major venues (e.g. Coinbase + Kraken) gives a more representative picture of spot flow.
- Absolute level means little. CVD is a running sum from an arbitrary starting point — what matters is its shape relative to price, not the number itself.
- It can't see icebergs directly. Hidden passive liquidity shows up only indirectly, as CVD rising while price stalls.
How ChainVol implements CVD
ChainVol classifies every trade on Coinbase and Kraken in real time and renders CVD as a sub-chart oscillator in Chain Studio. For the top 5 coins (BTC, ETH, SOL, XRP, ADA) it uses true tick data; other coins use CLV estimates. CVD also feeds the LBI composite score and Flow Divergence detection — divergences like "price higher high, CVD lower high" are flagged automatically on the chart, using closed candles only so signals never repaint.
Related reading: How to Read Footprint Charts — the per-price-level view of the same aggressor data.
