Diese Strategie kombiniert Hull Moving Average und Kalman Filter, um Preistrends zu identifizieren und zu verfolgen, die zu Trend-Tracking-Strategien gehören.
Die Strategie verwendet den 24-Perioden-Hull Moving Average (hma) und den 24-Perioden-Triple Hull Moving Average (hma3) zur Konstruktion von Handelssignalen.
Wenn HMA über HMA3 geht, wird ein Kaufsignal erzeugt.
Kalman-Filter ist standardmäßig deaktiviert. Wenn aktiviert, glättet es hma und hma3, um übermäßiges Rauschen zu filtern und die Signalqualität zu verbessern.
Kalman-Filter beseitigt durch Vorhersage und Korrektur Schritte zufälliges Rauschen aus Signalen. Die Differenz zwischen jeder Messung und der letzten Vorhersage wird als Korrekturpunkt behandelt, um die nächste Messung genauer vorherzusagen. Durch Wiederholung von Vorhersage und Korrektur kann die Wirkung von Rauschen allmählich reduziert werden, um das Signal zu glätten.
Diese Strategie nutzt den Kalman-Filter, um die Stabilität der gleitenden Durchschnittsstrategien zu verbessern, indem sie zufällige Schwankungen herausfiltert und anhaltende Trends verfolgt.
Das System mit zwei gleitenden Durchschnitten kann im Vergleich zu einem einzigen gleitenden Durchschnitt dauerhafte Trends besser erkennen.
Der gleitende Durchschnitt von Hull legt durch eine gewichtete Berechnung mehr Gewicht auf die jüngsten Preise, wodurch er bei der Erfassung von Kursänderungen empfindlicher ist.
Kalman-Filter können zufällige Geräusche aus Signalen effektiv filtern, falsche Signale reduzieren und die Signalqualität verbessern.
Anpassbare Parameter wie Periode und Kalman-Filtergewinn ermöglichen es der Strategie, sich an unterschiedliche Marktbedingungen anzupassen.
Durch die Anwendung von Querschnittstechniken werden dauerhafte Signale erzeugt, so daß man nicht durch übermäßige zufällige Schwankungen in die Irre geführt wird.
Die visuelle Schnittstelle zeigt für einfache Bedienung die Signale und den Trendstatus intuitiv an.
Doppel gleitende Durchschnitte sind anfällig für falsche Signale rund um Trendwendepunkte und sind nicht in der Lage, Umkehrungen rechtzeitig zu erfassen.
Die Verzögerung der gleitenden Durchschnittswerte kann Gelegenheiten für schnelle Preisumkehrungen verpassen.
Nicht geeignet für stark schwankende Märkte, sollte während turbulenter Phasen vermieden werden.
Kalman-Filterparameter könnten die Strategiewirkung beeinträchtigen.
Längere Perioden haben eine langsame Reaktion, während kürzere Perioden anfällig für Lärm sind.
Die nicht festgelegten langen/kurzen Haltungszeiten führen zu Leerlaufzeiten ohne Positionen, was die Effizienz der Kapitalverwertung verringert.
Versuchen Sie adaptive gleitende Durchschnitte, die die Parameter dynamisch optimieren, basierend auf der Volatilität.
Um den Handel während unruhiger Märkte zu vermeiden und nur nach offensichtlichen Trends zu handeln, müssen Volatilitätsmetriken eingeschlossen werden.
Stellen Sie einen Stop-Loss ein, um Verluste zu begrenzen und die Risikokontrolle zu verbessern.
Optimieren Sie die Kalman-Filterparameter, um die Nachweissensitivität und den Geräuschfilterstand auszugleichen.
Bestätigen Sie die Signalgültigkeit mit anderen Indikatoren wie Volumen, Bollinger Bands für die Trendbeständigkeit.
Maschinelles Lernen nutzen, um Parameter zu trainieren und die Robustheit und Anpassungsfähigkeit der Strategie zu verbessern.
Diese Strategie identifiziert dauerhafte Trends und verbessert die Signalqualität durch doppelte Hull-MAs und Kalman-Filter. Beachten Sie Parameteroptimierung, Marktanpassungsfähigkeit und Risikokontrolle für stetige Gewinne. Weitere Verbesserungen können durch maschinelles Lernen und quantitative Analyse erzielt werden.
/*backtest start: 2022-10-25 00:00:00 end: 2023-10-31 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Hull Trend with Kahlman Strategy Backtest", shorttitle="HMA-Kahlman Trend Strat", overlay=true) src = input(hl2, "Price Data") length = input(24, "Lookback") showcross = input(true, "Show cross over/under") gain = input(10000, "Gain") k = input(true, "Use Kahlman") hma(_src, _length) => wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length))) hma3(_src, _length) => p = length/2 wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p) kahlman(x, g) => kf = 0.0 dk = x - nz(kf[1], x) smooth = nz(kf[1],x)+dk*sqrt((g/10000)*2) velo = 0.0 velo := nz(velo[1],0) + ((g/10000)*dk) kf := smooth+velo a = k ? kahlman(hma(src, length), gain) : hma(src, length) b = k ? kahlman(hma3(src, length), gain) : hma3(src, length) c = b > a ? color.lime : color.red crossdn = a > b and a[1] < b[1] crossup = b > a and b[1] < a[1] p1 = plot(a,color=c,linewidth=1,transp=75) p2 = plot(b,color=c,linewidth=1,transp=75) fill(p1,p2,color=c,transp=55) plotshape(showcross and crossdn ? a : na, location=location.absolute, style=shape.labeldown, color=color.red, size=size.tiny, text="S", textcolor=color.white, transp=0, offset=-1) plotshape(showcross and crossup ? a : na, location=location.absolute, style=shape.labelup, color=color.green, size=size.tiny, text="B", textcolor=color.white, transp=0, offset=-1) longCondition = crossup if (longCondition) strategy.entry("LE", strategy.long) shortCondition = crossdn if (shortCondition) strategy.entry("SE", strategy.short)