Die Strategie zielt darauf ab, kurzfristige Forex-Trends zu erfassen, indem EMA-Crossover und RSI als Handelssignale verwendet werden, mit ADX-Filter, um Trades einzugeben, und Trailing Stop Loss, um Gewinne zu erzielen.
Die Strategie basiert auf folgenden Indikatoren und Bedingungen zur Erzeugung von Handelssignalen:
Eintrittssignale:
Ausfahrtssignale:
Die Strategie kombiniert EMA-Crossover, RSI-Überkauf/Überverkauf und ADX-Trendstärke, um solide Einstiegsregeln zu schaffen.
Die Strategie weist folgende Vorteile auf:
EMA-Crossover für Trendrichtung. Aufwärtskreuz deutet aufwärtstrend und nach untenkreuzes Abwärtstrend an. Kann Trendveränderungen erkennen.
Der RSI-Anstieg filtert einige falsche Breakout-Signale aus. Überverkaufte/Überkaufte Zonen deuten auf kurzfristige Rückgänge hin und vermeiden unnötige Eintritte in den Bereich.
ADX für die Gewährleistung der tatsächlichen Existenz des Trends.
Die Verzögerung des Stop-Loss und der Gewinnspanne lassen den Gewinn laufen, während das Risiko kontrolliert wird. 150 Pips Verzögerung und 400 Pips Gewinnziel fahren kontinuierlich den Trend.
Die Schließung aller Positionen vor Wochenende vermeidet Wochenendrisiken und fördert die Regelmäßigkeit des Handels.
Die Strategie birgt außerdem folgende Risiken:
EMA-Crossover-Systeme sind anfällig für falsche Breakout-Signale, was zu Verlusten führt.
Der RSI identifiziert nur überkaufte/überverkaufte Niveaus, nicht Trendumkehrungen.
ADX beurteilt nur die Existenz des Trends, der Eintrittszeitpunkt kann ausgeschaltet sein.
Festgelegte Stop-Loss- und Take-Profit-Niveaus können sich möglicherweise nicht an Marktveränderungen anpassen.
Ein erzwungener Wochenschluss könnte gute Trendchancen verpassen.
Die Strategie kann in folgenden Aspekten optimiert werden:
Testen Sie verschiedene EMA-Kombinationen, um optimale Längen zu finden.
Versuchen Sie verschiedene RSI-Parameter oder kombinieren Sie sie mit KDJ, um ein besseres Überkauf-/Überverkaufsgut zu ermitteln.
Optimierung der ADX-Parameter für eine geeignete Filterung und eine höhere Eingangsqualität.
Testkombination von festen Stopps und ATR-basiertem dynamischem Nachfahren.
Zusätzliche Einträge für Intraday-Breakout-Pullbacks nach der Trendbestätigung, z. B. für kürzere Zeitrahmen.
Einführung einer auf Volatilität basierenden Positionsgröße für eine dynamische Anpassung an die Marktvolatilität.
Erforschung von Techniken des maschinellen Lernens zur automatischen Optimierung von Anpassungsparametern.
Zusammenfassend handelt es sich um eine einfache Trend-Folge-Strategie, die die Trendrichtung mit EMA-Crossover identifiziert, mit RSI filtert, einen Trend mit ADX erfordert und einen Trailing-Stop für den Gewinn.
/*backtest start: 2022-09-21 00:00:00 end: 2023-09-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Hucklekiwi Pip - HLHB Trend-Catcher System", shorttitle="HLHB TCS", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // ----------------------------------------------------------------------------- // HLHB Trend-Catcher System as described on BabyPips.com // // Strategy Author: Hucklekiwi Pip // Coded By: Backtest Rookies // ----------------------------------------------------------------------------- // // Refs: // - Original System: https://www.babypips.com/trading/forex-hlhb-system-explained // - Updated System: https://www.babypips.com/trading/forex-hlhb-system-20190311 // // // Description (From Hucklekiwi Pip) // // The HLHB System simply aims to catch short-term forex trends. // It is patterned after the Amazing Crossover System that Robopip once backtested. // In fact, it was one of his highest-scoring mechanical systems in 2014! // The system can be applied to any pair, but since I’m into major pairs, // I’m applying it to the 1-hour charts of EUR/USD and GBP/USD. // ----------------------------------------------------------------------------- // STRATEGY REQUIREMENTS // ----------------------------------------------------------------------------- // // Setup // ----- // - EUR/USD 1-hour chart // - GBP/USD 1-hour chart // - 5 EMA: blue line // - 10 EMA: red line // - RSI (10) applied to the median price (HL/2) // - ADX (14) // // Entry // ----- // - BUY when the 5 EMA crosses above the 10 EMA from underneath and the RSI // crosses above the 50.0 mark from the bottom. // - SELL when the 5 EMA crosses below the 10 EMA from the top and the RSI // crosses below the 50.0 mark from the top. // - Make sure that the RSI did cross 50.0 from the top or bottom and not just // ranging tightly around the level. // - ADX > 25 for Buy and Sells // // Exit // ---- // - Use a 50-pip trailing stop and a 200-pip profit target. This increases the // chances of the system riding longer trends. // - Close the trade when a new signal materializes. // - Close all trades by the end of the week. // // ----------------------------------------------------------------------------- // Strategy Varaibles // ------------------- ema_fast_len = input(5, title='Fast EMA Length') ema_slow_len = input(10 , title='Slow EMA Length') rsi_len = input(10, title='Slow EMA Length') session_end_hour = input(16, minval=0, maxval=23, title='Weekly Session End (Hour)') session_end_minute = input(0, minval=0, maxval=59, title='Weekly Session End (Minute)') // Targets taken from the update post which states 150 & 400 instead of 50 and 200. profit_target = input(400, title='Profit Target (Pips/Points)') trailing_stop_dist = input(150, title='Trailing Stop Distance (Pips/Points)') adx_filt = input(true, title='User ADX Filter') adx_min = input(25, minval=0, title='Minimum ADX Level') adx_len = input(14, title="ADX Smoothing") di_len = input(14, title="DI Length") // Setup the Indicators ema_fast = ema(close, ema_fast_len) ema_slow = ema(close, ema_slow_len) rsi_ind = rsi(close, rsi_len) // ADX adx_dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx_adx(dilen, adxlen) => [plus, minus] = adx_dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [adx_sig, adx_plus, adx_minus] = adx_adx(di_len, adx_len) // Strategy Logic ema_long_cross = crossover(ema_fast, ema_slow) ema_short_cross = crossunder(ema_fast, ema_slow) rsi_long_cross = crossover(rsi_ind, 50) rsi_short_cross = crossunder(rsi_ind, 50) adx_check = adx_filt ? adx_sig >= adx_min : true longCondition = ema_long_cross and rsi_long_cross and adx_check if (longCondition) strategy.entry("Long", strategy.long) shortCondition = ema_short_cross and rsi_short_cross and adx_check if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("SL/TP", "Long", profit=profit_target, loss=trailing_stop_dist, trail_points=trailing_stop_dist) strategy.exit("SL/TP", "Short", profit=profit_target, loss=trailing_stop_dist, trail_points=trailing_stop_dist) // Friday = 6 // If we miss the hour for some reason (due to strange timeframe), then close immediately // Else if we are on the closing hour, then check to see if we are on or passed the close minute close_time = dayofweek == 6 ? hour[0] > session_end_hour ? true : hour[0] == session_end_hour ? minute[0] >= session_end_minute : false : false strategy.close_all(when=close_time) // Plotting plot(ema_fast, color=blue, title="Fast EMA") plot(ema_slow, color=red, title="Slow EMA") plotshape(rsi_long_cross, style=shape.triangleup, size=size.tiny, location=location.belowbar, color=green, title='RSI Long Cross Marker') plotshape(rsi_short_cross, style=shape.triangledown, size=size.tiny, location=location.abovebar, color=red, title='RSI Short Cross Marker') // ADX Filter Highlight bgcolor(adx_filt and adx_check ? orange : na, transp=90)