Dynamische Handelsstrategie mit mehreren EMA-Perioden


Erstellungsdatum: 2023-12-12 12:18:41 zuletzt geändert: 2023-12-12 12:18:41
Kopie: 1 Klicks: 1090
1
konzentrieren Sie sich auf
1621
Anhänger

Dynamische Handelsstrategie mit mehreren EMA-Perioden

Überblick

Die Kernidee dieser Strategie ist es, Handelssignale zu erzeugen, die auf der Kreuzung mehrerer Index-Moving Averages (EMA) basieren. Wenn eine kurzfristige EMA eine längerfristige EMA trägt, wird mehr getätigt; wenn eine kurzfristige EMA eine längerfristige EMA trägt, ist die Position platziert. Diese Strategie erlaubt die Konfiguration mehrerer EMA-Zyklen, wobei jede EMA unabhängig voneinander aktiviert werden kann.

Strategieprinzip

Die Strategie hat acht EMA-Zyklen, nämlich 8, 13, 21, 34, 55, 89, 144 und 233. Diese EMAs sind so konfiguriert, dass sie einzeln aktiviert oder deaktiviert werden können.

Wenn ein kürzerer EMA einen längeren EMA von unten durchbricht, erzeugt er ein Kaufsignal; wenn ein kürzerer EMA einen längeren EMA von oben durchbricht, erzeugt er ein Verkaufsignal. Wenn beide EMAs aktiviert sind, wird shorterEMA > longerEMA als Mehrsignal und shorterEMA < longerEMA als Off-Signal verwendet.

Zum Beispiel, wenn ein 55-Tage-EMA und ein 89-Tage-EMA aktiviert sind, machen Sie mehr, wenn der 55-Tage-EMA den 89-Tage-EMA trägt; wenn der 55-Tage-EMA den 89-Tage-EMA trägt, ist es ausgeglichen. Dies erlaubt dieser Strategie, die EMA-Kombination, die verwendet wird, dynamisch zu ändern, von einer längeren Periode in eine kürzere Periode zu wechseln oder umgekehrt.

Die Anzahl der Positionen wird als die Anzahl der Konten, die mit “close” geteilt werden, und die Anzahl der aktivierten EMA-Gruppen geteilt. Dies stellt sicher, dass die Positionsgröße bei jeder EMA gleich ist.

Analyse der Stärken

  • Durch die Konfiguration verschiedener EMAs können Sie die Strategie mit einer gewissen Flexibilität anpassen
  • Jede EMA kann unabhängig konfiguriert werden und ermöglicht eine hohe Anpassung
  • Positionen werden prozentual auf jede EMA verteilt, um Risikomanagement zu fördern
  • Es werden mehrere EMAs verwendet, um in verschiedenen Marktphasen zu den geeigneteren EMAs zu wechseln
  • Strategie ist einfach, klar, leicht zu verstehen und zu deaktivieren

Risikoanalyse

  • Die EMA kann die Struktur des Marktes nicht als einziger Indikator bestimmen und könnte falsche Signale senden
  • EMAs können sich in stark bewegten Märkten leicht überschneiden, was zu höheren Handelsfrequenzen und Kosten führt.
  • Die EMA-Parameter müssen für verschiedene Märkte optimiert werden
  • Es kann notwendig sein, ein Handelssignal in Kombination mit anderen Indikatoren zu bestätigen.

Es kann in Betracht gezogen werden, EMAs in Kombination mit anderen Indikatoren zu verwenden, wie z. B. Kanalindikatoren oder Erschütterungsindikatoren, um Signale zu filtern, oder in Kombination mit Trend- und Umkehrindikatoren. Außerdem ist die Optimierung der EMA-Parameter sehr wichtig und muss für verschiedene Märkte angepasst werden.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. EMA Parameteroptimierung. Die optimale EMA Parameterkombination kann durch Parameter-Scan und Walk Forward Analysis gefunden werden.

  2. Zusätzliche Filterbedingungen können bei EMA-Kreuzungen hinzugefügt werden, um falsche Signale zu vermeiden, z. B. Volumenfilter, Fluktuationsratefilter usw.

  3. In Kombination mit anderen Indikatoren. Die EMA kann mit anderen Indikatoren wie MACD, KDJ, Brin und anderen kombiniert werden, um ihre Komplementarität zu nutzen.

  4. Positionsanpassungen auf jeder EMA. Positionen können je nach Marktvolatilität oder Trendstärke dynamisch angepasst werden.

  5. Optimierung des Stop-Loss-Stopp-Niveaus, um das optimale Risiko-Rendite-Verhältnis zu finden

Zusammenfassen

Die Strategie als Ganzes ist sehr einfach und direkt, um kurz- und mittelfristige Trends durch EMA-Kreuzungen zu erfassen. Ihr Vorteil liegt in der hohen Konfigurationsfähigkeit und Flexibilität, die es dem Händler ermöglicht, die EMA-Kombination zu wählen, die für ihn am besten geeignet ist. Die EMA als einzelner Indikator ist jedoch leicht zu falschen Signalen, was das größte Risiko der Strategie darstellt.

Strategiequellcode
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true)

// Revision:        1
// Author:          @ToS_MavericK

buyprice = 0.0
buyprice := buyprice[1]

// === INPUT SMA ===
EMA1  = input(8)
EMA2  = input(13)
EMA3  = input(21)
EMA4  = input(34)
EMA5  = input(55)
EMA6  = input(89)
EMA7  = input(144)
EMA8  = input(233)

EnableEMA1 = input(true)
EnableEMA2 = input(true)
EnableEMA3 = input(true)
EnableEMA4 = input(true)
EnableEMA5 = input(true)
EnableEMA6 = input(true)
EnableEMA7 = input(true)
EnableEMA8 = input(true)

//Profit  = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1)
//StopLoss    = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
FromMonth   = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear    = input(defval = 2018, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay   = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear  = input(defval = 2020, title = "To Year", minval = 2012)


// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)
vEMA3 = ema(close, EMA3)
vEMA4 = ema(close, EMA4)
vEMA5 = ema(close, EMA5)
vEMA6 = ema(close, EMA6)
vEMA7 = ema(close, EMA7)
vEMA8 = ema(close, EMA8)

count = -1
if (EnableEMA1 == true)
    count := count + 1
if (EnableEMA2 == true)
    count := count + 1
if (EnableEMA3 == true)
    count := count + 1
if (EnableEMA4 == true)
    count := count + 1
if (EnableEMA5 == true)
    count := count + 1
if (EnableEMA6 == true)
    count := count + 1
if (EnableEMA7 == true)
    count := count + 1
if (EnableEMA8 == true)
    count := count + 1

// set position size
Amount = 1 / (close * count)

// === EXECUTION ===
strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2)
strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2))

strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3)
strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3))

strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4)
strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4))

strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5)
strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5))

strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6)
strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6))

strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7)
strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7))

strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8)
strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8))

plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line)  // plot FastMA
plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line)    // plot SlowMA

//plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line)    // plot SlowMA
//plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line)    // plot SlowMA