Cumulative buy volume Indicator: Formula, Settings and How to Read It
Cumulative buy volume adds up the aggressive buying of every bar since the session opened and plots it as a single climbing line. It is the buy leg of cumulative delta shown on its own, without the selling netted against it.
Senzoukria · Indicators · Updated September 2026
Cumulative buy volume ships with the Senzoukria desktop app, in the Tape & flow group of the indicator catalogue. It is drawn in its own panel below the chart.
What Cumulative buy volume measures
Buy volume is summed across the usable levels of each bar, then accumulated forward from the session open, and the running total restarts at zero at every new session — the CME convention anchors that open at 17:00 Central Time. Levels with no quantity contribute nothing. If one bar's buy volume is unavailable, the running total for the rest of that session is reported as missing rather than silently continued, because an incomplete cumulative would understate everything after the gap; only the next session open restores a clean starting point. Within a session the line never declines, so its slope, not its level, is the readable quantity.
The formula, as implemented
This is not a description of how the indicator is usually defined elsewhere — it is what the shipped code computes, documented next to the implementation:
Cumul intra-session de `pick(bar)` : repart de 0 à CHAQUE ouverture de session CME (`splitSessions` — les tranches couvrent les barres en ordre, le push séquentiel préserve l'alignement barre → point). */ function sessionCumulative( bars: readonly FootprintBar[], pick: (bar: FootprintBar) => number | null, ctx: SeriesContext, ): SeriesPoint[] { const pts: SeriesPoint[] = []; for (const s of splitSessions(bars, ctx)) { let running: number | null = 0; for (let i = s.start; i <= s.end; i++) { const value = pick(bars[i]); // Une jambe de volume absente rend tout le cumul suivant incomplet. // Seule l'ouverture d'une nouvelle séance permet de repartir de zéro. running = running !== null && value !== null ? running + value : null; pts.push({ time: bars[i].bucketTsNs, value: running }); } } return pts; } /** Moyenne + écart-type POPULATION (÷N) des N valeurs STRICTEMENT avant i (fenêtre [i−N, i−1]). `null` tant que la fenêtre n'est pas pleine — une statistique partielle mentirait sur sa période. */ function priorMeanStd( values: readonly number[], i: number, n: number, ): { mean: number; sd: number } | null { if (i < n) return null; let sum = 0; for (let j = i - n; j < i; j++) sum += values[j]; const mean = sum / n; let acc = 0; for (let j = i - n; j < i; j++) { const d = values[j] - mean; acc += d * d; } return { mean, sd: Math.sqrt(acc / n) }; } // ── Defs ──────────────────────────────────────────────────────────────────── /** Volume ACHETEUR cumulé de la session : Σ buyVolume (niveaux exploitables, qty=0 ignoré) depuis l'ouverture CME 17:00 CT, reset à CHAQUE ouverture (`splitSessions`) — la jambe buy du CVD, en absolu.
How to read it
- Read the slope. A steep segment means aggressive buying arrived quickly; a flat segment means it stopped, even if price kept moving.
- Compare it against cumulative sell volume in the same pane: two lines separating describe one-sided participation, two lines climbing in parallel describe two-sided trade that cumulative delta would show as flat.
- A steepening buy line while price stalls is the raw version of the absorption picture, and is worth checking against the footprint of the bars involved.
- The value is only comparable within one session. After the reset, comparing levels with the previous session means nothing.
- A break in the line is a data gap for the remainder of the session, not a drop in buying.
Parameters and defaults
The session anchor is fixed by the definition and is not a parameter, which leaves the line colour and the smoothing length. Smoothing is 1 by default and plots the raw cumulative. Averaging a series that only climbs mostly softens its slope changes, and the slope changes are the information the line carries, so there is rarely a reason to move it.
| Parameter | Type | Default | Range |
|---|---|---|---|
| Smoothing | number | 1 | 1 – 200 |
What it does not show
The line counts trades by aggressor side, so a bid that is filled counts as selling, not as buying — passive accumulation does not appear here. It says nothing about price, position, or the size of any resting order. It cannot be compared across sessions because of the reset, and it is unusable for the rest of a session once a bar's data is missing. On instruments whose activity does not match the anchored session, the reset falls at a point that means nothing for them.
Using it in Senzoukria
Add it from the Indicators panel of any footprint chart or candle chart. It runs on futures data from Rithmic or Databento and on crypto pairs from Binance and Bybit, on the same engine — the calculation does not change with the venue, only the data feeding it does. Market data subscriptions are billed by the provider, separately from the app.
Related indicators
- Tape Speed — Tape & flow
- Diagonal Imbalances — Tape & flow
- Stacked Imbalances — Tape & flow
- Absorption Score — Tape & flow
- Unfinished Auctions — Tape & flow
- Effort vs Result — Tape & flow
See the full indicator library, or start with the order flow guide if you are new to reading aggression, delta and absorption.
Frequently asked questions
- When does cumulative buy volume reset?
- At every session open. The series is anchored on the CME session boundary at 17:00 Central Time, and the running total returns to zero there. That is also the only event that clears a gap: once a bar's buy volume is missing, the rest of that session is left unreported.
- How is cumulative buy volume different from cumulative delta?
- Cumulative delta accumulates buying minus selling, so it can rise and fall. Cumulative buy volume accumulates only the buying, so within a session it never declines. Plotting the buy and sell legs separately shows whether a flat delta came from low participation or from heavy two-sided trade.
- Why does the cumulative buy volume line stop mid-session?
- Because one bar's buy volume could not be determined, and every later total in that session would then be incomplete. Rather than continue a number known to be wrong, the series is left empty until the next session open resets it to zero.