Trendfolgende Strategie mit 3 EMA, DMI und MACD

Schriftsteller:ChaoZhang, Datum: 2024-01-25
Tags:

img

Übersicht

Strategie Logik

Kaufsignale werden ausgelöst, wenn:

  • Schlusskurs überschreitet 34 EMA
  • +DI (bullish directional movement) > 17
  • ADX (Trendstärke) > -DI

Verkaufssignale werden erzeugt, wenn:

  • -DI (bearish directional movement) > 17
  • ADX > +DI

Zusätzliche Bestätigung erhält der MACD-Indikator vor den Einträgen.

Vorteile

Diese Strategie hat mehrere wesentliche Vorteile:

  1. Die Trendrichtung wird frühzeitig mit Hilfe eines kurzfristigen EMA-Crossovers erfasst
  2. Verwendet mehrere EMAs, um die Trendstärke in verschiedenen Zeitrahmen zu messen
  3. DMI-Filter helfen, falsche Signale zu vermeiden, indem sie nach starken Richtungsbewegungen suchen
  4. Der MACD liefert eine Momentumbestätigung für höhere Wahrscheinlichkeitssetups
  5. Die Kombination von Indikatoren verbessert die Genauigkeit und den Zeitpunkt der Einträge

Risiken

Die wichtigsten zu berücksichtigenden Risiken sind:

  1. Whipsaws und falsche Signale, wenn nur ein EMA-Crossover verwendet wird
  2. Potenzielle Verzögerung bei der Erzeugung des Signals durch mehrfache Bestätigungen
  3. Anfällig für plötzliche Trendumkehrungen

Methoden zur Minderung:

  • Verwenden Sie geeignete Stop-Loss- und Positionsgrößen
  • Optimierung der EMA-Längen für die aktuellen Marktbedingungen

Möglichkeiten zur Verbesserung

Weitere Verbesserungen der Strategie:

  1. Hinzufügen zusätzlicher Filter wie RSI für überkaufte/überverkaufte Niveaus
  2. Einbeziehung einer Volumenanalyse für stärkere Signale
  3. Test und Optimierung von Indikatoren und Einstellungen auf Basis von Vermögenswerten und Zeitrahmen
  4. Einsatz von maschinellem Lernen, um ständig aus neuen Marktdaten zu lernen

Schlussfolgerung

Zusammenfassend ist dies ein robustes Trend-Folge-System, das einfache, aber leistungsstarke Indikatoren kombiniert, um in Richtung des vorherrschenden Trends zu handeln. Die dreifache EMA-Konfiguration misst mehrere Zeitrahmentrends, während DMI- und MACD-Checks das Timing und die Wahrscheinlichkeit von profitablen Einträgen verbessern.


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

//@version=5
strategy("2 EMA di+ Buy Sell, strategy ", overlay=true)

// Define the EMA calculation function
ema(src, length) =>
    ta.ema(src, length)

// Calculate and plot EMA on M5
ema34_M5 = ema(close, 34)
ema89_M5 = ema(close, 89)
ema200_M5 = ema(close, 200)

// Plot EMAs
plot(ema34_M5, color=color.green, title="EMA 34 M5", linewidth=2)
plot(ema89_M5, color=color.blue, title="EMA 89 M5", linewidth=2)
plot(ema200_M5, color=color.black, title="EMA 200 M5", linewidth=2)

// Define DMI parameters
len = input(14, title="DI Length")
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plusDI = 100 * ta.rma(plusDM, len) / trur
minusDI = 100 * ta.rma(minusDM, len) / trur

// Calculate ADX
adxValue = 100 * ta.rma(math.abs(plusDI - minusDI) / (plusDI + minusDI == 0 ? 1 : plusDI + minusDI), len)

// Define MACD parameters
fastLength = input(12, title="Fast Length")
slowLength = input(26, title="Slow Length")
signalLength = input(9, title="Signal Length")

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalLength)

// Create buy/sell conditions
buyCondition = close > ema34_M5 and plusDI > 17 and adxValue > minusDI 
sellCondition = close < ema34_M5 and minusDI > 17 and adxValue > plusDI 

// Strategy logic
strategy.entry("Buy", strategy.long, when = buyCondition)
strategy.entry("Sell", strategy.short, when = sellCondition)

// Create alerts for buy/sell signals
alertcondition(buyCondition, title="Buy Signal", message="Buy Signal")
alertcondition(sellCondition, title="Sell Signal", message="Sell Signal")

// Plot buy/sell arrows on the price chart
bgcolor(buyCondition ? color.new(color.green, 90) : sellCondition ? color.new(color.red, 90) : na)

plotarrow(buyCondition ? 1 : sellCondition ? -1 : na, colorup=color.new(color.green, 0), colordown=color.new(color.red, 0), offset=-1)


Mehr