Strategie für eine doppelte Kreuzung von gleitenden Durchschnitten

Schriftsteller:ChaoZhang, Datum: 2024-02-27 16:21:02
Tags:

img

Übersicht

Diese Strategie ist eine typische gleitende Durchschnitts-Crossover-Strategie, die zwei Sätze von gleitenden Durchschnitten verwendet, einen schnellen und einen langsamen. Wenn der schnellen gleitenden Durchschnitt über den langsamen gleitenden Durchschnitt überschreitet, wird ein Kaufsignal generiert. Wenn der schnelle unter den langsamen überschreitet, wird ein Verkaufssignal generiert. Die Strategie verwendet sowohl EMA als auch SMA für die gleitenden Durchschnitte, wobei EMAs als schnelle Linien und SMAs als langsame Linien dienen. Die Verwendung mehrerer gleitender Durchschnitte kann dazu beitragen, falsche Signale zu filtern und die Zuverlässigkeit zu verbessern.

Strategie Logik

Die Kernlogik beruht auf Kreuzungen zwischen schnellen und langsamen gleitenden Durchschnittslinien, um Ein- und Ausgänge zu bestimmen.

Insbesondere werden zwei Sätze von schnellen und langsamen gleitenden Durchschnitten berechnet:

  • 1. Fast EMA, Länge 8 Tage
  • 2. Fast EMA, Länge 21 Tage
  • 1. langsame SMA, Länge 50 Tage
  • 2. langsame SMA, Länge 200 Tage

Crossovers werden dann zwischen den schnellen EMAs und den langsamen SMAs überprüft:

  • Wenn die 8-Tage-EMA über die 50-Tage-SMA geht, gilt das goldene Kreuzsignal.
  • Wenn die 8-Tage-EMA unter die 50-Tage-SMA fällt, wird das Todeskreuzsignal gesendet

Um falsche Signale zu filtern, ist eine zweite EMA/SMA-Kreuzung zur Bestätigung erforderlich:

  • Nur wenn die 21-Tage-EMA auch über/unter die 50-Tage-SMA geht, wird das Handelssignal ausgelöst.

Durch die Anforderung von zwei schnellen/langsamen MA-Kreuzungen können viele falsche Signale herausgefiltert und die Zuverlässigkeit verbessert werden.

Wenn Sie Signal-Trigger kaufen, gehen Sie lang, wenn Sie Signal-Trigger verkaufen, gehen Sie kurz.

Die Strategie legt auch die Gewinnnahme und den Stop-Loss auf der Grundlage des Input-Prozentsatzes des Einstiegspreises fest.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Dual MA-Design filtert falsche Signale und verbessert die Genauigkeit
  2. Die Kombination von EMA und SMA nutzt die Empfindlichkeit der EMA und die Glattigkeit der SMA
  3. Gewinne und Stop-Loss-Verbindungen für Gewinne und Risikokontrolle
  4. Einfache Logik leicht zu verstehen und zu ändern
  5. Anpassbare Parameter für verschiedene Marktumgebungen

Risikoanalyse

Risiken der Strategie:

  1. MA-Stratungen führen in unruhigen Märkten in der Regel zu vielen kleinen Gewinnen/Verlusten
  2. Kann bei starken Markttrends großen Verlusten ausgesetzt sein
  3. Eine schlechte Einstellung der Parameter führt auch zu unterdurchschnittlicher Leistung

Um Risiken zu kontrollieren:

  1. Anpassung der Parameter an unterschiedliche Marktbedingungen
  2. Optimierung auf der Grundlage von Backtests für den Zielmarkt
  3. Verwenden Sie Stop Loss, um die Verlustgröße zu begrenzen

Verbesserungsrichtlinien

Die Strategie kann weiter optimiert werden, indem

  1. Test mehr schnelle/langsame MA-Kombinationen, um die besten zu finden
  2. Mit Hilfe von maschinellem Lernen oder genetischen Algos zur automatischen Optimierung
  3. Hinzufügen eines Trendfilters zur Vermeidung von Gegentrends
  4. Hinzufügen von Trailing Stop Loss, um Gewinne zu erzielen
  5. Einführung von Volumen- oder Volatilitätsfiltern zur Bestätigung von Signalen
  6. Kombination mit anderen Schichten/Produkten zur Nutzung einer geringen Korrelation

Schlussfolgerung

Zusammenfassend generiert die Dual-MA-Crossover-Strategie Signale mit schnellen/langsamen MA-Kreuzungen, setzt Profit und Stop-Loss ein, um Risiken zu kontrollieren, und ist einfach, intuitiv und einfach zu implementieren.


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JMLSlop

//@version=4

src = close
strategy("Crossover moving averages", shorttitle="Cross MA-EMA", overlay=true, calc_on_order_fills=false)

// first fast EMA
len = input(8, "Length", type=input.integer, minval=1)
doma1 = input(true, title="EMA")
out1 = ema(src, len) 

//Second fast EMA
len2 = input(21, minval=1, title="Length")
doma2 = input(true, title="EMA")
out2 = ema(src, len2)

//First slow MA
len3 = input(50, minval=1, title="Length")
doma3 = input(true, title="SMA")
out3 = sma(src, len3)

//Second slow MA
len4 = input(200, minval=1, title="Length")
doma4 = input(true, title="SMA")
out4 = sma(src, len4)

// Profit
profit = input(8, "Profit/lost %", type=input.float, minval=1) * 0.01


plot(doma1 and out1 ? out1: na, color=color.blue, linewidth=1, title="1st EMA")
plot(doma2 and out2 ? out2: na, color=color.red, linewidth=1, title="2nd EMA")
plot(doma3 and out3 ? out3: na, color=color.green, linewidth=2, title="1st MA")
plot(doma4 and out4 ? out4: na, color=color.orange, linewidth=3, title="2nd MA")

// Orders config
takeProfitPrice =
     (strategy.position_size > 0) ? strategy.position_avg_price + open*profit : (strategy.position_size < 0) ? strategy.position_avg_price - (open*profit) : na

longStopPrice  = strategy.position_avg_price * (1 - profit)
shortStopPrice = strategy.position_avg_price * (1 + profit)

longCondition2 = (out2>out3 and (crossover(out1, out4) or crossover(out1[1], out4[1]) or crossover(out1[2], out4[2]) or (crossover(out1[3], out4[3]))) or (out2>out3 and (crossover(out1, out3) or crossover(out1[1], out3[1]) or crossover(out1[2], out3[2]) or crossover(out1[3], out3[3]))))
if (longCondition2)
    strategy.entry("Enter L", strategy.long)

shortCondition2 = (out2<out3 and (crossunder(out1, out4) or crossunder(out1[1], out4[1]) or crossunder(out1[2], out4[2]) or crossunder(out1[3], out4[3]))) or (out2<out3 and (crossunder(out1, out3) or crossunder(out1[1], out3[1]) or crossunder(out1[2], out3[2]) or crossunder(out1[3], out3[3])))
if (shortCondition2)
    strategy.entry("Enter S", strategy.short)


if (strategy.position_size > 0)
    strategy.exit("Exit L", limit=takeProfitPrice, stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit("Exit S", limit=takeProfitPrice, stop=shortStopPrice)


Mehr