Algorithmische Handelsstrategie mit doppeltem gleitendem Durchschnitt, Golden Cross und Death Cross


Erstellungsdatum: 2024-01-29 15:11:58 zuletzt geändert: 2024-01-29 15:11:58
Kopie: 0 Klicks: 590
1
konzentrieren Sie sich auf
1617
Anhänger

Algorithmische Handelsstrategie mit doppeltem gleitendem Durchschnitt, Golden Cross und Death Cross

Überblick

Die Dual Moving Average Crossover Strategy ist eine quantitative Handelsstrategie, bei der der Dual Moving Average Crossover verwendet wird, um Ein- und Ausgänge zu beurteilen. Die Strategie kombiniert gleichzeitig die Berechnungen verschiedener Perioden, um mehrere Schichten von Filtern zu bilden, die die Falschsignale wirksam reduzieren und die Zuverlässigkeit der Handelssignale verbessern.

Strategieprinzip

Die Kernlogik der Strategie besteht darin, zwei Moving Averages in drei Zeiträumen zu verfolgen (die 10-Tage- und die 200-Tage-Linien): Wenn die Schnelllinie die langsame Linie von unten durchläuft, wird ein Gold-Fork-Signal erzeugt, das den Eintritt der Sorte in eine Mehrkopf-Bewegung bedeutet; Wenn die Schnelllinie die langsame Linie von oben durchläuft, wird ein Dead-Fork-Signal erzeugt, der den Eintritt der Sorte in eine Leerkopf-Bewegung bedeutet.

Die Strategie berechnet zuerst die 10-Tage- und die 200-Tage-Linie in 180-Minuten- und 60-Minuten-Zyklen. Wenn die 180-Minuten-Zehn-Tage-Linie die 200-Tage-Linie von unten durchquert, erzeugt sie ein Gold-Fork-Signal; wenn sie von oben nach unten durchquert, erzeugt sie ein Dead-Fork-Signal. Dies entspricht einem Handelssignal mit schnellen Zyklen.

Die Strategie führt dann die 200-Tage-Linie mit einer 120-Minuten-Periode als Kontrolllinie ein. Es wird entschieden, ob der Handel gestartet wird, um einige falsche Signale zu entfernen, indem entschieden wird, ob die 200-Tage-Linie mit einer 60-Minuten-Periode höher oder niedriger ist als die 200-Tage-Linie mit einer 120-Minuten-Periode.

Zum Beispiel, wenn 180 Minuten Goldfork produzieren, dann schauen Sie mehr, wenn die 60-Minuten-Hundert-Linie ist höher als die 120-Minuten-Hundert-Linie; nur unter dieser Bedingung wird eine Überschrift eröffnet. Im Gegensatz dazu, wenn die 60-Minuten-Hundert-Linie ist niedriger als die 120-Minuten-Hundert-Linie, dann nicht mehr schauen, und auch nicht den Platz zu eröffnen.

Zusammenfassend lässt sich sagen, dass die Strategie durch die Vergleiche verschiedener Zeiträume mit einer linearen Beziehung zu mehrschichtigen Filtern führt, was die Signalsicherheit erhöht. Sie gehört zu den gängigen Filterhandelsstrategien.

Strategische Vorteile

  • Mehrzeitbestätigung erhöht die Signalgenauigkeit. Im Vergleich zu einer Einzelabschätzung kann die Strategie mit einer mittleren Linie in drei Phasen von 180 Minuten, 60 Minuten und 120 Minuten bestätigt werden, was die Falschsignale erheblich reduziert und die Qualität der Handelssignale verbessert.

  • Die Handelsfrequenz dieser Strategie ist niedriger als bei der Hochfrequenz-Handelsstrategie, die nicht häufig betrieben werden muss und besser für die manuelle Nachfolge geeignet ist.

  • Einfach umzusetzen, leicht zu verstehen. Die Strategie verwendet nur die Gleichung, keine komplexe Logik, sehr leicht zu verstehen, die Schwelle ist niedrig und eignet sich für Anfänger und Übende.

  • Optimierung nach verschiedenen Perioden und Parametern. Die Durchschnittszyklus- und Typen in der Strategie können angepasst werden, um eine Kombination von Parametern zu erforschen, die für verschiedene Sorten und Marktumgebungen geeignet sind.

Strategisches Risiko

  • Die Strategie beruht hauptsächlich auf einer linearen Relation, die auf Preisänderungen reagiert und schnell umgekehrte Ereignisse leicht verpasst.

  • In stark bewegten Märkten ist es leicht, zu verlieren. Wenn die Märkte stark bewegten, kann die Gleichgewichtsbeziehung häufig kreuzen, was zu häufigen Positionseröffnungen und Verlusten führt. Dies erhöht die Handelskosten und das Risiko von Verlusten.

  • Die Strategie erhält Alpha hauptsächlich durch Parameteroptimierung. Diese Abhängigkeit von den Ergebnissen eines einzigen Datensatzes kann zu Problemen mit der Überoptimierung und Überpassung führen.

Die Lösungen für die Risiken sind:

  • Um die Reaktionsgeschwindigkeit zu beschleunigen, werden die Mittelwertparameter entsprechend verkürzt.

  • Es wurden weitere Filterbedingungen eingeführt, um die Häufigkeit von Positionen in den schwankenden Märkten zu vermeiden.

  • Daten für verschiedene Sorten und Zeitabschnitte zu testen, um die Stabilität der Parameter zu bewerten.

Richtung der Strategieoptimierung

Die Strategie kann noch weiter optimiert werden:

  • Versuchen Sie unterschiedlich mit Periodenzusammenstellungen und Mittellinienparametern, um bessere Parameter zu finden. Eine bessere Parameterkombination kann durch Ausnahmeoptimierung und maschinelle Lernmethoden gefunden werden.

  • Erhöhung der Bestätigung von Volumen- und Großtrendindikatoren. Dies kann weitere falsche Signale filtern, z. B. keine Positionen eröffnen, wenn die Volumenentlastung nicht ausreicht.

  • In Kombination mit Deep-Learning-Modellen werden Kurvenformationen vorhergesagt. Mit Deep-Learning-Modellen wie RNNs werden zukünftige Preise vorhergesagt und Entscheidungen unterstützt.

  • Anpassung der mittleren Linien zur Verbesserung der Filterlogik. Wenn der Markt in einen Zustand der Erschütterung eintritt, wird die Länge der mittleren Linien dynamisch angepasst, um die Häufigkeit der Positionen zu verringern.

Zusammenfassen

Die Doppel-Gleichreiher-Gold-Zwerg-Tot-Zwerg-Algorithmus-Handelsstrategie, die eine mehrschichtige Filterung aufbaut, kann die Handelssignalqualität effektiv verbessern, indem sie Gleichreiher-Beziehungen aus verschiedenen Zeiträumen vergleicht. Diese Strategie ist leicht zu implementieren, eignet sich für Anfänger, kann auch mehrdimensional erweitert und optimiert werden und lohnt sich für tiefere Forschung und Anwendung.

Strategiequellcode
/*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")