
Strategi ini merupakan strategi pelacakan tren sederhana dengan menghitung EMA garis cepat dan EMA garis lambat, dan membandingkan hubungan besar dan kecil antara dua EMA untuk menentukan arah tren pasar. Ketika EMA garis cepat melintasi EMA garis lambat, Anda harus melakukan lebih banyak, dan ketika EMA garis cepat melintasi EMA garis lambat, Anda harus mengambil posisi kosong.
Indikator inti dari strategi ini adalah EMA garis cepat dan EMA garis lambat. Panjang EMA garis cepat diatur menjadi 21 siklus dan panjang EMA garis lambat diatur menjadi 55 siklus. EMA garis cepat dapat merespon perubahan harga lebih cepat, mencerminkan tren jangka pendek terbaru; EMA garis lambat dapat merespon perubahan harga lebih lambat, memfilter beberapa kebisingan, mencerminkan tren jangka menengah dan panjang.
Ketika garis cepat EMA melewati garis lambat EMA, berarti tren jangka pendek berubah menjadi naik, tren jangka menengah mungkin terjadi pembalikan, ini adalah sinyal untuk melakukan lebih banyak. Ketika garis cepat EMA melewati garis lambat EMA, berarti tren jangka pendek berubah menjadi turun, tren jangka menengah mungkin terjadi pembalikan, ini adalah sinyal untuk melakukan shorting.
Dengan membandingkan EMA cepat dan lambat, titik-titik perubahan tren dapat ditangkap dalam dua skala waktu, jangka pendek dan jangka menengah, yang merupakan strategi pelacakan tren yang khas.
Tindakan pencegahan risiko:
Strategi ini menilai tren pasar melalui persilangan EMA garis cepat dan EMA garis lambat, sederhana, jelas, dan mudah diterapkan. Selain itu, dengan ATR untuk mengatur stop loss, risiko dapat dikendalikan. Dengan mengoptimalkan parameter dan meningkatkan kondisi penyaringan, stabilitas dan profitabilitas strategi dapat ditingkatkan lebih lanjut.
/*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)