Petrol and aqua artwork of two glowing currents running together and then splitting apart
By AlphaProve

What CVD tells you that price can't

How cumulative volume delta uses taker-side flow, why venue coverage changes it, and why divergence or absorption is a condition rather than a result.

Two candles can share the same open, high, low, close, and total volume while their classified trade flow differs. Cumulative volume delta (CVD) adds that missing field: the running sum of aggressive buy volume minus aggressive sell volume. It describes who initiated the recorded trades; it does not reveal trader identity, hidden orders, intent, or the next price move.

A price-only indicator sees the same OHLCV candle in both cases. CVD can distinguish the feed's aggressor-side mix, provided that the underlying trades and classification are available.

What CVD actually measures

Every completed trade has a buyer and a seller. The aggressor classification labels the side that crossed the spread: a buyer lifting an ask or a seller hitting a bid. Per bar, volume delta is:

delta = aggressive buy volume − aggressive sell volume

CVD is the running total of that number. Three bars with deltas of +12, −5, and +3 BTC take a series starting at zero to +10 BTC. Bybit's public-trade endpoint, for example, defines its side field as the taker side. Other feeds may infer side differently.

CVD summarizes executed flow, whereas the order book summarizes visible resting orders; trade prices record where executions occurred. The series depends on venue, contract, missing-trade handling, bar boundaries, and its arbitrary starting point. Two exchanges can therefore publish different CVD shapes for the same asset without either series being mathematically wrong.

Divergence: the push with no fuel

The classic disagreement. Price makes a new high. CVD doesn't.

Read literally, the second high was reached while the selected CVD series did not make a corresponding high. That can be consistent with less net aggressive buying over the compared swings. It does not show that demand is absent or that a reversal now needs less selling: passive liquidity, other venues, and the chosen anchors are outside the calculation.

The mirror label at lows is bullish divergence: price makes a lower low while the selected CVD series holds above its prior low.

A made-up example with round numbers: Bitcoin prints a high of $65,000 with CVD at +12,400, pulls back, then reaches $65,300 with CVD at +11,100. Price made a higher high while CVD made a lower high. That is the pattern called bearish divergence. It is a condition a strategy can test, not evidence that a specific participant is selling or that the next return will be negative.

Absorption: the attack that goes nowhere

The opposite disagreement, and the more violent one. CVD falls hard, heavy aggressive selling, bar after bar, and price... refuses to go down.

The pattern is consistent with passive bids taking the other side of market sells, but CVD cannot show whether one participant reloaded an order or many participants traded. Sellers can also continue, and price can break later. “Absorption” is an interpretation to validate, not a known cause recovered from aggregated bars.

Different data, not a guaranteed lead

A moving average is a summary of past prices. RSI is a summary of past price changes. Every indicator computed from close prices inherits the same limitation: it cannot contain information that hasn't reached price yet.

Order flow adds a different measurement, but it is not automatically earlier or causal. The trade and its price print occur together; aggregation can make one series appear to turn first. A test must define the divergence anchors, signal timing, costs, and later returns before claiming predictive value.

Four limits to record

The baseline is arbitrary. CVD is a running sum from a chosen starting point. Its absolute +40,000 level cannot be compared with a series that starts elsewhere. Shape and changes can still be compared when the venue, contract, aggregation, and start stay fixed.

Aggressor data are required. Computing delta needs trade-side classification or candles derived from it. Inferring “buy volume” from a green candle is a different indicator and should be labelled that way.

One feed is not the whole market. Missing trades and cross-venue flow can change the series. CVD also records executions, not cancelled or hidden resting orders.

Divergence is a condition, not a result. A rule still needs fixed swing anchors, entry timing, exits, costs, and later evaluation. Adding structure such as an order block or failed swing makes the rule more specific; it does not establish that the combination predicts returns.

What this looks like in practice

A testable bearish template might require price to return to a predefined level, make a higher swing high, produce a lower CVD high over the same anchors, and close back inside the level. Each condition answers where or when; none says that the participants are “out of ammunition.” Reverse the comparisons for a bullish template, then define the exit before running it.

What AlphaProve can test

AlphaProve's candle schema stores buy volume, sell volume, and delta, and its Python indicator surface exposes CVD. Builtin strategies include divergence, absorption, swing-failure, and order-block variants. Strategy code does not receive L2 order-book depth; the public strategy-authoring reference documents that data boundary.

An earlier August artifact recorded +4.13% on 41 BTCUSDT 4-hour trades for one cvd_divergence configuration. The repository's later validation record marks all figures from that pre-correction artifact set as stale after engine fixes, and this study was not regenerated for the present edit. It is therefore not evidence of a current edge and is not promoted as a performance result here.

Use the short CVD definition when you need the formula. Use this article's data checklist to state the venue, contract, classification, anchors, and evaluation window before interpreting a divergence chart. For a chronological evaluation example, see walk-forward testing explained. If you would like to explore CVD strategies in AlphaProve, request private-beta access.