Diese Strategie verwendet das Crossover von doppelten gleitenden Durchschnitten als Handelssignale, kombiniert mit ATR-Stopps für den Trend nach dem Handel.
Die Strategie verwendet hauptsächlich zwei Sätze von gleitenden Durchschnitten, um die Trendrichtung zu bestimmen. Der schnelle gleitende Durchschnitt hat eine Länge von 25 Tagen, und der langsame gleitende Durchschnitt hat eine Länge von 100 Tagen. Ein Kaufsignal wird erzeugt, wenn der schnelle MA über den langsamen MA überschreitet, und ein Verkaufssignal wird erzeugt, wenn er unterhalb des Kreuzes liegt.
Um einige falsche Signale auszufiltern, fügt die Strategie einen Crossover-Zähler hinzu, der CrossCount genannt wird.
Darüber hinaus verfügt die Strategie über einen Bestätigungsmechanismus, bei dem das Signal auch bestätigt wird, wenn der Preis nach dem ersten Signal zwischen den beiden gleitenden Durchschnitten wieder eintritt.
Nach dem Eintreten von Positionen verwendet die Strategie ATR, um Stop-Loss-Levels festzulegen. ATR misst den Kursschwankungsbereich über einen bestimmten Zeitraum, und hier wird sein 14x als Stop-Distanz verwendet. Das Stop-Level schwimmt entsprechend der Preisbewegung.
Die Strategie weist folgende Vorteile auf:
Durch die Verwendung von doppelten MA-Kreuzungen mit Filterung kann er starke Trendbewegungen effektiv erfassen und falsche Signale vermeiden.
Der Bestätigungsmechanismus verhindert, dass Sie durch falsche Ausbrüche gefälscht werden.
Der flüssige ATR-Stop-Loss hilft, Gewinne zu maximieren und gleichzeitig die Abzüge zu begrenzen.
Es hat nur wenige optimierbare Parameter und ist einfach umzusetzen.
Anwendbar auf allen Märkten, einschließlich Krypto- und traditioneller Vermögenswerte.
Kombiniert mehrere technische Indikatoren für die Robustheit.
Zu den wichtigsten Risiken der Strategie gehören:
Häufige MA-Kreuzungen während der Bereichsbegrenzung können zu mehreren Verlusten führen.
Eine unsachgemäße Einstellung der ATR-Parameter kann dazu führen, dass die Haltestellen zu breit oder zu eng sind.
Große Lücken können direkt zum Stoppen führen.
Auch wichtige Nachrichten, die zu einer enormen Volatilität führen, können Positionen stoppen.
Unzureichende MA-Parameter könnten zu fehlenden Trends oder zu vielen falschen Signalen führen.
Die jüngste Kursentwicklung kann ATR-Stopps überholt machen.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Optimieren Sie die MA-Parameter, um bessere Kombinationen zu finden, indem Sie verschiedene Zeiträume und gewichtete Durchschnitte testen.
Versuche verschiedene ATR-Perioden, um bessere Stoppdistanzen zu finden.
Fügen Sie zusätzliche Filter wie Volumenspitzen, Volatilitätsindikatoren hinzu, um die Signalqualität zu verbessern.
Verwenden Sie Trendindikatoren, um in unruhigen Märkten zu vermeiden.
Fügen Sie maschinelle Lernalgorithmen hinzu, um Parameter automatisch durch Backtesting zu optimieren.
Suchen Sie nach mehr Bestätigung in längeren Zeitrahmen, um kurzfristige Geräusche zu vermeiden.
Implementieren Sie regelmäßige Gewinnentnahmen, um profitable Positionen zu vergrößern.
Diese Strategie kombiniert doppelte MA-Kreuzungen, Trendfilterung, Bestätigung und dynamische ATR-Stopps für eine robuste Trendverfolgung.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("QuantCat Intraday Strategy (15M)", overlay=true) //MA's for basic signals, can experiment with these values fastEMA = sma(close, 25) slowEMA = sma(close, 100) //Parameters for validation of position lookback_value = 25 maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets //Amount of crosses on MA to filter out noise ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0 ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results crossCount = (ema25_crossover_sum <= maxNoCross) //Entries long agrLong = ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false //Entries short agrShort = ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false //ATR atrLkb = input(14, minval=1, title='ATR Stop Period') atrRes = input("15", title='ATR Resolution') atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb)) //Strategy longCondition = ((agrLong or consLong) == true) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = ((agrShort or consShort) == true) if (shortCondition) strategy.entry("Short", strategy.short) //Stop multiplier stopMult = 4 //horizontal stoplosses longStop = na longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] shortStop = na shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1] //Strategy exit functions strategy.exit("Long ATR Stop", "Long", stop=longStop) strategy.exit("Short ATR Stop", "Short", stop=shortStop) //Plots redgreen = (fastEMA > slowEMA) ? green : red p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) fill(p1, p2, color=redgreen) s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop') s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop') fill(p2, s1, color=red, transp=95) fill(p2, s2, color=red, transp=95)