MetaTrader4
De Hodrick-Prescott Filter: Voorspellen van Toekomstige Waarden in Trading
Auteur: gpwr
Een van de opvallende kenmerken van de Hodrick-Prescott filter is dat deze geen vertraging heeft. Het wordt berekend door de doelfunctie te minimaliseren:
F = Som((y[i] - x[i])^2, i=0..n-1) + lambda*Som((y[i+1]+y[i-1]-2*y[i])^2, i=1..n-2)
waarbij x[] de prijzen zijn en y[] de filterwaarden. Hieronder zie je een voorbeeld van het gedrag van de filter (zie het bijgevoegde bestand HP.mq4).
Als de Hodrick-Prescott filter de toekomst kan voorspellen, welke toekomstige waarden suggereert deze dan? Om deze vraag te beantwoorden, moeten we een digitaal laagfrequentiefilter vinden met een frequentieparameter die vergelijkbaar is met die van de Hodrick-Prescott filter, maar met waarden die direct zijn berekend op basis van de eerdere waarden van het "twin filter" zelf, dat wil zeggen:
y[i] = Som(a[k]*x[i-k], k=0..nx-1) - FIR filter
of
y[i] = Som(a[k]*x[i-k], k=0..nx-1) + Som(b[k]*y[i-k], k=1..ny) - IIR filter
Het is het beste om het "twin filter" te kiezen met de frequentie-onafhankelijke vertraging Тdel (constante groepsvertraging). IIR-filters zijn hiervoor niet geschikt. Voor FIR-filters geldt de voorwaarde voor een frequentie-onafhankelijke vertraging als volgt:
a[i] = +/-a[nx-1-i], i = 0..nx-1
Het eenvoudigste FIR-filter met constante vertraging is het Simple Moving Average (SMA):
y[i] = Som(x[i-k], k=0..nx-1)/nx
Als nx een oneven getal is, dan is Тdel = (nx-1)/2. Als we de waarden van de SMA-filter verschuiven naar het verleden met een aantal bars gelijk aan Тdel, dan komen de SMA-waarden overeen met die van de Hodrick-Prescott filter. De exacte wiskunde kan niet worden bereikt vanwege de significante verschillen in de frequentieparameters van de twee filters (zie de onderstaande grafiek):
Om de dichtstbijzijnde overeenstemming tussen de filterwaarden te bereiken, raad ik aan dat hun kanaalbreedtes vergelijkbaar zijn (bijvoorbeeld -6dB). De kanaalbreedte van -6dB voor de Hodrick-Prescott filter wordt als volgt berekend:
wc = 2*arcsin(0.5/lambda^0.25).
De kanaalbreedte van -6dB voor de SMA-filter wordt numeriek berekend via de volgende vergelijking:
|H(w)| = sin(nx*wc/2)/sin(wc/2)/nx = 0.5
De onderstaande grafiek vergelijkt de waarden van de twee filters met een vergelijkbare kanaalbreedte: rood - Hodrick-Prescott filter (FiltPer = 25), blauw - SMA (Periode = 15, Shift = -7). Merk op dat er geen SMA-gegevens zijn voor de laatste 7 bars, omdat deze de toekomstige prijzen moet kennen. Aan de andere kant toont de Hodrick-Prescott filter (rood) enkele waarden. Als de verschoven SMA de waarden van de Hodrick-Prescott filter herhaalt op de laatste 7 bars na het verschijnen van de toekomstige prijzen, wat zouden deze waarden dan kunnen zijn?
Voorspellingsalgoritmen:
De indicator biedt twee voorspellingsmethodes:
Methode 1:
Stel de SMA-lengte in op 3 en verschuif deze naar het verleden met 1 bar. Met deze lengte bestaat de verschoven SMA alleen niet voor de laatste bar (Bar = 0), omdat deze de waarde van de volgende toekomstige prijs Close[-1] nodig heeft.
Bereken de kanaalbreedte van de SMA-filter. Maak deze gelijk aan die van de Hodrick-Prescott filter. Vind lambda.
Bereken de waarde van de Hodrick-Prescott filter op de laatste bar HP[0] en neem aan dat SMA[0] met onbekende Close[-1] dezelfde waarde geeft.
Vind Close[-1] = 3*HP[0] - Close[0] - Close[1]
Verhoog de lengte van de SMA naar 5. Herhaal alle berekeningen en vind Close[-2] = 5*HP[0] - Close[-1] - Close[0] - Close[1] - Close[2]. Blijf doorgaan tot het opgegeven aantal toekomstige FutBars-prijzen is berekend.
Methode 2:
Stel de SMA-lengte in op 2*FutBars+1 en verschuif de SMA naar het verleden met FutBars.
Bereken de kanaalbreedte van de SMA-filter. Maak deze gelijk aan die van de Hodrick-Prescott filter. Vind lambda.
Bereken de waarden van de Hodrick-Prescott filter op de laatste FutBars en neem aan dat de SMA zich op een vergelijkbare manier gedraagt wanneer nieuwe prijzen verschijnen.
Vind Close[-1] = (2*FutBars+1)*HP[FutBars-1] - Som(Close[i], i=0..2*FutBars-1), Close[-2] = (2*FutBars+1)*HP[FutBars-2] - Som(Close[i], i=-1..2*FutBars-2), enz.
De indicator heeft de volgende instellingen:
Methode - voorspellingsmethode
LastBar - aantal van de laatste bar om voorspellingen te controleren op de bestaande prijzen (LastBar >= 0)
PastBars - aantal vorige bars waarvoor de Hodrick-Prescott filter wordt berekend (hoe meer, hoe beter, of in ieder geval PastBars > 2*FutBars)
FutBars - aantal voorspelde toekomstige waarden
De indicator markeert voorspelde waarden in het rood. Methode 1 wordt gebruikt in het onderstaande voorbeeld:
Methode 2:
De tweede methode is nauwkeuriger, maar heeft vaak grote pieken voor de eerste voorspelde prijs. De beschreven voorspellingsmethode kan worden verbeterd door te zoeken naar het FIR-filter met de frequentieparameter die dichter bij de Hodrick-Prescott filter ligt. Je kunt bijvoorbeeld Hanning, Blackman, Kaiser en andere filters met constante vertraging proberen in plaats van SMA.
De auteur is dankbaar aan gebruiker Korey voor de originele Hodrick-Prescott filterindicator die is gepost in de volgende Forumsectie (in het Russisch):
https://www.mql5.com/ru/forum/113677/page2
2009.01.15