
Die Strategie nutzt die Überschneidung von zwei Bewegenden Durchschnitten als Handelssignal und kombiniert ATR-Stopps für Trend-Tracking-Handlungen. Die Kernidee ist, bei einem Überschreiten des langfristigen Bewegenden Durchschnitts auf dem kurzfristigen Bewegenden Durchschnitt zu überschreiten und beim Unterbrechen zu brechen, während ATR verwendet wird, um Stop-Loss-Positionen und dynamisch trailing Stops einzurichten.
Die Strategie beurteilt die Richtung des Trends hauptsächlich anhand von zwei Gruppen von Moving Averages: Fast Moving Averages mit einer Länge von 25 Tagen und Slow Moving Averages mit einer Länge von 100 Tagen. Ein Kaufsignal wird erzeugt, wenn der schnelle Moving Average über dem langsamen Moving Average überquert wird.
Die Strategie fügt einen CrossCount hinzu, um einige der Falschsignale zu filtern. Der CrossCount wird nur ausgelöst, wenn der Rapid Moving Average während des Lookbacks (default 25 Tage) weniger als maxNoCross (default 10) hat.
Zusätzlich wurde ein Bestätigungsmechanismus hinzugefügt, der das Signal bestätigt, wenn der Preis nach dem ersten Signal zwischen zwei Moving Averages zurückkehrt.
Nach dem Eintritt verwendet die Strategie den ATR-Indikator, um eine Stop-Loss-Distanz zu setzen. Der ATR misst die Bandbreite der Preisfluktuation in den letzten bestimmten Perioden. Hier wird die Stop-Loss-Distanz mit dem 14-fachen des ATR eingestellt.
Die Strategie hat folgende Vorteile:
Durch die Verwendung von doppelten gleitenden Durchschnitten in Kombination mit einem Querfiltermechanismus können falsche Signale effektiv gefiltert und stärkere Trends erfasst werden.
Es wurde ein weiterer Schritt unternommen, um die Möglichkeit zu vermeiden, dass ein falscher Durchbruch ausgelöscht wird.
Mit der ATR-Floating-Tracking-Stop-Loss kann ein Maximum an Gewinn gesichert werden, um eine zu große Rücknahme zu verhindern.
Die Parameter für die Optimierung sind geringer und einfacher zu implementieren.
Die Anwendung ist in einer Vielzahl von Märkten möglich, einschließlich digitaler Währungen und traditioneller Basismärkte.
Die Strategie wird durch die Kombination verschiedener Indikatoren entwickelt, die die Strategie stabilisieren.
Diese Strategie birgt folgende Risiken:
In der Phase der Erschütterung können sich die Moving Averages häufig kreuzen, was zu mehrfachen Verlusten führen kann.
Eine falsche Einstellung der ATR-Parameter kann zu einer zu lockeren oder zu engen Stoppschädigung führen.
Eine starke Überschneidung oder ein großer Gap kann den Stopp direkt auslösen.
Ein unerwartetes Ereignis, das zu starken Preisschwankungen führt, kann auch zu direkten Verlusten führen.
Unvernünftige Moving Average-Parameter können zu verpassten Trends oder zu vielen falschen Signalen führen.
Eine Veränderung der jüngsten Preisschwankungen könnte dazu führen, dass die ATR-Stopp-Loss-Distanz nicht angepasst wird.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Optimierung der Moving Average-Parameter, um eine geeignete Kombination zu finden. Verschiedene Periodensätze und Gewichtung von Moving Averages können getestet werden.
Verschiedene ATR-Zyklusparameter werden getestet, um eine bessere Stoppdistanz zu finden.
Zusätzliche Filterbedingungen, wie z. B. die Vergrößerung der Transaktionsmenge, die Erschütterungskennzahlen usw., werden hinzugefügt, um die Signalqualität zu verbessern.
Es ist wichtig, dass man sich mit den Indikatoren für Trends auseinandersetzt, damit man nicht in den Schock geraten ist.
Hinzufügen von Machine-Learning-Algorithmen zur automatischen Optimierung der Parameterkombinationen durch Training mit historischen Daten.
Suchen Sie nach weiteren Bestätigungen in den Großdiagrammen und lassen Sie sich nicht von dem Geräusch der Kurzstrecken täuschen.
Setzen Sie die Gewinn-Positions-Regel und sperren Sie die Gewinne schrittweise ein.
Diese Strategie integriert die Verwendung von mehreren technischen Indikatoren wie Doppel-Moving-Average-Kreuzung, Trendfilterung, Bestätigungsmechanismen und ATR-Dynamische Stop-Loss. Es gibt noch Raum für Verbesserungen in Bezug auf die Optimierung von Parametern und die Risikokontrolle, aber die Handelsidee ist einfach und klar, und es ist leicht zu replizieren, eine robustere Trendverfolgungsstrategie.
/*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)