Autocorrelation Indicator: Formula, Settings and How to Read It

The Autocorrelation indicator measures how strongly a bar's return resembles the return k bars earlier, over a rolling window. It plots a single value bounded between −1 and +1 in its own pane, using lag 1 and a 50-bar window by default.

Senzoukria · Indicators · Updated September 2026


Autocorrelation ships with the Senzoukria desktop app, in the Momentum group of the indicator catalogue. It is drawn in its own panel below the chart.

What Autocorrelation measures

It uses the standard biased estimator described by Box and Jenkins: the sum of products of paired deviations at the chosen lag, divided by the sum of squared deviations across the whole window, with a single window mean used at both stages. That deliberate imbalance — the numerator pairs only N − k terms while the denominator covers all N — is what keeps the result inside [−1, +1]; the so-called unbiased variant dividing by N − k can leave that range and becomes unusable on a chart. The output is additionally clamped to absorb floating-point rounding. A window whose returns have no variance, or a window no longer than the lag, yields no value rather than zero.

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:

Autocorrélation des rendements au lag k sur la fenêtre des N derniers — estimateur BIAISÉ standard (Box & Jenkins), le seul borné [−1, 1] : ρ_k = Σ_{j=k+1..N}(r_j − r̄)(r_{j−k} − r̄) / Σ_{j=1..N}(r_j − r̄)² Une seule moyenne r̄ (celle de toute la fenêtre) aux deux étages, et un dénominateur sur les N termes alors que le numérateur n'en a que N−k : c'est ce déséquilibre assumé qui garantit |ρ| ≤ 1 (la version « non biaisée » ÷(N−k) peut sortir de [−1,1] et devient ingérable à l'affichage). Borné dur en sortie pour l'arrondi f64. Lecture : ρ₁ > 0 = les barres prolongent la précédente (trend suivi), ρ₁ < 0 = alternance (retour à la moyenne barre à barre). Variance nulle (fenêtre de rendements plate) → null. Fenêtre ≤ lag (aucun couple à corréler) → null. Défauts lag=1, N=50.

How to read it

  • Positive at lag 1: an up bar tends to be followed by another up bar, the statistical face of trending behaviour at that timeframe.
  • Negative at lag 1: bars alternate, so a move tends to be partly given back on the next one — mean reversion, described statistically.
  • Readings near zero say consecutive returns carry no linear relationship in that window. This is the common state, not a fault.
  • Raising the lag asks a different question: lag 5 asks whether behaviour five bars ago repeats, which is about periodicity rather than trend.
  • Watch the regime, not the single value: a shift from persistently negative to persistently positive says the market changed character.

Parameters and defaults

lag (1) chooses which distance between returns is compared and window (50) how many returns enter the estimate. Short windows swing widely on sampling noise; long ones are steadier but average across regime changes. Because the estimator pulls toward zero as the lag approaches the window length, keeping the lag small relative to the window keeps the readings meaningful.

Autocorrelation — parameters exposed in the app, with the values it ships with.
ParameterTypeDefaultRange
Lagnumber11 – 100
Windownumber502 – 1000

What it does not show

Autocorrelation only detects a linear relationship between returns — a market can be strongly structured and still read near zero. It says nothing about direction, about the size of moves, or about who traded: no volume, delta or book depth enters the calculation. Because it is an estimate on a finite sample, values wander even in genuinely random data, so any threshold will be crossed by chance often enough to matter. It is also defined on bars, so changing the bar type or interval changes the answer, and a reading from tick bars cannot be compared with one from time bars.

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.

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 a negative return autocorrelation mean?
At lag 1, a negative value means up bars tend to be followed by down bars and the reverse, so part of each move is given back on the next bar. That is the statistical description of mean reversion at the chart's timeframe. It does not say how much will be given back, nor that the next bar in particular will reverse.
Which lag should I use?
Lag 1, the default, asks whether one bar extends the previous one. Larger lags ask whether behaviour repeats at that distance, a question about periodicity rather than trend. Keep the lag small compared with the window: as it approaches the window length, few pairs remain in the numerator while the denominator still covers the whole window, and the estimate collapses toward zero.
Is autocorrelation the same as correlating two instruments?
No. Correlating two instruments compares two different series; autocorrelation compares one series with a delayed copy of itself. The Price/Volume and Price/Delta correlations in Senzoukria belong to the first family, while this indicator looks only at the instrument's own returns.

Keep reading