Der Hull Moving Average (HMA) ist ein technischer Indikator, der von Alan Hull entwickelt wurde, um die Verzögerung traditioneller gleitender Durchschnitte zu reduzieren. Die Strategie verwendet zwei HMA mit unterschiedlichen Perioden. Ein Kaufsignal wird erzeugt, wenn der kürzere Zeitraum HMA über den längeren Zeitraum HMA kreuzt, und ein Verkaufssignal wird erzeugt, wenn das Gegenteil geschieht.
Die HMA wird wie folgt berechnet:
Im Vergleich zum einfachen gleitenden Durchschnitt und dem gewichteten gleitenden Durchschnitt hat der Hull-gleitende Durchschnitt eine geringere Verzögerung, so dass er schneller auf Kursänderungen reagieren kann und die Reaktionsfähigkeit der Strategie verbessert.
Durch die Verwendung des Crossovers von zwei HMAs mit unterschiedlichen Perioden zur Erzeugung von Signalen können viele Geräusche und falsche Signale effektiv ausfiltert werden, wodurch die Zuverlässigkeit der Signale erhöht wird.
Durch die Anpassung der Zeitrahmenparameter der HMAs kann die Strategie an verschiedene Märkte und Handelsinstrumente angepasst werden.
Der Hull Moving Average ist ein Rückstandsindikator, der in den frühen Phasen einer Trendumkehr falsche Signale erzeugen kann.
Eine unangemessene Parameterwahl kann zu einer schlechten Strategieleistung führen, wenn der Zeitraum zu lang ist, wird die Strategie nur langsam reagieren, wenn der Zeitraum zu kurz ist, kann dies zu übermäßigen falschen Signalen führen.
Wie alle Strategien, die auf einem einzigen Indikator basieren, kann diese Strategie in seitlichen Märkten möglicherweise nicht gut abschneiden und mehr falsche Signale generieren und Trades verlieren.
Es sollte in Erwägung gezogen werden, andere technische Indikatoren oder grundlegende Faktoren als Filter einzuführen, z. B. Handelsvolumen, Trendindikatoren usw., um die Gültigkeit der HMA-Crossover-Signale weiter zu bestätigen.
Für die Parameteroptimierung können Methoden wie genetische Algorithmen und Rastersuche verwendet werden, um die optimale Parameterkombination auf historischen Daten zu finden, die am besten für den aktuellen Markt geeignet ist.
Einbeziehung von Stop-Loss- und Take-Profit-Mechanismen in die Strategie zur Kontrolle von Risiko und Rendite jedes Handels.
Wenn man Indikatoren einführt, um Markttrends zu beurteilen, kann man in Trendmärkten handeln und seitliche Märkte vermeiden.
Die Hull Moving Average Crossover-Strategie ist eine einfache und einfach zu bedienende Handelsstrategie. Mit der schnellen Reaktionscharakteristik von HMA kann sie Preisänderungen rechtzeitig erfassen. Wie alle Strategien hat sie jedoch auch ihre Grenzen und ihre Leistung wird durch Markttypen und Parameterwahl beeinflusst. In der Praxis kann sie mit anderen Analysemethoden kombiniert werden, um die Signale weiter zu bestätigen. Gleichzeitig sind angemessene Risikokontrollmaßnahmen wie Stop-Loss und Take-Profit, Positionsmanagement usw. auch unverzichtbare Teile für den stabilen Betrieb der Strategie.
/*backtest start: 2023-03-16 00:00:00 end: 2024-03-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //Basic Hull Ma Pack tinkered by InSilico strategy("RKTD BETA - Hull Suite by InSilico", overlay=true) //INPUT src = input(close, title="Source") modeSwitch = input("Ehma", title="Hull Variation", options=["Hma", "Thma", "Ehma"]) length = input(200, title="Length(180-200 for floating S/R , 55 for swing entry)") lengthMult = input(1.0, title="Length multiplier (Used to view higher timeframes with straight band)") useHtf = input(false, title="Show Hull MA from X timeframe? (good for scalping)") htf = input("240", title="Higher timeframe", type=input.resolution) switchColor = input(true, "Color Hull according to trend?") candleCol = input(false,title="Color candles based on Hull's Trend?") visualSwitch = input(true, title="Show as a Band?") thicknesSwitch = input(1, title="Line Thickness") transpSwitch = input(40, title="Band Transparency",step=5) // Alert Messages longAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "long", "orderType": "market", "close":true}' shortAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "short", "orderType": "market", "close":true}' //FUNCTIONS //HMA HMA(_src, _length) => wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length))) //EHMA EHMA(_src, _length) => ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length))) //THMA THMA(_src, _length) => wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length) //SWITCH Mode(modeSwitch, src, len) => modeSwitch == "Hma" ? HMA(src, len) : modeSwitch == "Ehma" ? EHMA(src, len) : modeSwitch == "Thma" ? THMA(src, len/2) : na //OUT _hull = Mode(modeSwitch, src, int(length * lengthMult)) HULL = useHtf ? security(syminfo.ticker, htf, _hull) : _hull MHULL = HULL[0] SHULL = HULL[2] //COLOR hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800 //PLOT ///< Frame Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) alertcondition(crossover(MHULL, SHULL), title="Hull trending up.", message="Hull trending up.") alertcondition(crossover(SHULL, MHULL), title="Hull trending down.", message="Hull trending down.") ///< Ending Filler fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) ///BARCOLOR barcolor(color = candleCol ? (switchColor ? hullColor : na) : na) // Define Buy and Sell Conditions based on crossovers buyCondition = crossover(MHULL, SHULL) sellCondition = crossunder(MHULL, SHULL) // Plotting the Hull Moving Average (HMA) plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch) plot(SHULL, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=transpSwitch) fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) // Execute Strategy based on Buy and Sell Conditions strategy.entry("Buy", strategy.long, when=buyCondition, alert_message=longAlertMessage) strategy.entry("Sell", strategy.short, when=sellCondition, alert_message=shortAlertMessage) // Additional elements like bar coloring remain unchanged barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)