
Strategi ini adalah strategi untuk mengesan trend yang mudah dengan mengira EMA garis cepat dan EMA garis lambat, dan membandingkan hubungan besar dan kecil antara kedua-dua EMA untuk menentukan arah trend pasaran. Apabila EMA garis cepat melintasi EMA garis lambat, lakukan lebih banyak, dan apabila EMA garis cepat melintasi EMA garis perlahan, lakukan kosong.
Penunjuk teras strategi ini adalah EMA garis cepat dan EMA garis perlahan. Panjang EMA garis cepat ditetapkan menjadi 21 kitaran dan EMA garis perlahan ditetapkan menjadi 55 kitaran. EMA garis cepat dapat bertindak balas lebih cepat terhadap perubahan harga, mencerminkan trend jangka pendek terkini; EMA garis perlahan dapat bertindak balas lebih perlahan terhadap perubahan harga, menyaring sebahagian daripada kebisingan, mencerminkan trend jangka menengah dan panjang.
Apabila garis cepat EMA melintasi garis perlahan EMA, menunjukkan bahawa trend jangka pendek berubah menjadi naik, dan trend jangka panjang mungkin bertukar, ini adalah isyarat untuk melakukan lebih banyak. Apabila garis cepat EMA melintasi garis perlahan EMA, menunjukkan bahawa trend jangka pendek berubah menjadi turun, dan trend jangka panjang mungkin bertukar, ini adalah isyarat untuk melakukan lebih banyak.
Dengan membandingkan EMA perlahan-lahan, titik-titik perubahan trend dapat ditangkap dalam dua skala masa jangka pendek dan jangka menengah, yang merupakan strategi pengesanan trend yang tipikal.
Langkah-langkah untuk menangani risiko:
Strategi ini menilai trend pasaran melalui persilangan EMA garis cepat dan EMA garis perlahan, mudah, jelas, dan mudah dilaksanakan. Di samping itu, ia digabungkan dengan ATR untuk menetapkan stop loss, risiko yang boleh dikawal. Dengan mengoptimumkan parameter dan menambah syarat penapisan, anda dapat meningkatkan kestabilan dan keuntungan strategi.
/*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)