Trendhandel mit Doppel-EMA-Kreuzungssystem

Schriftsteller:ChaoZhang, Datum: 2023-10-26 17:15:46
Tags:

img

Übersicht

Das Double EMA Crossover-System ist ein Trend-folgende Handelssystem, das auf zwei exponentiellen gleitenden Durchschnitten (EMAs) basiert. Es verwendet zwei EMAs mit unterschiedlichen Perioden, um die aktuelle Trendrichtung zu bestimmen und entsprechend Handelssignale zu generieren.

Wie es funktioniert

Der Kern dieses Systems beruht auf zwei EMAs, einer schnelleren EMA und einer langsameren EMA. Wenn die schnelle EMA über der langsamen EMA liegt, gilt sie als bullisch.

Auf der Grundlage der Beziehung zwischen den Preisen und den beiden EMAs können die Balken in verschiedene Handelszonen eingeteilt werden:

  • Wenn die schnelle EMA über der langsamen EMA liegt und der Preis über der schnellen EMA (G1) liegt, handelt es sich um eine starke Kaufzone, hier kann eine Long-Position eingenommen werden.

  • Wenn die schnelle EMA unter der langsamen EMA liegt und der Preis unter der schnellen EMA (R1) liegt, handelt es sich um eine starke Verkaufszone, hier kann eine Short-Position eingenommen werden.

  • Bei der Kreuzung der beiden EMA werden die Warn- (gelb) und Übergangszonen (orange) anhand der Beziehung der Preise zu den beiden EMAs bestimmt.

Handelssignale werden erzeugt, wenn sich der Preis in verschiedenen Zonen bewegt. In den starken Zonen G1 und R1 können Signale direkt aufgenommen werden. In Warn- und Übergangszonen ist eine zusätzliche Indikatorbestätigung erforderlich.

Der StochRSI wird auch implementiert, um bei der Identifizierung potenzieller Ein- und Ausstiegspunkte zu helfen.

Vorteile

  • Einfache und saubere Logik, die leicht zu verstehen und umzusetzen ist

  • Wirksam auf mittelfristige und langfristige Trends aufmerksam machen

  • Unterscheidet starke Zonen von Warn-/Übergangszonen und erzeugt zuverlässige Handelssignale

  • Die Einbeziehung von StochRSI verbessert die Ein- und Ausstiegszeit

Risiken

  • Als reines Trendfolgensystem kann die Performance in nicht-trendigen Märkten nachlassen

  • Unangemessene EMA-Perioden-Einstellungen können zu falschen Signalen führen

  • Warn- und Übergangszonen sind mit höheren Handelsrisiken verbunden und sollten mit Vorsicht behandelt werden

  • Fehlende Stop-Loss kann zu erhöhten Verlusten führen

Die Risiken können verringert werden, indem

  1. Auswahl von Instrumenten mit starken Trends und Pause des Handels bei schwachen Trends

  2. Optimierung der EMA-Perioden zur Minimierung falscher Signale

  3. Einführung zusätzlicher Indikatoren für die Bestätigung in Warn-/Übergangszonen

  4. Einführung von Stop Loss zur Kontrolle von Verlusten pro Handel

Möglichkeiten zur Verbesserung

Das System kann in folgenden Bereichen weiter verbessert werden:

  1. Mehr Indikatoren wie MACD, KDJ für die Signalbestätigung integrieren

  2. Hinzufügen von Filtern wie Volumenerweiterung in Handelszonen zur Verbesserung der Handelserfolgsquote

  3. Dynamische Anpassung der EMA-Perioden anhand der Marktbedingungen für optimierte Parameter

  4. Einführung von Stop-Loss-Strategien zum Ausstieg aus Geschäften mit bestimmten Verlustprozentsätzen

  5. Optimierung der Positionsgröße und des Geldmanagements

  6. Test- und Feinabstimmparameter für verschiedene Instrumente, um die besten Konfigurationen zu finden

Durch die Einführung von mehr Signalbestätigung, dynamischer Parameteroptimierung, Stop-Loss und einem ordnungsgemäßen Geldmanagement kann die Robustheit des Systems verbessert und die Risiken für bessere Ergebnisse reduziert werden.

Schlussfolgerung

Das Double EMA Crossover-System ist ein Trend-Folge-System, das auf dem Vergleich zweier EMAs basiert. Es identifiziert verschiedene Handelszonen basierend auf der Beziehung des Preises zu den EMAs, um die Trendrichtung zu bestimmen und Handelssignale zu generieren. Als ein System mit klarer Logik und einfacher Implementierung kann es Trends effektiv erfassen. Während Risiken bestehen, können sie durch Hilfsindikatoren, dynamische Optimierung, Stop-Loss und Geldmanagement reduziert werden. Insgesamt ist das Double EMA Crossover-System ein solides Trend-Folge-System, das für mittel- bis langfristige Trader geeignet ist.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-25 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/
// © Vvaz_
//base-on CDC ActionZone By Piriya   a simple 2EMA and is most suitable for use with medium volatility market
//@version=4
strategy(title="Vin's Playzone" ,shorttitle="VPz", overlay=true, margin_long=4, margin_short=2)

//variable
srcf = input(title="Source",type=input.source,defval=close)
tffix = input(title="Fixed Timeframe",type=input.bool,defval=true)
tfn = input(title="Timeframe in",type=input.resolution,defval="D")
ema1 = input(title="Fast EMA",type=input.integer,defval=12)
ema2 = input(title="Slow EMA",type=input.integer,defval=26)
ema3 = input(title="EMA 100",type=input.bool,defval=true)
smooter =input(title="Smoothing period (1 = no smoothing)",type=input.integer,defval=2)
fillbar =input(title="Fill Bar Color",type=input.bool,defval=true)
emasw = input(title="Show EMA",type=input.bool,defval=true)
bssw = input(title="Show Buy-Sell signal",type=input.bool,defval=true)
plotmm = input(title="Show Buy-Sell Momentum",type=input.bool,defval=true)
plotmmsm = input(title="RSI Smoothing",type=input.integer,defval=0,minval=0,maxval=2)

//math
xcross =ema(srcf,smooter)
efast = tffix ?  ema(security(syminfo.tickerid,tfn,ema(srcf,ema1), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema1)
eslow = tffix ?  ema(security(syminfo.tickerid,tfn,ema(srcf,ema2), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema2)
ema3x = ema(xcross,100)


//Zone
Bull = efast > eslow
Bear = efast < eslow

G1 = Bull and xcross > efast //buy
G2 = Bear and xcross > efast and xcross > eslow //pre-buy1
G3 = Bear and xcross > efast and xcross < eslow //pre-buy2

R1 = Bear and xcross < efast //sell
R2 = Bull and xcross < efast and xcross < eslow //pre-sell1
R3 = Bull and xcross < efast and xcross > eslow //pre-sell2

//color
bcl =   G1 ? color.green :  G2 ? color.yellow : G3 ? color.orange :R1 ? color.red :R2 ? color.orange : R3 ? color.yellow : color.black
barcolor(color=fillbar ? bcl : na )

//plots
line1 = plot(ema3 ? ema3x : na ,"EMA100",color=color.white)
line2 = plot(emasw ? efast : na ,"Fast EMA",color=color.green)
line3 = plot(emasw ? eslow : na ,"Slow EMA",color=color.red)
fillcl = Bull ? color.green : Bear ? color.red : color.black
fill(line2,line3,fillcl)

//actions
buywhen = G1 and G1[1]==0
sellwhen = R1 and R1[1]==0

bullish = barssince(buywhen) < barssince(sellwhen)
bearish = barssince(sellwhen) < barssince(buywhen)

buy = bearish[1] and buywhen
sell = bullish[1] and sellwhen

bullbearcl = bullish ? color.green : bearish ? color.red : color.black

//plot trend
plotshape(bssw ? buy : na ,style=shape.arrowup,title="BUY",location=location.belowbar,color=color.green)
plotshape( bssw ? sell : na ,style=shape.arrowdown ,title="Sell",location=location.abovebar,color=color.red)

// Momentum Signal using StochRSI

smoothK = input(5,"StochRSI smooth K",type=input.integer,minval=1)
smoothD = input(4,"StochRSI smooth D",type=input.integer,minval=1)
RSIlen = input(14,"RSI length",type=input.integer,minval=1)
STOlen = input(14,"Stochastic length",type=input.integer,minval=1)
SRsrc = input(close,"Source for StochasticRSI",type=input.source)
OSlel = input(20,"Oversold Threshold",type=input.float,minval=0.00)
OBlel = input(80,"Oversold Threshold",type=input.float,minval=0.00)
rsil = rsi(SRsrc,RSIlen)
K = sma(stoch(rsil,rsil,rsil,STOlen),smoothK)
D = sma(K,smoothD)

buymore = iff( bullish ,iff(D < OSlel and crossover(K,D),	2,	 iff(D > OSlel and crossover(K,D),	 1,0)),0)
sellmore = iff( bearish,iff(D > OBlel and crossunder(K,D),	2,	 iff(D < OBlel and crossunder(K,D),	 1,0)),0)
//plot momentum
plotshape(plotmm ? buymore > plotmmsm ? buymore : na : na ,"Buy More!" ,style=shape.triangleup,location=location.belowbar,color=color.green)
plotshape(plotmm ? sellmore > plotmmsm ? sellmore : na : na ,"Sell More!" ,style=shape.triangledown,location=location.abovebar,color=color.red)


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

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

//stratgy excuter
strategy.entry("Long",true,when=window() and buy or buymore)
strategy.close("Long",when=window() and sell or sellmore,comment="TP Long")
strategy.entry("Short",false,when=window() and sell or sellmore)
strategy.close("Short",when=window() and buy or buymore,comment="TP Short")




        

Mehr