Concept

Autocorrelation Periodogram

Autocorrelation Periodogram is a Statistics concept. A reference entry: the Library explains it rather than implements it.

What is the Autocorrelation Periodogram?

The autocorrelation periodogram is John Ehlers' spectral estimator for finding the dominant cycle in price. Instead of Fourier-transforming price directly, it first computes the autocorrelation of a band-limited version of price at a range of lags, then measures the power at each candidate period by correlating that autocorrelation series against sine and cosine waves of that period. The theoretical license is the Wiener-Khinchin relation: the power spectrum of a stationary series is the Fourier transform of its autocorrelation function. Working through autocorrelation adds a practical benefit: correlation values are bounded between -1 and +1, so the spectrum is normalized for swing size and quiet and volatile stretches become comparable.

The estimator arrived with Ehlers' Cycle Analytics for Traders in the early 2010s as the refinement of a career spent importing signal-processing spectral methods into charting, from maximum-entropy estimation onward. Within that lineage the autocorrelation periodogram is his practical favorite: cheap enough to run per bar, normalized by construction, and robust on the short, drifting samples that defeat textbook spectral analysis.

In Ehlers' presentation the input is conditioned with a roofing filter to strip trend and high-frequency noise, the scan covers a bounded band of tradeable periods (roughly 10 to 48 bars in his examples), and the result is drawn as a spectrogram heatmap: time across, period up, color for normalized power. The dominant cycle is read as the power-weighted center of the strong periods and typically feeds dominant cycle measurement workflows that adapt indicator lookbacks. Market cycles drift, fade, and sometimes vanish entirely, so a smeared or shifting ridge is itself information: it says there is no stable cycle to tune to.

The craft points are few and load-bearing. Skip the roofing stage and trend energy floods the low periods, manufacturing a false ridge; scan too wide a band and the estimate wanders among harmonics; and read single columns rather than ridge persistence and every wobble becomes a 'cycle change'. Properly configured, the tool is causal, computed each bar from completed data only, so the history it draws is the history a live trader would have seen.

How to read an autocorrelation periodogram

The display is a spectrogram; the discipline is reading ridges, not pixels.

  1. 1Confirm the preprocessing: a roofing or equivalent band-pass stage should precede the estimator, or the low-period power is trend leakage.
  2. 2Note the scanned band: the conventional 10-to-48-bar range covers swing-tradeable periods; wider bands invite harmonic confusion.
  3. 3Find the ridge: a bright, narrow band of persistent power across recent columns is the operative cycle; its period is the reading.
  4. 4Take the dominant cycle as a weighted center, not a spike: implementations average across the strong periods to steady the estimate.
  5. 5Grade ridge persistence before using it: a ridge that has held for dozens of bars deserves parameter authority; a flickering one does not.
  6. 6Treat a washed-out spectrum as an answer: no stable ridge means no cycle regime, and cycle-tuned tools should stand down.

How it's calculated

Estimates the dominant market cycle period by applying a discrete Fourier transform to the autocorrelation of filtered price (John Ehlers).

rt(L)=Pearson correlation between Ft and FtL, computed over the last M barsr_t(L) = \text{Pearson correlation between } F_t \text{ and } F_{t-L} \text{, computed over the last } M \text{ bars}
Ct(P)=L=3Nrt(L)×cos(2×π×L/P)C_t(P) = \sum_{L=3}^{N} r_t(L) \times \cos(2 \times \pi \times L / P)
St(P)=L=3Nrt(L)×sin(2×π×L/P)S_t(P) = \sum_{L=3}^{N} r_t(L) \times \sin(2 \times \pi \times L / P)
Rt(P)=0.2×(Ct(P)2+St(P)2)2+0.8×Rt1(P)R_t(P) = 0.2 \times \left(C_t(P)^2 + S_t(P)^2\right)^2 + 0.8 \times R_{t-1}(P)
MaxPwrt=max(d×MaxPwrt1, maxPRt(P))\mathrm{MaxPwr}_t = \max\left(d \times \mathrm{MaxPwr}_{t-1},\ \max_{P} R_t(P)\right)
Pwrt(P)=Rt(P)MaxPwrt\mathrm{Pwr}_t(P) = \frac{R_t(P)}{\mathrm{MaxPwr}_t}
DCt=PP×Pwrt(P)PPwrt(P), summing only periods with Pwrt(P)0.5\mathrm{DC}_t = \frac{\sum_{P} P \times \mathrm{Pwr}_t(P)}{\sum_{P} \mathrm{Pwr}_t(P)} \text{, summing only periods with } \mathrm{Pwr}_t(P) \geq 0.5
F_t: price at bar t after Ehlers' roofing filter (48 bar high-pass, then 10 bar Super Smoother), input commonly the close
t: bar index
L: autocorrelation lag in bars
N: maximum lag (default 48)
M: bars used in each correlation (default 3; 0 means use the lag length itself)
r_t(L): autocorrelation of the filtered series at lag L
P: candidate cycle period in bars (scanned 10 to 48)
π: the circle constant, approximately 3.14159
C_t(P), S_t(P): cosine and sine transform sums at period P
R_t(P): smoothed spectral power at period P (EMA of the squared raw power)
d: decay factor of the normalization maximum (default 0.995)
MaxPwr_t: running maximum of R_t across all periods
Pwr_t(P): normalized spectral power, 0 to 1
DC_t: dominant cycle estimate, the center of gravity of the power spectrum

From John Ehlers, Cycle Analytics for Traders (2013); the roofing filter removes trend and high frequency noise so only the 10 to 48 bar cycle band is measured.

Pwr_t(P) is typically drawn as a heatmap of period versus time, with DC_t overlaid as the dominant cycle line.

Ehlers' printed code works in degrees and uses a 370 degree factor in the transform angle; most implementations use the standard 360 degrees, the 2 × π form shown above.

How traders use it

  • Adaptive lookbacks: the measured dominant cycle sets oscillator and moving-average lengths on the fly (for example, tuning a stochastic to a fraction of the dominant period), replacing one fixed setting with a cycle-aware one.
  • Regime filtering: a sharp, persistent ridge on the spectrogram argues for cycle-based tactics such as fading swings, while weak or smeared power argues the market is trending or noisy and cycle tools should stand down.
  • Auditing cycle claims: because the display shows the whole spectrum through time, it exposes whether an apparent cycle was stable across history or an artifact of one lucky stretch.
  • Cross-checking running estimators: the periodogram's windowed consensus audits the bar-by-bar period from Hilbert-transform estimators, with agreement licensing adaptation and disagreement counseling default settings.
  • Timing within the cycle: once a persistent period is established, its phase frames swing rhythm, when the current rotation is stretched in time as well as price, the read sinewave-style tools formalize.

Autocorrelation periodogram vs other cycle estimators

FFT/spectral Analysis: The plain FFT needs long, detrended, windowed samples and reports amplitude-weighted power. Routing through bounded autocorrelations normalizes for swing size and behaves better on short windows, which is exactly why Ehlers built the variant for charts.

Dominant Cycle Measurement: Dominant cycle measurement is the job description; the autocorrelation periodogram is one instrument that performs it, alongside Hilbert estimators and band-pass banks. Workflows read the spectrogram for the consensus and the running estimators for speed.

Hilbert Transform: Hilbert-based estimators output one instantaneous period per bar, fast and jittery. The periodogram outputs a whole spectrum per bar, slower-moving and richer, showing competing periods and their persistence rather than a single number.

Concept family

Statistics

46 concepts mapped · 46 in the Library

Autocorrelation Periodogram FAQ

Turn Autocorrelation Periodogram into a trading strategy.

Describe your Autocorrelation Periodogram idea to Quant. It builds the strategy with you and backtests it on real data.