Volume per Level Indicator: Formula, Settings and How to Read It
Volume per Level measures the density of a bar's auction: the bar's volume divided by the number of distinct price levels that actually traded. High values mean each price was worked heavily; low values mean price slipped from level to level without much business at any of them.
Senzoukria · Indicators · Updated September 2026
Volume per Level ships with the Senzoukria desktop app, in the Volume group of the indicator catalogue. It is drawn in its own panel below the chart.
What Volume per Level measures
The numerator is the sum of buy and sell volume across the bar's levels rather than a separate bar-total field, so numerator and denominator are built from exactly the same set of levels and a level discarded as unusable cannot skew the average. The denominator counts prices that genuinely printed, not the span between high and low, so an untraded gap inside a bar is simply absent rather than counted as a level that failed to trade. A bar with no usable levels returns nothing instead of dividing by zero. It is the complement of an effort-versus-result reading built on volume divided by range: here the denominator is prices touched, not distance covered.
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:
Volume moyen par niveau de prix : value = Σ (buy + sell) des niveaux / nombre de niveaux distincts Le numérateur est le volume barre AU SENS DU CANON (Σ des niveaux), pas le champ `totalVolume` : numérateur et dénominateur doivent porter sur le même ensemble de niveaux, sinon un niveau écarté (qty = 0, prix non fini) fausse la moyenne. POURQUOI : c'est la densité de l'enchère. Élevé = chaque prix a été lourdement travaillé (marché en équilibre, liquidité épaisse) ; faible = le prix a glissé de niveau en niveau (marché fin, mouvement peu coûteux). Complète `effort-vs-result` (volume / range) : ici le dénominateur est le nombre de prix RÉELLEMENT traités, pas l'amplitude — les trous ne comptent pas. 0 niveau → null (division par zéro = pas d'information).
How to read it
- High density describes an auction in balance — repeated business at each price, which is what a developing value area looks like from the inside.
- Low density describes cheap movement: price travelled through levels holding little liquidity, common on impulses and in thin overnight trade.
- Density dropping sharply as price leaves a range, with no drop in total volume, means the same business is being spread over many more prices.
- Density rising while range compresses is the signature of a market settling at a price rather than exploring away from it.
- Compare density within one instrument only: tick size and the typical level count per bar make the absolute figure meaningless across markets.
Parameters and defaults
There is no analytical parameter to tune — the ratio is fully determined by the bar's own levels. Only the plot color and a smoothing window are exposed, the latter at 1 by default for the raw per-bar value. Smoothing up to 200 bars converts the series into a slow reading of liquidity conditions, at the price of hiding the individual thin bar.
| Parameter | Type | Default | Range |
|---|---|---|---|
| Smoothing | number | 1 | 1 – 200 |
What it does not show
The value depends entirely on per-level data being present and complete. If the feed delivers aggregated trades instead of level detail, or drops prints during a burst, the level count is understated and density is overstated. It cannot distinguish a price worked heavily by two participants from one worked by two hundred; Trade Count answers that. It carries no direction, since identical density accompanies accumulation and distribution. It also shifts with tick size changes and contract rolls, which change the typical level count for the same instrument.
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
- Volume ROC % — Volume
- Relative Volume — Volume
- Trade Count — Volume
- Level Count — Volume
- POC Position % — Volume
- POC Migration (ticks) — Volume
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
- What does volume per level tell you that volume alone does not?
- How concentrated the trading was. Two bars can carry the same total volume while one traded it across a handful of prices and the other across dozens: the first is a tight auction, the second a market moving through thin liquidity. Volume per level makes that ratio explicit.
- Why is volume per level low during fast moves?
- Because price travels through many levels while total volume grows more slowly, so the same business is divided over a larger number of prices. Low density on an impulse means the move met little resting liquidity, which is a statement about the book, not about how far price will continue.
- Does volume per level use the bar's range or the levels that traded?
- The levels that actually traded. Prices inside the bar's range that printed nothing are not counted, so gaps do not deflate the average. That is what separates it from ratios built on volume divided by high minus low, which measure distance rather than participation.