Zweifelhafte schwebende durchschnittliche Crossover-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-29 15:11:58
Tags:

img

Übersicht

Die Dual Moving Average Crossover Trading Strategie ist eine quantitative Handelsstrategie, die bewegliche Durchschnitts-Crossovers verwendet, um Ein- und Ausstiegssignale zu bestimmen.

Strategie Logik

Die Kernlogik dieser Strategie besteht darin, 2 gleitende Durchschnitte (10 Tage und 200 Tage) über 3 Zeitrahmen (180 Minuten, 60 Minuten, 120 Minuten) zu verfolgen. Wenn der schnellere gleitende Durchschnitt über den langsameren gleitenden Durchschnitt kreuzt, wird ein goldener Crossover generiert, was darauf hinweist, dass sich das Instrument in einem Aufwärtstrend befindet. Wenn der schnellere gleitende Durchschnitt unter dem langsameren kreuzt, wird ein Todeskrossover generiert, was auf einen Abwärtstrend hinweist.

Zunächst werden die 10-Tage- und 200-Tage- gleitenden Durchschnitte separat für die 180-minütigen und 60-minütigen Zeitrahmen berechnet. Wenn der 10-Tage-MA auf dem 180-minütigen Zeitrahmen über den 200-Tage-MA überschreitet, wird ein goldenes Crossover-Signal generiert. Wenn er darunter überschreitet, wird ein Todes-Crossover-Signal generiert. Dies liefert die Schnellzyklus-Handelssignale.

Als nächstes führt die Strategie den 200-Tage-MA auf dem 120-minütigen Zeitrahmen als kontrollierenden gleitenden Durchschnitt ein. Nur wenn Crossovers auf den 180/60-minütigen Zyklen stattfinden, wird durch Überprüfung, ob der 60-minütige 200-Tage-MA über oder unter dem 120-minütigen 200-Tage-MA liegt, entschieden, ob Trades platziert werden sollten, um falsche Signale auszufiltern.

Wenn beispielsweise ein goldener Crossover auf dem 180-minütigen Zyklus stattfindet, wird die Strategie nur lang gehen, wenn der 60-minütige 200-Tage-MA über dem 120-minütigen 200-Tage-MA liegt. Die Long-Position wird nur geöffnet, wenn diese Bedingung erfüllt ist. Umgekehrt, wenn der 60-minütige 200-Tage-MA unterhalb des 120-minütigen ist, wird keine Long-Position genommen.

Zusammenfassend lässt sich sagen, dass diese Strategie durch den Vergleich von gleitenden Durchschnittsverhältnissen über verschiedene Zeitrahmen hinweg mehrere Filterschichten erzeugt, um die Signalzuverlässigkeit zu verbessern, was sie zu einer gängigen Art von Filter-basierter Handelsstrategie macht.

Vorteile

  • Verbesserte Genauigkeit durch Multi-Timeframe-Bestätigung. Im Vergleich zu Single-Timeframe-Signalen reduziert die Verwendung von MAs von 180/60/120 Minuten die falschen Signale drastisch und verbessert die Qualität der Handelssignale.

  • Im Gegensatz zu Hochfrequenz-Strategien handelt diese Strategie seltener und vermeidet die Notwendigkeit, den Markt kontinuierlich zu überwachen.

  • Einfach und leicht verständlich. Da nur einfache gleitende Durchschnitte ohne komplexe Logik verwendet werden, hat diese Strategie eine geringe Eintrittsbarriere und ist für Anfänger leicht verständlich.

  • Optimierbar über Perioden und Parameter hinweg. Die verwendeten MA-Typen und -Perioden sind einstellbar. Verschiedene Parametermengen können für verschiedene Produkte und Marktregime getestet werden.

Risiken

  • Die Kernbeweglichen Durchschnitte sind von Natur aus verzögert und können oft keine schnellen Trendumkehrungen erfassen.

  • Wenn der Markt sich bewegt, können sich die MA-Beziehungen sehr häufig kreuzen, was zu übermäßigen Eintritten und Stop-Loss-Triggern führt, was die Kosten und Verlustrisiken erhöht.

  • Die alpha-Rückschlüsse stammen hauptsächlich aus Parameter-Tuning auf Basis begrenzter Datensätze. Dies führt wahrscheinlich zu Überoptimierung und Überfitting-Problemen.

Lösungen:

  • Verkürzung der MA-Perioden für eine schnellere Reaktion
  • Hinzufügen von Filtern zur Vermeidung von übermäßigen Einträgen während der Marktbewegung
  • Versuchsrobustheit für verschiedene Produkte und Zeitrahmen

Optimierungsrichtlinien

Es gibt noch Raum für weitere Optimierungen:

  • Versuchen Sie verschiedene Kombinationen von Zeitrahmen und tun MA Perioden, um bessere Parameter zu finden, durch Brute-Force-Optimierung und Machine-Learning-Techniken.

  • Um eine zusätzliche Signalbestätigung zu erhalten, sollten Volumen- und Trendanalysen für längere Zeitrahmen einbezogen werden, z. B. Vermeidung von Einträgen bei niedrigen Handelsvolumina.

  • Vorhersagen von Kurvenmustern mit Hilfe von Deep-Learning-Modellen wie RNNs zur Unterstützung der Entscheidungsfindung.

  • Einführung adaptiver gleitender Durchschnitte zur Verbesserung der Filterlogik. Dynamische Anpassung von MA-Perioden zur Verringerung von Einträgen während der Marktunsicherheit.

Schlussfolgerung

Die Dual Moving Average Crossover Trading Strategie vergleicht gleitende Durchschnittsbeziehungen über mehrere Zeitrahmen hinweg, um falsche Signale auszufiltern und die Signalzuverlässigkeit zu verbessern.


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

//@version=3
strategy(shorttitle = "ALGO 3-1-2", title="ALGO 3h, 1h, 2h", overlay=true)

bool startLONGBOTandDEAL = false
bool stopLONGBOTandDEAL = false
bool openLONG = false
bool closeLONG = false
bool startSHORTBOTandDEAL = false
bool stopSHORTBOTandDEAL = false
bool openSHORT = false
bool closeSHORT = false

MA1Period = ema(close, 10)
MA2Period = ema(close, 200)
MA3Period = ema(close, 200)

MA1 = security(syminfo.tickerid, "180", MA1Period)
MA2 = security(syminfo.tickerid, "60", MA2Period)
MA3 = security(syminfo.tickerid, "120", MA3Period)

MA12Crossover = crossover(MA1, MA2)
MA12Crossunder = crossunder(MA1, MA2)
MA23Crossover = crossover(MA2, MA3)
MA23Crossunder = crossunder(MA2, MA3)

if MA23Crossover
    startLONGBOTandDEAL := true //stop shortBOT and DEAL code in the TV alert as well, probably stop first w/ a delay on startlong
    lblBull = label.new(bar_index, na, ' BULL Time Open LONG', color=color.blue, textcolor=color.black, style=label.style_label_up, size=size.small)
    label.set_y(lblBull, MA2)  
    strategy.close("go Short")
    strategy.entry("go Long", strategy.long, comment="go Long")
if MA23Crossunder
    //not sure if i should set alert for stop and start each bot, or just put start appropriate bot and stop its opposite in the same alert.
    startSHORTBOTandDEAL := true
    lblBull = label.new(bar_index, na, ' BEAR Time - Open SHORT', color=color.orange, textcolor=color.black, style=label.style_label_down, size=size.small)
    label.set_y(lblBull, MA2)
    strategy.close("go Long")
    strategy.entry("go Short", strategy.short, comment="go Short")
if MA12Crossover
    if MA2 >= MA3
        openLONG := true
        lup1 = label.new(bar_index, na, ' OPEN LONG ', color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.entry("go Long", strategy.long, comment="go Long")
    if MA2 <= MA3
        closeSHORT := true
        lup1 = label.new(bar_index, na, ' CLOSE SHORT ', color=color.gray, textcolor=color.black, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.close("go Short")
    
if MA12Crossunder
    if MA2 >= MA3
        closeLONG := true
        lun1 = label.new(bar_index, na, ' CLOSE LONG ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.close("go Long")
    if MA2 <= MA3
        openSHORT := true
        lun1 = label.new(bar_index, na, ' OPEN SHORT ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.entry("go Short", strategy.short, comment="go Short")


plot(MA1, color=color.green, linewidth=2, title="MA1")
plot(MA2, color=color.yellow, linewidth=3, title="MA2")
plot(MA3, color=color.red, linewidth=4, title="MA3")


alertcondition(startLONGBOTandDEAL, title="Start LONG BOT and DEAL", message="Start Long Bot and Deal")
alertcondition(stopLONGBOTandDEAL, title="Stop LONG BOT and DEAL", message="Stop Long Bot and Deal")
alertcondition(openLONG, title="Open LONG DEAL", message="Open Long Deal")
alertcondition(closeLONG, title="Close LONG DEAL", message="Close Long Deal")
alertcondition(stopSHORTBOTandDEAL, title="Stop SHORT BOT and DEAL", message="Stop Short Bot and Deal")
alertcondition(openSHORT, title="Open SHORT DEAL", message="Open Short Deal")
alertcondition(closeSHORT, title="Close SHORT DEAL", message="Close Short Deal")

Mehr