Eine auf dem exponentiellen gleitenden Durchschnitt basierende Momentum-Crossover-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-23 14:18:26
Tags:

img

Übersicht

Diese Strategie bestimmt die Trendrichtung basierend auf der Kreuzung von EMA-Linien mit verschiedenen Perioden und erzeugt entsprechend lange und kurze Signale. Sie verwendet hauptsächlich zwei gleitende Durchschnitte - 10-Tage-EMA und 20-Tage-EMA. Wenn die 10-Tage-EMA unter die 20-Tage-EMA fällt, wird ein kurzes Signal ausgelöst. Wenn die 10-Tage-EMA über die 20-Tage-EMA fällt, wird ein langes Signal ausgelöst. Diese Strategie gehört zu mittelfristigen Handelsstrategien.

Strategieprinzipien

Die Strategie nutzt zwei EMA-Linien, darunter die 10-Tage-EMA und die 20-Tage-EMA. Die EMA-Linien können den Preistrend effektiv widerspiegeln. Wenn die kurzfristige EMA-Linie über die längerfristige EMA-Linie kreuzt, zeigt sie an, dass sich der Preistrend von Niedergang zu Aufstieg wandelt, was ein langes Signal ist. Wenn die kurzfristige EMA-Linie unter die längerfristige EMA-Linie kreuzt, zeigt sie an, dass sich der Preistrend von Aufstieg zu Abstieg wandelt, was ein kurzes Signal ist.

Die Strategie kombiniert auch die maximalen und minimalen Werte von Kursschwankungen, um einige Handelssignale zu filtern. Handelssignale werden erst ausgelöst, nachdem die Kursschwankungen ein bestimmtes Maß erreicht haben. Dies kann einige falsche Signale bis zu einem gewissen Grad filtern.

Insbesondere wird durch die Verfolgung der Zeit, in der die maximalen und minimalen Werte erreicht werden, beurteilt, ob sich ein Kurstrend gebildet hat.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die Verwendung von EMA-Linien zur Bestimmung der Trendrichtung kann Marktbewegungen effektiv verfolgen
  2. Durch die Kombination von EMA-Linien aus verschiedenen Perioden können mittelfristige Handelschancen erfasst werden
  3. Das Filtern von Signalen nach extremen Werten kann Lärm beseitigen und verpasste Handelschancen vermeiden
  4. Die Logik ist einfach und klar, leicht zu verstehen und zu ändern
  5. Die Parameter können für verschiedene Produkte und Handelspräferenzen angepasst werden und zeigen eine hohe Anpassungsfähigkeit

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Die EMA-Linien selbst haben einen Verzögerungseffekt und können kurzfristige Trendumkehrungen verpassen.
  2. Die Geräuschfilterung ist unvollkommen, einige falsche Trades können auftreten
  3. Die Parameter müssen entsprechend den unterschiedlichen Marktbedingungen angepasst werden.

Die Risiken können durch folgende Maßnahmen gemildert werden:

  1. Hinzufügen anderer Indikatoren zur Signalbestätigung, um Probleme mit der Verzögerung der EMA-Linie zu vermeiden
  2. Optimierung von Filterbedingungen für extreme Werte zur Verbesserung der Signalzuverlässigkeit
  3. Anpassung von Parametern auf der Grundlage von Backtest-Ergebnissen zur Optimierung der Strategie

Anweisungen zur Verbesserung

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Einbeziehung anderer technischer Indikatoren wie MACD und KD zur Verbesserung der Signalgenauigkeit
  2. Optimierung der EMA-Linienparameter für bestimmte Produkte
  3. Verfeinerung der extremen Wertparameter zur besseren Beurteilung von Preisschwankungen
  4. Hinzufügen von Stop-Loss-Mechanismen zur Kontrolle des maximalen Verlusts pro Handel
  5. Testen der Strategie auf verschiedenen Produkten zur Bewertung der Anpassungsfähigkeit

Zusammenfassung

Zusammenfassend ist diese EMA-Crossover-Strategie eine einfache und praktische Trendfolgestrategie. Sie verwendet EMA-Linien, um die Haupttrendrichtung zu bestimmen, kombiniert mit der Preisschwankungsfilterung für die Entscheidungsfindung.


/*backtest
start: 2024-01-15 00:00:00
end: 2024-01-22 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("PierceMAStrat", overlay=true)

lenMA0 = input(title="Length 0",defval=2)
lenMA1=input(title="Length 1",defval=10)
lenMA2=input(title="Length 2", defval=20)
lenMA3 = input(title = "Length3", defval =50)




emaLen0 = ema(close, lenMA0)
emaLen1 = ema(close, lenMA1)
emaLen2 = ema(close, lenMA2)
emaLen3 = ema(close, lenMA3)

    
ascent = if emaLen1[1] < emaLen1[0]
    true
else
    false
    
descent = if emaLen1[1] > emaLen1[0]
    true
else
    false
    
TimeSinceAscensionStart = if ascent == true
    barssince(descent == true)
else
    0
    

StartUp = if TimeSinceAscensionStart < 1
    true
else
    false

StartDown = if TimeSinceAscensionStart < 1
    false
else
    true


AscentBarCounter = barssince(StartUp == true)

DescentBarCounter = barssince(StartDown == true)

MaxAscent = if AscentBarCounter[1] > AscentBarCounter[0] and AscentBarCounter[1] > 10
    true
else
    false
    
MaxDescent = if DescentBarCounter[1] > DescentBarCounter[0] and DescentBarCounter[1] > 5
    true
else
    false
    
longCond = if crossover(emaLen1, emaLen2) and barssince(MaxDescent == true) > 3
    true
else
    false
shortCond = if crossunder(emaLen1, emaLen2) and barssince(MaxAscent == true) > 3
    true
else
    false


//longCond = (crossover(emaLen1, emaLen2) and (emaLen2 > emaLen3))
//shortCond = crossunder(emaLen1, emaLen2) and (emaLen2 < emaLen3)



if longCond == true
    strategy.entry("LONG", strategy.long)

if shortCond == true
    strategy.entry("SHORT", strategy.short)
    


plotshape(series=MaxAscent, title="MaximaReached", style=shape.triangledown, location=location.abovebar, color=green, text="MaximaReached", size=size.small)
plotshape(series=MaxDescent, title="MinimaReached", style=shape.triangleup, location=location.belowbar, color=red, text="MinimaReached", size=size.small)
//plotshape(series=StartUp, title="StartUp", style=shape.triangleup, location=location.belowbar, color=red, text="StartUp", size=size.tiny)
//plotshape(series=StartDown, title="StartDown", style=shape.triangleup, location=location.belowbar, color=green, text="StartDown", size=size.tiny)

//plotshape(series=(crossover(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=green, text="GBXO", size=size.small)
//plotshape(series=(crossover(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=orange, text="RBXO", size=size.small)
//plotshape(series=(crossover(emaLen1, emaLen2)), title="GRXOVER", style=shape.triangledown, location=location.abovebar, color=teal, text="GRXO", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen2)), title="GRXUNDER", style=shape.triangledown, location=location.abovebar, color=purple, text="GRXU", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=yellow, text="GBXU", size=size.small)
//plotshape(series=(crossunder(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=yellow, text="RBXU", size=size.small)
    
//plotshape(convergence, color=lime, style=shape.arrowup, text="CROSS")
plot(emaLen1, color=green, transp=0, linewidth=2)
plot(emaLen2, color=red, transp=30, linewidth=2)
plot(emaLen3, color=blue, transp=30, linewidth=2)



Mehr