Die Ressourcen sind geladen. Beförderung...

Zweifelhafte schwebende durchschnittliche Crossover-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-02 14:21:24
Tags:

img

Übersicht

Diese Strategie verwendet das Crossover von doppelten gleitenden Durchschnitten als Handelssignale, kombiniert mit ATR-Stopps für den Trend nach dem Handel.

Strategie Logik

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.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Durch die Verwendung von doppelten MA-Kreuzungen mit Filterung kann er starke Trendbewegungen effektiv erfassen und falsche Signale vermeiden.

  2. Der Bestätigungsmechanismus verhindert, dass Sie durch falsche Ausbrüche gefälscht werden.

  3. Der flüssige ATR-Stop-Loss hilft, Gewinne zu maximieren und gleichzeitig die Abzüge zu begrenzen.

  4. Es hat nur wenige optimierbare Parameter und ist einfach umzusetzen.

  5. Anwendbar auf allen Märkten, einschließlich Krypto- und traditioneller Vermögenswerte.

  6. Kombiniert mehrere technische Indikatoren für die Robustheit.

Risikoanalyse

Zu den wichtigsten Risiken der Strategie gehören:

  1. Häufige MA-Kreuzungen während der Bereichsbegrenzung können zu mehreren Verlusten führen.

  2. Eine unsachgemäße Einstellung der ATR-Parameter kann dazu führen, dass die Haltestellen zu breit oder zu eng sind.

  3. Große Lücken können direkt zum Stoppen führen.

  4. Auch wichtige Nachrichten, die zu einer enormen Volatilität führen, können Positionen stoppen.

  5. Unzureichende MA-Parameter könnten zu fehlenden Trends oder zu vielen falschen Signalen führen.

  6. Die jüngste Kursentwicklung kann ATR-Stopps überholt machen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Optimieren Sie die MA-Parameter, um bessere Kombinationen zu finden, indem Sie verschiedene Zeiträume und gewichtete Durchschnitte testen.

  2. Versuche verschiedene ATR-Perioden, um bessere Stoppdistanzen zu finden.

  3. Fügen Sie zusätzliche Filter wie Volumenspitzen, Volatilitätsindikatoren hinzu, um die Signalqualität zu verbessern.

  4. Verwenden Sie Trendindikatoren, um in unruhigen Märkten zu vermeiden.

  5. Fügen Sie maschinelle Lernalgorithmen hinzu, um Parameter automatisch durch Backtesting zu optimieren.

  6. Suchen Sie nach mehr Bestätigung in längeren Zeitrahmen, um kurzfristige Geräusche zu vermeiden.

  7. Implementieren Sie regelmäßige Gewinnentnahmen, um profitable Positionen zu vergrößern.

Zusammenfassung

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)





    




Mehr