EMA-Spannungskreuztrend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-17 17:02:30 Uhr
Tags:

img

Übersicht

Diese Strategie verwendet die Kreuzung der Steigungen von zwei EMAs mit unterschiedlicher Länge, um einen Trend nach Signalen zu erzeugen.

Die Voraussetzungen für den Markteintritt der Strategie sind:

  • Fast Slope > Slow Slope und Preis > EMA 200: Long gehen
  • Fast Slope < Slow Slope und Preis < EMA 200: kurz gehen

Wenn sich die einfachen Steigungen in entgegengesetzter Richtung kreuzen, schließt er die Position.

Die Strategie funktioniert am besten bei Bitcoin und den liquiden und kapitalisiertesten Altcoins, funktioniert aber auch bei volatilen Vermögenswerten, insbesondere wenn sie oft in den Trend treten. Funktioniert am besten im 4-Stunden-Zeitrahmen.

Es gibt auch einen optionalen Volatilitätsfilter, der die Position nur öffnet, wenn die Differenz zwischen den beiden Steigungen mehr als einen bestimmten Wert beträgt.

Genießen Sie es!

Strategie Logik

Der Kern dieser Strategie besteht darin, die Neigungen von zwei EMA mit unterschiedlichen Längen zu vergleichen.

Zuerst werden EMAs mit Längen von 130 und 400 berechnet, dann werden die Steigungen von jedem berechnet, dann werden EMAs mit Länge 3 für jeden Steigungsgrad berechnet, um glatte Steigungskurven zu erhalten.

Wenn die schnelle EMA-Spannung über die langsame EMA-Spannung kreuzt, wird ein Kaufsignal erzeugt.

Um Lärm zu filtern, kann ein 200-Perioden-EMA als Trendfilter verwendet werden, wobei nur lange Signale berücksichtigt werden, wenn der Preis über der EMA liegt, und nur kurze Signale, wenn er darunter liegt.

Darüber hinaus kann ein Volatilitätsfilter verwendet werden, der nur dann Signale erzeugt, wenn der Unterschied zwischen den beiden Steigungen größer als ein Schwellenwert ist, um Fälle zu vermeiden, in denen sich die Steigungen kreuzen, aber die Volatilität unzureichend ist.

Wenn sich die schnellen und langsamen Steigungen umgekehrt kreuzen, werden Positionen geschlossen, um Gewinne/Verluste zu stoppen.

Analyse der Vorteile

  1. Die Verwendung von Steigungskreuzungen zur Erzeugung von Signalen kann Trends effektiv verfolgen

  2. Anpassung von EMA-Periodenkombinationen an unterschiedliche Marktbedingungen

  3. Der Trendfilter vermeidet, durch unbeständige Kursbewegungen irregeführt zu werden

  4. Der Volatilitätsfilter filtert falsche Signale aus.

  5. Einfache und klare Logik, leicht zu verstehen und umzusetzen

  6. Kann in mehreren Zeitrahmen verwendet werden

Risikoanalyse

  1. Häufige Öffnungen und Schließungen können in großen Märkten auftreten

  2. Unangemessene EMA-Perioden könnten Trendwendepunkte verpassen

  3. Die Parameter sollten an die sich ändernden Marktbedingungen angepasst werden

  4. Wie bei MA-Systemen können sich große Trends bei Extremen umkehren

Optimierungsrichtlinien

  1. Versuchen Sie verschiedene Kombinationen von EMA-Perioden, um optimale Parameter zu finden

  2. Auswahl der Parameter nach den Merkmalen des Vermögenswerts und den Marktbedingungen

  3. Erwägen Sie die Einführung von Stop-Loss-Strategien zur Risikokontrolle

  4. Dynamische Anpassung von EMA-Perioden

  5. Verschiedene Schwellungsschwellenwerte testen

  6. Testwirksamkeit in Zeitrahmen

Zusammenfassung

Die Strategie verfügt über eine klare, leicht verständliche Logik, die EMA-Spannungskreuzungen verwendet, um Signale zu generieren und Trends effektiv zu verfolgen. Die Trend- und Volatilitätsfilter reduzieren laute Trades. Das Tuning von EMA-Periodenkombinationen passt sie an unterschiedliche Marktbedingungen an. Insgesamt eine einfache und praktische Trend-Nachstrategie, die es wert ist, im Live-Handel getestet und optimiert zu werden.


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)

//definizione input

start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)

average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")

smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")

trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")

//variabili

m1 = if average == "EMA" 
    ema(close,len1)
else
    sma(close,len1)

m2=if average == "EMA" 
    ema(close,len2)
else
    sma(close,len2)

slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2

e1=if smoothingavg == "EMA" 
    ema(slp1,smoothingavglen)
else
    sma(slp1,smoothingavglen)

e2=if smoothingavg == "EMA" 
    ema(slp2,smoothingavglen)
else
    sma(slp2,smoothingavglen)

plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)

//variabili accessorie e condizioni

TrendConditionL=if trendfiltertype =="EMA"
    close>ema(close,trendfilterperiod)
else
    close>sma(close,trendfilterperiod)
    
TrendConditionS=if trendfiltertype =="EMA"
    close<ema(close,trendfilterperiod)
else
    close<sma(close,trendfilterperiod)
    
VolatilityCondition = abs(e1-e2) > volatilitydelta

ConditionEntryL= if trendfilter == true
    if volatilityfilter == true
        e1>e2 and TrendConditionL and VolatilityCondition
    else
        e1>e2 and TrendConditionL
else
    if volatilityfilter == true
        e1>e2 and VolatilityCondition
    else 
        e1>e2

ConditionEntryS= if trendfilter == true
    if volatilityfilter == true
        e1<e2 and TrendConditionS and VolatilityCondition
    else 
        e1<e2 and TrendConditionS
else
    if volatilityfilter == true
        e1<e2 and VolatilityCondition
    else
        e1<e2

ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)

if true
    if ConditionExitS
        if strategy.position_size < 0
            strategy.close("SLPShort")

if true
    if ConditionExitL
        if strategy.position_size > 0
            strategy.close("SLPLong")

if true
    if ConditionEntryL
        strategy.entry ("SLPLong",long=true)
        
if true
    if ConditionEntryS 
        strategy.entry("SLPShort",long=false)

Mehr