Die Dual EMA Crossover Strategie ist eine typische Trendfolgestrategie. Sie verwendet zwei EMA-Linien unterschiedlicher Perioden und erzeugt Handelssignale basierend auf ihrem Crossover. Wenn die schnellere EMA über die langsamere EMA überschreitet, wird ein Kaufsignal generiert. Wenn die schnellere EMA unter die langsamere EMA überschreitet, wird ein Verkaufssignal generiert. Diese Strategie kann mittelfristige Trends verfolgen und Handelsmöglichkeiten in den Trendinitiationsstufen erfassen.
Die wichtigsten Bestandteile dieser Strategie sind:
Hier ist die schnellere EMA-Länge 12, die langsamere EMA ist 26.
Die schnellere EMA reagiert schneller, während die langsamere EMA stabiler ist.
Ermitteln Sie EMA-Crossover-Situationen, um Handelssignale zu generieren. Wenn eine schnellere EMA über eine langsamere EMA überschreitet, wird ein Kaufsignal generiert. Wenn eine schnellere EMA unter eine langsamere EMA überschreitet, wird ein Verkaufssignal generiert.
Bei Long geht es darum, vor dem Öffnen von Long-Positionen zuerst die vorhandenen Short-Positionen zu schließen und umgekehrt.
Setzen Sie Stop-Loss-Punkte. Beim Long gehen wird der Stop-Loss ausgelöst, wenn der Preis um einen bestimmten Prozentsatz unter den vorherigen Tiefpunkt fällt.
Ausgangstrades basieren auf Signalen. Long-Positionen werden geschlossen, wenn die schnellere EMA unter die langsamere EMA geht. Short-Positionen werden geschlossen, wenn die schnellere EMA über die langsamere EMA geht.
Die Logik ist einfach und intuitiv. EMA-Crossover bestimmt die Trendrichtung und Stärke. Schnelleres EMA reagiert schnell auf kurzfristige Preisänderungen, während langsameres EMA stetig auf langfristige Trends reagiert. Das Crossover der beiden Linien ist eine klassische Möglichkeit, Trendänderungen zu erkennen.
Die Vorteile dieser Strategie sind:
Einfaches Konzept, leicht verständlich und umsetzbar.
Kann mittelfristige und langfristige Trends effektiv verfolgen und Chancen frühzeitig nutzen.
Durch die doppelte EMA-Einstellung wird Lärm durch kurzfristige Marktschwankungen vermieden.
Es gibt klare Einstiegsregeln, Ausstiegsregeln und Stop-Loss-Regeln.
Nur wenige Parameter sind nötig, keine Überanpassung, einfaches Parameter-Tuning für Anfänger.
Gute Backtest-Ergebnisse, für den Live-Handel geeignet. Kann allein oder in Kombination mit anderen Strategien verwendet werden.
Einige Risiken dieser Strategie:
Dual EMA-Crossover ist anfällig für falsche Signale und Whipsaws. Parameter müssen abgestimmt werden, um ungültige Signale zu filtern.
Kann nicht gut mit Situationen umgehen, in denen sich der Trend umkehrt, und braucht eine Bestätigung durch andere Indikatoren.
Eine doppelte EMA-Strategie neigt dazu, Höchstwerte zu verfolgen und Tiefststände zu verkaufen.
Die Ergebnisse der Backtests können in gewissem Maße überfüllt sein. Die Parameterempfindlichkeit sollte auf Robustheit geprüft werden.
Es sollte ein angemessener Stop-Loss-Level festgelegt werden.
Die Transaktionskosten können sich auf die tatsächliche Rentabilität auswirken.
Einige Möglichkeiten zur Verbesserung der Strategie:
Optimieren Sie die EMA-Periodenparameter, um die beste Kombination zu finden, indem Sie die Vorwärtsoptimierung und das maschinelle Lernen verwenden.
Hinzufügen von Trendfilterindikatoren wie ADX, CCI usw., um den Handel mit unsicheren Trends zu vermeiden.
Fügen Sie Volumenindikatoren wie Handelsvolumen auf das Bilanzvolumen hinzu, um sicherzustellen, dass der echte Handel Signale anregt.
Implementieren dynamischer Stop-Loss, um Stops automatisch anhand der Marktvolatilität anzupassen.
Korrelationsprodukte kombinieren, um Korrelation für das Risikomanagement zu nutzen.
Einführung von maschinellem Lernen für Parameteroptimierung, Feature Engineering, Signalfilterung usw.
Überlegen Sie die Transaktionskosten, passen Sie Stopps und Größe an, um die Handelsfrequenz zu reduzieren.
Anpassung der Parameter an die Produktmerkmale zur Verbesserung der Anpassungsfähigkeit.
Entwurf eines zusammengesetzten Strategierahmens, der mit anderen Strategien zur Verbesserung der Robustheit kombiniert wird.
Diese Verbesserungen können die Strategie für den Live-Handel robuster und profitabler machen.
Diese Strategie verwendet doppelten EMA-Crossover, um Handelssignale zu generieren und kann mittelfristige Trends effektiv verfolgen. Die Vorteile liegen in ihrer Einfachheit und guten Backtest-Ergebnissen, die sie für Anfänger einfach zu verwenden machen.
/*backtest start: 2022-10-23 00:00:00 end: 2023-10-29 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) StartYear = input(2018, "Backtest Start Year") StartMonth = input(1, "Backtest Start Month") StartDay = input(1, "Backtest Start Day") UseStopLoss = input(true,"UseStopLoss") window() => time >= timestamp(StartYear, StartMonth, StartDay,00,00) ? true : false stopLoss = input(20, title = "Stop loss percentage(0.1%)") maFastSource = input(defval = open, title = "Fast MA Source") maFastLength = input(defval = 12, title = "Fast MA Period", minval = 1) // long ma maSlowSource = input(defval = open, title = "Slow MA Source") maSlowLength = input(defval = 26, title = "Slow MA Period", minval = 1) maFast = ema(maFastSource, maFastLength) maSlow = ema(maSlowSource, maSlowLength) fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50) longEMA = crossover(maFast, maSlow) exitLong = crossunder(maFast, maSlow) shortEMA = crossover(maSlow, maFast) exitShort = crossover(maFast, maSlow) if (longEMA) strategy.entry("LongId", strategy.long, when=window()) if (shortEMA) strategy.entry("ShortId", strategy.short, when=window()) if (UseStopLoss) strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick) strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)