Strategi Pengesanan Trend EMA GOLDEN CROSS

Penulis:ChaoZhang, Tarikh: 2023-11-21 15:10:54
Tag:

img

Ringkasan

Strategi ini mengira garis EMA pantas dan garis EMA perlahan dan membandingkan hubungan saiz antara kedua-dua EMA untuk menentukan arah trend pasaran. Ia tergolong dalam strategi pengesanan trend yang mudah. Apabila EMA pantas melintasi di atas EMA perlahan, pergi panjang. Apabila EMA pantas melintasi di bawah EMA perlahan, pergi pendek. Ini adalah strategi silang emas EMA ganda biasa.

Logika Strategi

Indikator teras strategi ini adalah EMA pantas dan EMA perlahan. Panjang EMA pantas ditetapkan kepada 21 tempoh dan panjang EMA perlahan ditetapkan kepada 55 tempoh. EMA pantas boleh bertindak balas terhadap perubahan harga lebih cepat, mencerminkan trend jangka pendek baru-baru ini; EMA perlahan bertindak balas lebih perlahan terhadap perubahan harga, menapis beberapa bunyi bising dan mencerminkan trend jangka sederhana hingga panjang.

Apabila EMA cepat melintasi di atas EMA perlahan, ia menunjukkan bahawa trend jangka pendek telah berubah ke atas dan trend jangka sederhana hingga panjang mungkin telah berbalik, yang merupakan isyarat untuk pergi panjang.

Dengan membandingkan EMA pantas dan perlahan, ia menangkap titik pembalikan trend pada dua skala masa, jangka pendek dan jangka sederhana hingga panjang, yang merupakan strategi pengesanan trend biasa.

Kelebihan

  1. Logik yang mudah dan jelas, mudah difahami dan dilaksanakan
  2. Penyesuaian parameter yang fleksibel, tempoh EMA cepat dan perlahan boleh disesuaikan
  3. ATR stop loss dan mengambil keuntungan yang boleh dikonfigurasi untuk risiko yang boleh dikawal

Risiko

  1. Masa yang tidak sesuai untuk persimpangan EMA, risiko kehilangan titik kemasukan terbaik
  2. Isyarat tidak sah yang kerap semasa penyatuan pasaran, menyebabkan kerugian
  3. Tetapan parameter ATR yang tidak betul, yang membawa kepada hentian yang terlalu longgar atau terlalu agresif

Pengurusan Risiko:

  1. Mengoptimumkan parameter garis EMA pantas dan perlahan untuk mencari kombinasi yang optimum
  2. Tambah mekanisme penapisan untuk mengelakkan isyarat yang tidak sah daripada penyatuan pasaran
  3. Ujian dan pengoptimuman parameter ATR untuk memastikan stop loss dan mengambil keuntungan yang munasabah

Kawasan Peningkatan

  1. Stabiliti ujian parameter tempoh EMA yang berbeza berdasarkan kaedah statistik
  2. Tambah keadaan penapisan digabungkan dengan penunjuk lain untuk mengelakkan isyarat yang tidak sah
  3. Mengoptimumkan parameter ATR untuk mendapatkan nisbah Stop Loss / Take Profit terbaik

Ringkasan

Strategi ini menilai trend berdasarkan persilangan EMA, yang mudah dan jelas untuk dilaksanakan. Dengan hentian berasaskan ATR, risiko dapat dikawal. Penambahbaikan lanjut terhadap kestabilan dan keuntungan boleh dibuat melalui pengoptimuman parameter dan keadaan penapisan.


/*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)
 


Lebih lanjut