Range Compression Indicator: Formula, Settings and How to Read It
Range Compression divides each bar's range by the average range of the bars preceding it and plots the ratio in a separate pane, so readings below 1 mark a contraction and readings above 1 an expansion.
Senzoukria · Indicators · Updated September 2026
Range Compression ships with the Senzoukria desktop app, in the Structure & sessions group of the indicator catalogue. It is drawn in its own panel below the chart.
What Range Compression measures
The value is (high − low) divided by the mean of the N preceding bar ranges, taken over the window that ends one bar before the current one. Excluding the bar from its own reference matters: otherwise a large bar would inflate the baseline it is being measured against and understate its own expansion. The ratio has no unit, so it does not depend on tick size and reads the same across instruments and timeframes. Before N bars are available, and when the reference bars are all flat and their mean is zero, no point is plotted rather than a substitute value.
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:
Range compression — range de la barre rapporté à sa normale récente : value = (high − low) / moyenne des N ranges PRÉCÉDENTS (fenêtre [i−N, i−1] : la barre ne dilue pas sa propre référence — même convention que `relative-volume`) < 1 = compression (coil, préparation de mouvement), > 1 = expansion. Warm-up (moins de N barres avant i) → PAS de point ; moyenne nulle (N barres plates) → PAS de point : 0/0 n'est pas une compression infinie. Défaut N=20, la même référence que le relative volume — les deux se lisent ensemble (range qui se contracte à volume constant = absorption). Sans unité, donc indépendant du tick size et comparable d'un instrument à l'autre.
How to read it
- A reading of 0.5 means the bar's range is half the recent normal; 2 means twice it.
- A sustained stretch of readings below 1 describes a market contracting; it says nothing about when, or in which direction, that contraction ends.
- A print well above 1 after a series of low readings is a range expansion — the first bar of a move often looks like this, and so does an isolated spike.
- The default period matches the one used by Relative Volume so the two can be read together: a range contracting while volume stays steady is the picture of absorption, which the footprint can confirm or contradict.
- Gaps between bars are not part of a bar's range, so a gap open can read as an ordinary bar even though price moved a long way.
Parameters and defaults
Reference period defaults to 20 bars and accepts 1 to 500. A short period makes the baseline follow recent activity closely, which keeps the ratio hovering near 1 and hides slow contractions; a long period gives a stable reference against which a quiet stretch stands out for longer. The two colours, labelled positive (#26c6da) and negative (#9e9e9e), affect only how the plotted series is drawn.
| Parameter | Type | Default | Range |
|---|---|---|---|
| Reference period | number | 20 | 1 – 500 |
What it does not show
The ratio measures amplitude and nothing else: a bar can have a small range while a large amount of volume trades inside it, and this indicator cannot see the difference. It is relative to the last N bars, so after a violent session ordinary bars read as compression, and after a dead one ordinary bars read as expansion. It carries no direction. Around a session boundary the reference window spans two sessions and compares bars from different liquidity regimes. Low readings are a description of the present, not a forecast of a breakout or of its timing.
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
- Session High/Low — Structure & sessions
- Opening Range — Structure & sessions
- IB Extensions — Structure & sessions
- Classic Pivots — Structure & sessions
- Camarilla Pivots — Structure & sessions
- Naked POC — Structure & sessions
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 range compression mean on a chart?
- It means the recent bars are covering less price ground than they normally do over the chosen lookback. On this indicator that shows up as readings below 1, with 0.5 meaning half the recent average range. It is a measurement of amplitude, not a prediction.
- How do you measure volatility contraction objectively?
- One way is to express each bar's range as a fraction of the average range of the bars before it, which is what this indicator does over a 20-bar window by default. Because the result is a ratio, it can be compared across instruments and timeframes without converting anything to ticks or points.
- What period should I use for range compression?
- The default of 20 bars matches the reference period of Relative Volume, which makes the two panes directly comparable. Shorter periods adapt quickly and flatten the readings toward 1; longer ones hold a steadier baseline and keep a contraction visible for more bars.