
Die Double EMA Gold-Fork-Dead-Fork-Trend-Tracking-Strategie ist eine quantitative Handelsstrategie, die die Richtung der Kursentwicklung anhand der beiden EMA-Indikatoren ermittelt. Die Strategie ermittelt die Kursentwicklung durch die Berechnung von EMA-Indikatoren mit zwei verschiedenen Parametern, kombiniert mit Gold-Fork- und Dead-Fork-Signalen.
Die Kernindikatoren der Strategie sind zwei Gruppen von EMAs, darunter eine Gruppe von EMA1 mit längerer Periode und eine Gruppe von EMA2 mit kürzerer Periode. Die Strategie berechnet die beiden Gruppen von EMAs anhand einer 4-Stunden-Linie mit einer Basisperiode von 21 und 10 EMA1-Parametern.
Wenn die kürzere Periode EMA2 die längere Periode EMA1 durchbricht, wird ein Kaufsignal erzeugt. Dies bedeutet, dass die kurzfristige Tendenz der Preise stärker wird und in eine Aufwärtsbewegung eintritt. Wenn die kürzere Periode EMA2 die längere Periode EMA1 durchbricht, wird ein Verkaufssignal erzeugt.
Um Fehlersignale zu filtern, wird eine Strategie mit zwei Forks eingerichtet. Nur wenn zwei Forks gleichzeitig signalisieren, wird ein entsprechender Kauf- oder Verkaufsschritt ausgelöst. Dies reduziert die Anzahl von Fehlhandlungen, die durch Preisschwankungen verursacht werden.
Diese Risiken können durch folgende Maßnahmen kontrolliert werden:
Die Strategie kann noch weiter optimiert werden:
Erhöhung des Modellportfolios. Es können weitere Kombinationen verschiedener Parameterindikatoren erstellt werden, um die Stabilität der Strategie zu verbessern.
Erhöhung der Stop-Loss-Mechanismen. Setzen Sie einen vernünftigen Stop-Loss-Punkt, um einzelne Verluste effektiv zu kontrollieren.
Dynamische Parameteroptimierung. Die Parameter der EMA können automatisch für verschiedene Marktbedingungen optimiert werden.
In Kombination mit maschinellen Lerntechniken. Mit Frameworks wie Tensorflow werden Modelle trainiert, um Preistrends in Echtzeit zu prognostizieren und zu klassifizieren.
Die Double EMA Gold Fork Dead Fork Trend Tracking Strategie ist eine einfache und praktische Trend-Trading-Strategie. Sie nutzt die Double EMA-Indikatoren, um kurzfristige Trends in den Preisen zu ermitteln und die Gelegenheit für Richtungshandel zu erfassen. Die Kombination der beiden Gold Fork Dead Fork Filter-Indikatoren reduziert den Fehlerhandel.
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
/// Component Code Startt
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
// Component Code Stop
strategy(title="Ema cross strat", overlay=true)
margin = input(true, title="Margin?")
Margin = margin ? margin : false
resCustom = input(title="EMA Timeframe", defval="240" )
source = close,
len2 = input(21, minval=1, title="EMA1")
len3 = input(10, minval=1, title="EMA2")
ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off)
ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off)
mylong = crossover(ema3, ema2)
myshort = crossunder(ema3,ema2)
last_long = na
last_short = na
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])
in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0
mylong2 = crossover(ema3, ema2)
myshort2 = crossunder(ema3, ema2)
last_long2 = na
last_short2 = na
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])
in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0
condlongx = in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)
condshortx = in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossover(condshortx, 1.9)
if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
strategy.entry("Long", strategy.long, comment="Long")
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0
strategy.close("Long",when = not Margin)
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
strategy.entry("Short", strategy.short, comment="Short", when = Margin)