OPEN-SOURCE SCRIPT

Hodrick-Prescott Extrapolation of Price [Loxx]

Hodrick-Prescott Extrapolation of Price [Loxx] is a Hodrick-Prescott filter used to extrapolate price.

The distinctive feature of the Hodrick-Prescott filter is that it does not delay. It is calculated by minimizing the objective function.

F = Sum((y(i) - x(i))^2,i=0..n-1) + lambda*Sum((y(i+1)+y(i-1)-2*y(i))^2,i=1..n-2)

where x() - prices, y() - filter values.

If the Hodrick-Prescott filter sees the future, then what future values does it suggest? To answer this question, we should find the digital low-frequency filter with the frequency parameter similar to the Hodrick-Prescott filter's one but with the values calculated directly using the past values of the "twin filter" itself, i.e.

y(i) = Sum(a(k)*x(i-k),k=0..nx-1) - FIR filter

or

y(i) = Sum(a(k)*x(i-k),k=0..nx-1) + Sum(b(k)*y(i-k),k=1..ny) - IIR filter

It is better to select the "twin filter" having the frequency-independent delay Тdel (constant group delay). IIR filters are not suitable. For FIR filters, the condition for a frequency-independent delay is as follows:

a(i) = +/-a(nx-1-i), i = 0..nx-1

The simplest FIR filter with constant delay is Simple Moving Average (SMA):

y(i) = Sum(x(i-k),k=0..nx-1)/nx

In case nx is an odd number, Тdel = (nx-1)/2. If we shift the values of SMA filter to the past by the amount of bars equal to Тdel, SMA values coincide with the Hodrick-Prescott filter ones. The exact math cannot be achieved due to the significant differences in the frequency parameters of the two filters.

To achieve the closest match between the filter values, I recommend their channel widths to be similar (for example, -6dB). The Hodrick-Prescott filter's channel width of -6dB is calculated as follows:

wc = 2*arcsin(0.5/lambda^0.25).

The channel width of -6dB for the SMA filter is calculated by numerical computing via the following equation:

|H(w)| = sin(nx*wc/2)/sin(wc/2)/nx = 0.5

Prediction algorithms:

The indicator features the two prediction methods:

Metod 1:
1. Set SMA length to 3 and shift it to the past by 1 bar. With such a length, the shifted SMA does not exist only for the last bar (Bar = 0), since it needs the value of the next future price Close(-1).
2. Calculate SMA filer's channel width. Equal it to the Hodrick-Prescott filter's one. Find lambda.
3. Calculate Hodrick-Prescott filter value at the last bar HP(0) and assume that SMA(0) with unknown Close(-1) gives the same value.
4. Find Close(-1) = 3*HP(0) - Close(0) - Close(1)
5. Increase the length of SMA to 5. Repeat all calculations and find Close(-2) = 5*HP(0) - Close(-1) - Close(0) - Close(1) - Close(2). Continue till the specified amount of future FutBars prices is calculated.

Method 2:
1. Set SMA length equal to 2*FutBars+1 and shift SMA to the past by FutBars
2. Calculate SMA filer's channel width. Equal it to the Hodrick-Prescott filter's one. Find lambda.
3. Calculate Hodrick-Prescott filter values at the last FutBars and assume that SMA behaves similarly when new prices appear.
4. Find Close(-1) = (2*FutBars+1)*HP(FutBars-1) - Sum(Close(i),i=0..2*FutBars-1), Close(-2) = (2*FutBars+1)*HP(FutBars-2) - Sum(Close(i),i=-1..2*FutBars-2), etc.

The indicator features the following inputs:
  • Method - prediction method
  • Last Bar - number of the last bar to check predictions on the existing prices (LastBar >= 0)
  • Past Bars - amount of previous bars the Hodrick-Prescott filter is calculated for (the more, the better, or at least PastBars>2*FutBars)
  • Future Bars - amount of predicted future values


The second method is more accurate but often has large spikes of the first predicted price. For our purposes here, this price has been filtered from being displayed in the chart. This is why method two starts its prediction 2 bars later than method 1. The described prediction method can be improved by searching for the FIR filter with the frequency parameter closer to the Hodrick-Prescott filter. For example, you may try Hanning, Blackman, Kaiser, and other filters with constant delay instead of SMA.

Related indicators

Itakura-Saito Autoregressive Extrapolation of Price [Loxx]
Itakura-Saito Autoregressive Extrapolation of Price [Loxx]


Helme-Nikias Weighted Burg AR-SE Extra. of Price [Loxx]
Helme-Nikias Weighted Burg AR-SE Extra. of Price [Loxx]


Weighted Burg AR Spectral Estimate Extrapolation of Price [Loxx]
Weighted Burg AR Spectral Estimate Extrapolation of Price [Loxx]


Levinson-Durbin Autocorrelation Extrapolation of Price [Loxx]
Levinson-Durbin Autocorrelation Extrapolation of Price [Loxx]


Fourier Extrapolator of Price w/ Projection Forecast [Loxx]
Fourier Extrapolator of Price w/ Projection Forecast [Loxx]



estimateextrapolationextrapolatorfirfilterforecastforecastinghodrickprescottpredictpredictionsmaTrend Analysis

Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in publication is governed by House rules. You can favorite it to use it on a chart.

Want to use this script on a chart?


Public Telegram Group, t.me/algxtrading_public

VIP Membership Info: patreon.com/algxtrading/membership
Also on:

Disclaimer