
Die Strategie, die die Richtung der Markttrends durch die Berechnung der schnellen EMA und der langsamen EMA berechnet und die Größenverhältnisse der beiden EMAs vergleicht, gehört zu den einfachen Trendverfolgungsstrategien. Wenn die schnelle EMA die langsame EMA überschreitet, ist es eine typische Doppel-EMA Gold-Cross-Strategie, wenn die schnelle EMA die langsame EMA überschreitet.
Die Kernindikatoren der Strategie sind die schnelle EMA und die langsame EMA. Die Schnelle EMA-Länge ist auf 21 Zyklen und die langsame EMA-Länge auf 55 Zyklen eingestellt. Die schnelle EMA reagiert schneller auf Preisänderungen und spiegelt die jüngsten kurzfristigen Trends wider.
Wenn die schnelle EMA die langsame EMA durchbricht, bedeutet dies, dass die kurzfristige Tendenz zu einem Anstieg wird und die mittelfristige Tendenz möglicherweise umkehrt, was ein Signal für einen Überschuss ist. Wenn die schnelle EMA die langsame EMA unterhalb der schnellen EMA durchbricht, bedeutet dies, dass die kurzfristige Tendenz zu einem Rückgang wird und die mittelfristige Tendenz möglicherweise umkehrt, was ein Signal für einen Rückgang ist.
Durch die Vergleiche der schnellen und langsamen EMAs können Trendwendepunkte auf zwei Zeitskalen, kurz- und mittelfristig, erfasst werden. Dies ist eine typische Trendverfolgung.
Risikomanagement:
Die Strategie ist einfach, klar und einfach umzusetzen. Die Strategie wird durch die Kreuzung von schnellen EMAs und langen EMAs beurteilt. In Kombination mit ATR kann ein Stop-Loss-Stopp eingerichtet werden, wobei das Risiko kontrolliert werden kann.
/*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)