Strategie für die doppelte EMA-Trendverfolgung "Golden Cross"

Schriftsteller:ChaoZhang, Datum: 2023-11-21 15:10:54
Tags:

img

Übersicht

Diese Strategie berechnet die schnelle EMA-Linie und die langsame EMA-Linie und vergleicht die Größenbeziehung zwischen den beiden EMAs, um die Trendrichtung des Marktes zu bestimmen. Sie gehört zu einer einfachen Trendverfolgungsstrategie. Wenn die schnelle EMA über die langsame EMA überschreitet, gehen Sie lang. Wenn die schnelle EMA unter die langsame EMA überschreitet, gehen Sie kurz. Es ist eine typische doppelte EMA-Goldene Kreuzstrategie.

Strategie Logik

Die Kernindikatoren dieser Strategie sind der schnelle EMA und der langsame EMA. Die schnelle EMA-Länge wird auf 21 Perioden und die langsame EMA-Länge auf 55 Perioden festgelegt. Die schnelle EMA kann schneller auf Preisänderungen reagieren und spiegelt den jüngsten kurzfristigen Trend wider; die langsame EMA reagiert langsamer auf Preisänderungen, filtert etwas Rauschen aus und spiegelt den mittelfristigen bis langfristigen Trend wider.

Wenn die schnelle EMA über die langsame EMA überschreitet, deutet dies darauf hin, dass sich der kurzfristige Trend nach oben gedreht hat und der mittelfristige bis langfristige Trend umgekehrt sein kann, was ein Signal für einen Long-Turn ist.

Durch den Vergleich von schnellen und langsamen EMAs werden Trendumkehrpunkte in zwei Zeiträumen erfasst, kurzfristig und mittel- bis langfristig, was eine typische Trendverfolgungsstrategie ist.

Vorteile

  1. Einfache und klare Logik, leicht zu verstehen und umzusetzen
  2. Flexible Parameter-Tuning, schnelle und langsame EMA-Perioden können angepasst werden
  3. Konfigurierbare ATR-Stop-Loss- und Profit-Taken für kontrollierte Risiken

Risiken

  1. Unangemessener Zeitpunkt der EMA-Kreuzungen, Gefahr eines fehlenden besten Einstiegspunktes
  2. Häufige ungültige Signale während der Marktkonsolidierung, die Verluste verursachen
  3. Falsche Einstellung der ATR-Parameter, die zu lockeren oder zu aggressiven Haltungen führt

Risikomanagement:

  1. Optimieren Sie die EMA-Parameter für schnelle und langsame Linien, um optimale Kombinationen zu finden
  2. Hinzufügen von Filtermechanismen, um ungültige Signale aus der Marktkonsolidierung zu vermeiden
  3. Prüfung und Optimierung der ATR-Parameter, um einen angemessenen Stop-Loss und Gewinngewinn zu gewährleisten

Verbesserungsbereiche

  1. Teststabilität verschiedener EMA-Periodenparameter auf der Grundlage statistischer Methoden
  2. Hinzufügen von Filterbedingungen in Kombination mit anderen Indikatoren, um ungültige Signale zu vermeiden
  3. Optimierung der ATR-Parameter für eine optimale Stop-Loss/Take-Profit-Ratio

Zusammenfassung

Diese Strategie beurteilt den Trend auf der Grundlage von EMA-Crossovers, die einfach und klar zu implementieren sind. Mit ATR-basierten Stopps sind Risiken kontrollierbar. Weitere Verbesserungen der Stabilität und Rentabilität können durch Parameteroptimierung und Filterbedingungen erzielt werden.


/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "VP Backtester", overlay=false)


// Create General Strategy Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
 
// Default Stop Types
fstp = input(defval=false, title="Fixed Perc stop")
fper = input(defval=0.1, title='Percentage for fixed stop', type=float)
atsp = input(defval=true, title="ATR Based stop")
atrl = input(defval=14, title='ATR Length for stop')
atrmsl = input(defval=1.5, title='ATR Multiplier for stoploss')
atrtpm = input(defval=1, title='ATR Multiplier for profit')
 
// Sessions
asa_inp = input(defval=true, title="Trade the Asian Session")
eur_inp = input(defval=true, title="Trade the European Session")
usa_inp = input(defval=true, title="Trade the US session")
ses_cls = input(defval=true, title="End of Session Close Out?")
 
// Session Start / End times (In exchange TZ = UTC-5)    
asa_ses = "1700-0300" 
eur_ses = "0200-1200" 
usa_ses = "0800-1700"  
 
in_asa = time(timeframe.period, asa_ses)
in_eur = time(timeframe.period, eur_ses)
in_usa = time(timeframe.period, usa_ses)
 
strategy.risk.allow_entry_in(strategy.direction.all)
 
// Set start and end dates for backtest
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
window()  => time >= start and time <= end ? true : false // create function "within window of time"

 
// Check if we are in a sessions we want to trade
can_trade = asa_inp and not na(in_asa) ? true :
  eur_inp and not na(in_eur) ? true :
  usa_inp and not na(in_usa) ? true :
  false
  
// atr calc for stop and profit
atr = atr(atrl)
atr_stp_dst_sl = atr * atrmsl
atr_stp_dst_tp = atr * atrtpm



//*************************************************************************************
// Put your strategy/indicator code below
// and make sure to set long_condition=1 for opening a buy trade
// and short_condition for opening a sell trade
//*************************************************************************************
fastInput = input(21)
slowInput = input(55)

fast = ema(close, fastInput)
slow = ema(close, slowInput)

plot(fast, color = red)
plot(slow, color = blue)

long_condition = crossover(fast, slow)
short_condition = crossunder(fast, slow)


//*************************************************************************************
// Trade management with ATR based stop & profit
//*************************************************************************************
if (long_condition and window() )
    strategy.entry("Long Entry",  strategy.long)
    if strategy.position_size <= 0 // Less than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  - atr_stp_dst_sl
            atr_profit = open + atr_stp_dst_tp
            strategy.exit('ATR Long Exit', "Long Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open - (open * fper)
            strategy.exit('Perc Fixed Long Stop Exit', "Long Entry", stop=stop)
 
if (short_condition and window() )
    strategy.entry("Short Entry",strategy.short)
    if strategy.position_size >= 0 // Greater than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  + atr_stp_dst_sl
            atr_profit = open - atr_stp_dst_tp
            strategy.exit('ATR Short Exit', "Short Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open + (open * fper)
            strategy.exit('Perc Fixed Short Stop Exit', "Short Entry", stop=stop)
 
 
strategy.close_all(when=not can_trade and ses_cls)
 


Mehr