Cumulative delta and divergence
Lesson 12 · about 10 min
Bar delta tells you who was aggressive in one bar. Cumulative delta (CVD, cumulative volume delta) adds every bar's delta together from a chosen start, usually the session open, and plots it as a line. It answers a bigger question: across the whole session, who has been more aggressive, and is price agreeing with them?
Building it by hand
| Bar | Ask vol | Bid vol | Bar delta | Cumulative delta | Close |
|---|---|---|---|---|---|
| 1 | 1,420 | 1,180 | +240 | +240 | 5001.50 |
| 2 | 1,650 | 1,230 | +420 | +660 | 5003.00 |
| 3 | 1,310 | 1,290 | +20 | +680 | 5003.25 |
| 4 | 980 | 1,410 | −430 | +250 | 5002.00 |
| 5 | 1,120 | 1,530 | −410 | −160 | 5000.75 |
| 6 | 1,540 | 1,090 | +450 | +290 | 5002.50 |
| 7 | 1,720 | 1,010 | +710 | +1,000 | 5003.25 |
| 8 | 1,690 | 1,050 | +640 | +1,640 | 5003.50 |
By bar 8, aggressive buyers have lifted 1,640 more contracts than aggressive sellers have hit. Price is at 5003.50. Compare bars 3 and 8: at bar 3 CVD was +680 and price 5003.25; at bar 8 CVD is +1,640 and price is 5003.50. It took an additional 960 contracts of net aggression to gain one tick. That is the kind of comparison CVD is for.
Divergence
Divergence is when price and CVD make different kinds of highs or lows.
Price CVD
5004 | /\ +2000 |
5003 | /\ / \ +1500 | /\
5002 | / \ / \ +1000 | /\ / \
5001 | / v \ +500 | / \ / \
5000 | / \ 0 | / v \
+------------------ -500 | / \
bar: 1 2 3 4 5 6 7 8 +------------------
bar: 1 2 3 4 5 6 7 8
That is agreement: price made a higher high and so did CVD. Now the divergent case:
Price CVD
5004 | /\ +1000 | /\
5003 | /\ / \ +500 | / \ /\
5002 | / \ / \ 0 | / \ / \
5001 | / v \ -500 | / \/ \
5000 | / \ -1000 | / \
+------------------ +------------------
Price made a higher high; CVD made a lower high. The second push to new highs happened on less net aggressive buying than the first. Two explanations, and you need the footprint to tell them apart:
- Buyers are exhausting. Fewer buyers were willing to lift at the higher price. The push is running on momentum and short covering. Bearish.
- Passive buyers are driving it. Price rose because offers were pulled and resting bids stepped up, not because anyone lifted. Also fragile, since passive buying cannot sustain a move.
Either way, a higher high in price on a lower high in CVD is a push that lacks aggressive sponsorship. That does not mean it will reverse; it means it needs fresh aggression to continue, and if that does not arrive, the reversal is usually quick.
The mirror image, price making a lower low while CVD makes a higher low, is the bullish version: sellers pushed to new lows with less aggression than before.
Key idea: CVD tracks net aggression across the session. Price making a new extreme that CVD does not confirm means the move lacks aggressive sponsorship. It is a warning, not a signal; the entry still needs a trigger.
The other divergence: heavy CVD, flat price
The case from the table above deserves its own name. When CVD rises strongly and price goes nowhere, the aggressive buyers are being absorbed by passive sellers. It is Module 2's absorption, measured across many bars instead of one price.
| Window | CVD change | Price change | Read |
|---|---|---|---|
| 10:00 to 10:30 | +2,100 | +14 ticks | Aggression is working |
| 10:30 to 11:00 | +1,900 | +2 ticks | Aggression is being absorbed |
| 11:00 to 11:15 | −600 | −11 ticks | Absorbed buyers exiting; sellers in control |
The second window is where a trader who only watched price would see "consolidation near the highs" and think it was healthy. A trader watching CVD sees nearly as much buying as the first window with none of the result, and prepares for the third window.
CVD reset and drift
Two practical issues:
- Where CVD starts matters. Most traders reset at the session open. Some run it continuously. A continuous CVD drifts over days because bid/ask classification is not perfectly symmetrical, so its absolute level means little; only its shape over the current session or day is useful.
- CVD on stocks and crypto is venue-dependent. On futures from one exchange, CVD is a complete measure. On a stock, the CVD from one exchange feed is a sample; on crypto, each exchange has its own CVD and they can disagree. Treat those as approximations.
A checklist for using CVD
- Is price making a new high or low for the session?
- Is CVD making a corresponding new high or low? If yes, the move has aggressive sponsorship; be careful fading it.
- If not, divergence. Check the footprint at the extreme: finished or unfinished? Stacked imbalances that were absorbed?
- If the extreme is finished and the divergence is present, wait for the trigger: a bar closing back inside the prior range, or delta flipping.
- Stop beyond the extreme. If a fresh burst of aggression arrives and CVD makes a new high, the divergence has resolved against you and you should be out.
Try it: Using the eight-bar table above, add three more bars: bar 9 with ask 1,510 and bid 1,340, closing at 5003.75; bar 10 with ask 1,380 and bid 1,420, closing at 5004.00; bar 11 with ask 1,200 and bid 1,610, closing at 5003.25. Compute each bar's delta and the running CVD, then state in one sentence whether bars 9 and 10 show divergence and why.
Recap
- Cumulative delta sums bar deltas from the session open; it measures net aggression across the session.
- Agreement (price and CVD making the same kind of extreme) means the move has aggressive sponsorship.
- Divergence (price extreme not matched by CVD) means the move is running without fresh aggression; it is a warning that needs a trigger and a footprint check.
- CVD rising while price stalls is multi-bar absorption; the absorbed side usually exits eventually.
- CVD's absolute level is meaningless and it is venue-dependent on stocks and crypto; use its shape within the session.
See it drawn
Original diagrams for the ideas on this page. Illustrative, not real market data.