Ehlers Voss Predictive Filter (VOSS)

The Voss Predictive Filter is a two-stage signal processing pipeline that extracts a dominant cycle from noisy price data and predicts its future trajectory. By utilizing negative group delay, it creates a leading oscillator that anticipates bandpass zero crossings. Crossings between the base filter (Filt) and the predictor (Voss) generate early, high-fidelity trade signals with significantly reduced lag.
HISTORICAL CONTEXT
Introduced by John Ehlers in his August 2019 article "A Peek Into the Future," the algorithm builds on theoretical physics work by Henning U. Voss. Voss demonstrated that universal negative delay filters could be constructed using weighted feedback over a finite history of output samples. Ehlers adapted this to financial time series by pairing it with his two-pole bandpass filter.
Unlike standard "zero-lag" moving averages that merely reduce delay by mathematical overshooting, the Voss predictor achieves genuine anticipation by exploiting the mathematical structure of narrowband signals. When the input contains a dominant cycle near the tuned period, the predictor reconstructs future values with high fidelity.
HOW IT WORKS
Stage 1: Two-Pole Bandpass Filter (BPF)
The script first isolates cycles near a specified Period using a recursive filter structure. A differencing calculation removes the DC component (the underlying trend), centering the oscillator at zero. The Bandwidth parameter controls how tightly the filter rejects frequencies outside the target cycle.
Stage 2: The Voss Predictor
The predictor computes a weighted sum of its own past values over a specific lookback history (Order = 3 × Predict). Each past value is assigned a linearly increasing weight. This feedback loop shifts the filter response forward in time, creating a net negative group delay exactly equal to your "Predict" parameter.
INPUTS & PARAMETERS
Period: Sets the center frequency of the bandpass filter. Should approximately align with the market's current dominant cycle. Default: 20.
Predict: The number of bars to look into the future (the amount of negative delay). Default: 3.
Bandwidth: Controls the selectivity (Q factor) of the bandpass filter. Lower values narrow the passband. Default: 0.25.
HOW TO USE
Crossings and Early Signals
The indicator plots two lines: Filt (the baseline cycle) and Voss (the predicted cycle).
Bullish Signal: The Voss line crosses above the Filt line.
Bearish Signal: The Voss line crosses below the Filt line.
Because Voss leads Filt by the "Predict" parameter, these crossings anticipate the actual cycle's zero-crossings, getting you into the move earlier.
Cycle Phase Interpretation
Both lines oscillate around zero. They represent the phase and momentum of the dominant cycle, not absolute price targets. Use the crossings for timing, not the levels for price prediction.
Broadband Graceful Degradation
If the market stops cycling and enters a broadband noise or pure trend state, prediction accuracy degrades gracefully, and the Voss output simply reverts toward the standard bandpass filter line.
LIMITATIONS
Mistuning Penalty: The predictor relies on the "Period" matching the actual dominant cycle in the data. Mistuning by more than 30% degrades prediction accuracy significantly.
Noise Amplification: Setting "Predict" too high (e.g., > 5) requires a deep lookback history (Order > 15), which heavily amplifies noise in the feedback loop. Practical values are between 2 and 5.
Ringing: Setting the "Bandwidth" below 0.1 makes the filter highly selective. While smooth, it will "ring" excessively and respond very slowly to actual cycle changes.
Warmup Time: The bandpass filter needs approximately "Period" bars to stabilize. Signals immediately after the start of the chart are unreliable.
REFERENCES
Ehlers, J. F. "A Peek Into the Future." Technical Analysis of Stocks and Commodities, August 2019.
Voss, H. U. "Anticipating chaotic synchronization." Physical Review E, 61(5), 2000.
Ehlers, J. F. Cycle Analytics for Traders. Wiley, 2013.
HISTORICAL CONTEXT
Introduced by John Ehlers in his August 2019 article "A Peek Into the Future," the algorithm builds on theoretical physics work by Henning U. Voss. Voss demonstrated that universal negative delay filters could be constructed using weighted feedback over a finite history of output samples. Ehlers adapted this to financial time series by pairing it with his two-pole bandpass filter.
Unlike standard "zero-lag" moving averages that merely reduce delay by mathematical overshooting, the Voss predictor achieves genuine anticipation by exploiting the mathematical structure of narrowband signals. When the input contains a dominant cycle near the tuned period, the predictor reconstructs future values with high fidelity.
HOW IT WORKS
Stage 1: Two-Pole Bandpass Filter (BPF)
The script first isolates cycles near a specified Period using a recursive filter structure. A differencing calculation removes the DC component (the underlying trend), centering the oscillator at zero. The Bandwidth parameter controls how tightly the filter rejects frequencies outside the target cycle.
Stage 2: The Voss Predictor
The predictor computes a weighted sum of its own past values over a specific lookback history (Order = 3 × Predict). Each past value is assigned a linearly increasing weight. This feedback loop shifts the filter response forward in time, creating a net negative group delay exactly equal to your "Predict" parameter.
INPUTS & PARAMETERS
Period: Sets the center frequency of the bandpass filter. Should approximately align with the market's current dominant cycle. Default: 20.
Predict: The number of bars to look into the future (the amount of negative delay). Default: 3.
Bandwidth: Controls the selectivity (Q factor) of the bandpass filter. Lower values narrow the passband. Default: 0.25.
HOW TO USE
Crossings and Early Signals
The indicator plots two lines: Filt (the baseline cycle) and Voss (the predicted cycle).
Bullish Signal: The Voss line crosses above the Filt line.
Bearish Signal: The Voss line crosses below the Filt line.
Because Voss leads Filt by the "Predict" parameter, these crossings anticipate the actual cycle's zero-crossings, getting you into the move earlier.
Cycle Phase Interpretation
Both lines oscillate around zero. They represent the phase and momentum of the dominant cycle, not absolute price targets. Use the crossings for timing, not the levels for price prediction.
Broadband Graceful Degradation
If the market stops cycling and enters a broadband noise or pure trend state, prediction accuracy degrades gracefully, and the Voss output simply reverts toward the standard bandpass filter line.
LIMITATIONS
Mistuning Penalty: The predictor relies on the "Period" matching the actual dominant cycle in the data. Mistuning by more than 30% degrades prediction accuracy significantly.
Noise Amplification: Setting "Predict" too high (e.g., > 5) requires a deep lookback history (Order > 15), which heavily amplifies noise in the feedback loop. Practical values are between 2 and 5.
Ringing: Setting the "Bandwidth" below 0.1 makes the filter highly selective. While smooth, it will "ring" excessively and respond very slowly to actual cycle changes.
Warmup Time: The bandpass filter needs approximately "Period" bars to stabilize. Signals immediately after the start of the chart are unreliable.
REFERENCES
Ehlers, J. F. "A Peek Into the Future." Technical Analysis of Stocks and Commodities, August 2019.
Voss, H. U. "Anticipating chaotic synchronization." Physical Review E, 61(5), 2000.
Ehlers, J. F. Cycle Analytics for Traders. Wiley, 2013.
Rigorous technical indicators for Pine Script 6 with O(1) streaming, defensible math, and proper initialization. Fully documented, implemented in C#, transcribed to Pine Script, and wrapped for Python.
คำจำกัดสิทธิ์ความรับผิดชอบ
ข้อมูลและบทความไม่ได้มีวัตถุประสงค์เพื่อก่อให้เกิดกิจกรรมทางการเงิน, การลงทุน, การซื้อขาย, ข้อเสนอแนะ หรือคำแนะนำประเภทอื่น ๆ ที่ให้หรือรับรองโดย TradingView อ่านเพิ่มเติมใน ข้อกำหนดการใช้งาน
Rigorous technical indicators for Pine Script 6 with O(1) streaming, defensible math, and proper initialization. Fully documented, implemented in C#, transcribed to Pine Script, and wrapped for Python.
คำจำกัดสิทธิ์ความรับผิดชอบ
ข้อมูลและบทความไม่ได้มีวัตถุประสงค์เพื่อก่อให้เกิดกิจกรรมทางการเงิน, การลงทุน, การซื้อขาย, ข้อเสนอแนะ หรือคำแนะนำประเภทอื่น ๆ ที่ให้หรือรับรองโดย TradingView อ่านเพิ่มเติมใน ข้อกำหนดการใช้งาน