Doppelte EMA Golden Cross Oscillation Tracking-Strategie


Erstellungsdatum: 2024-01-03 11:38:51 zuletzt geändert: 2024-01-03 11:38:51
Kopie: 0 Klicks: 591
1
konzentrieren Sie sich auf
1621
Anhänger

Doppelte EMA Golden Cross Oscillation Tracking-Strategie

Überblick

Die Doppel-EMA Gold-Cross-Schock-Tracking-Strategie ist eine Strategie, die die EMA-Indikatoren nutzt, um Trends zu identifizieren und sie in schwachen Verhaltensweisen zu verfolgen. Die Strategie kombiniert die Ideen von Trend-Tracking und Schwankungen zu erfassen, um in starken Verhaltensweisen eine lange Linie zu verfolgen und in schwachen Verhaltensweisen eine kurze Linie zu handeln, um bessere Erträge zu erzielen.

Strategieprinzip

Die Strategie verwendet 20-Zyklen-EMA als Indikator für Trends. Wenn der Preis eine EMA überschreitet, wird angenommen, dass der Kurs steigt. Wenn der Preis eine EMA überschreitet, wird angenommen, dass der Kurs fällt.

Wenn der Preis auf der EMA ist, mit dem höchsten Preis von 20 Perioden höchsten als Stopp, mit dem niedrigsten Preis nach der EMA niedrigsten als Stop-Loss, mehr Eintritt; wenn der Preis unter der EMA ist, mit dem niedrigsten Preis von 20 Perioden niedrigsten als Stopp, mit dem höchsten Preis nach der EMA hochsten als Stop-Loss, brechen Eintritt.

Die Strategie beurteilt auch, ob der ADX größer als 30 ist. Der Handel wird nur dann getätigt, wenn der Trend klar genug ist, also wenn der ADX größer als 30 ist. Dies verhindert, dass ein Stop-Loss bei einem Erschütterungsschlag auftritt.

Während der Haltestelle wird der Trail Stop an die tatsächlichen Marktbedingungen angepasst, um mehr Gewinne zu erzielen.

Analyse der Stärken

Die Strategie kombiniert die Vorteile von Trend-Tracking und Shock-Trading, um sowohl in Trend-Situationen als auch in Shock-Situationen stabilere Erträge zu erzielen und hat eine starke Anpassungsfähigkeit.

Die Anwendung von EMAs reduziert auch die Parameter der Strategie und verringert das Risiko einer Überoptimierung, wodurch die Stabilität der Strategie gewährleistet wird.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass ein größerer Stop-Loss bei verstärkter Erschütterung auftreten kann. Die Rolle der ADX wird dann hervorgehoben. Der Handel wird geschlossen, wenn der ADX-Wert niedrig ist, um Verluste zu vermeiden, wenn es keinen klaren Trend gibt.

Darüber hinaus ist es wichtig, einen vernünftigen Stop-Loss-Satz zu setzen. Ein zu großer Stop-Loss kann zu einem höheren Einzelschaden führen, ein zu kleiner Stop-Loss kann zu sensibel sein und die Wahrscheinlichkeit eines Stop-Losses erhöhen. Hier muss ein Gleichgewicht zwischen dem Gewinnziel und dem Stop-Loss-Risiko gefunden werden.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Die Auswahl der EMA-Zyklen. Es können weitere EMA-Zyklen-Parameter getestet werden, um die optimale Kombination zu finden.

  2. Die ADX-Parameter können optimiert werden. Die ADX-Periode und die ADX-Durchschnittswerte können mit verschiedenen Einstellungen versucht werden.

  3. Die Stop-Loss-Algorithmen können verbessert werden, z. B. durch die Einführung von dynamischen Stop-Losses.

  4. Eine Kombination mit anderen Indikatoren, wie KDJ, MACD, etc., kann in Betracht gezogen werden, um eine Multi-Indikator-Verifizierungsstrategie zu bilden.

Zusammenfassen

Die Double EMA Gold Cross-Shock-Tracking-Strategie ist insgesamt eine sehr praktische Strategie. Sie kombiniert die Eigenschaften der Trend- und Shock-Strategie und kann sowohl für die Langstrecketracking als auch für den Short-Line-Handel verwendet werden. Die Effektivität der Strategie kann durch Parameteroptimierung und Kombinationsindikator-Verifizierung weiter verbessert werden.

Strategiequellcode
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Linda Raschke's Holy Grail", shorttitle="RHG", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
adxlen = input(14, title="ADX period")
adxMin = input(30)
dilen = adxlen
f_highest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] >= _value ? _src[_i] : _value
    _return = _value

f_lowest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] <= _value ? _src[_i] : _value
    _return = _value

dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

emaLength = input(20)
curEma = ema(close, emaLength)
highPeriod = input(20)
d = na

takeProfitLong = highest(high, highPeriod) 
stopLossLong = f_lowest(low, barssince(low >= curEma))

if strategy.position_size == 0
    if adx(dilen, adxlen) <= adxMin or high < curEma 
        strategy.cancel("Long")
    if adx(dilen, adxlen) > adxMin and low < curEma and high > curEma and curEma > curEma[highPeriod / 2] and curEma > curEma[highPeriod] and takeProfitLong > high
        strategy.order("Long", strategy.long, stop = high)
        strategy.exit("Exit", "Long", limit = takeProfitLong, stop = stopLossLong)
        d := high

takeProfitShort = lowest(low, highPeriod) 
stopLossShort = f_highest(high, barssince(high <= curEma))

if strategy.position_size == 0
    if adx(dilen, adxlen) <= adxMin or low > curEma 
        strategy.cancel("Short")
    if adx(dilen, adxlen) > adxMin and high > curEma and low < curEma and curEma < curEma[highPeriod / 2] and curEma < curEma[highPeriod] and takeProfitShort < low
        strategy.order("Short", strategy.short, stop = low)
        strategy.exit("Exit", "Short", limit = takeProfitShort, stop = stopLossShort)
        d := low


strategy.close("Exit")

plot(d == high ? stopLossLong : d == low ? stopLossShort : na, style = circles, linewidth = 4, color = red)
plot(d == high ? takeProfitLong : d == low ? takeProfitShort : na, style = circles, linewidth = 4, color = green)
plot(d, style = circles, linewidth = 4, color = yellow)
plot(curEma, color = black, linewidth = 2)  

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()