Strategi Tren Crossover EMA Dual

Penulis:ChaoZhang, Tanggal: 2023-12-29 15:46:15
Tag:

img

Gambaran umum

Strategi ini menggunakan salib emas dan salib kematian indikator EMA ganda untuk menentukan arah tren saat ini, dan menggabungkan indikator RSI untuk menghindari kehilangan peluang beli dan jual.

Prinsip Strategi

  1. Menghitung garis EMA 10 periode dan 20 periode, masing-masing bernama ma00 dan ma01.
  2. Sinyal beli dihasilkan ketika ma00 melintasi di atas ma01
  3. Sinyal jual dihasilkan ketika ma00 melintasi di bawah ma01
  4. Pada saat yang sama, ketika harga melintasi di atas ma00, jika ma00 di atas ma01, sinyal beli juga akan dihasilkan
  5. Demikian pula, ketika harga melintasi di bawah ma00, jika ma00 di bawah ma01, sinyal jual juga akan dihasilkan.
  6. Melalui validasi ganda seperti itu, beberapa titik beli dan jual dapat dihindari hilang
  7. Atur stop loss dan harga profit untuk mengendalikan risiko

Analisis Keuntungan

  1. Menggunakan EMA ganda untuk menentukan dapat secara efektif menyaring false breakout
  2. Validasi kondisi ganda menghindari pesanan yang hilang
  3. Pengaturan stop loss dan take profit bermanfaat untuk manajemen risiko

Analisis Risiko

  1. Strategi EMA ganda termasuk dalam strategi trend tracking.
  2. Ini tidak dapat secara akurat menentukan titik pembalikan tren, yang dapat menyebabkan kerugian
  3. Pengaturan stop loss point yang tidak benar dapat memperkuat kerugian

Arahan Optimasi

  1. Siklus EMA dapat dioptimalkan dengan benar untuk menemukan kombinasi parameter terbaik
  2. Indikator lain dapat ditambahkan untuk meningkatkan stabilitas strategi
  3. Stop dinamis dapat diatur untuk menyesuaikan titik stop loss secara real time berdasarkan fluktuasi pasar

/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='[STRATEGY][RS]MicuRobert EMA cross V1', shorttitle='S', overlay=true, pyramiding=0, initial_capital=100000)
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true)
trade_session = input(title='Trade Session:',  defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?color.gray:na)
trade_size = input(title='Trade Size:', type=float, defval=1)
tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10)
sl = input(title='Stop loss in pips:', type=float, defval=11.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:',  defval=10)
ma_length01 = input(title='DEMA length:',  defval=20)
price = input(title='Price source:', defval=open)

//  ||--- NO LAG EMA, Credit LazyBear:  ---||
f_LB_zlema(_src, _length)=>
    _ema1=ema(_src, _length)
    _ema2=ema(_ema1, _length)
    _d=_ema1-_ema2
    _zlema=_ema1+_d
//  ||-------------------------------------||

ma00 = f_LB_zlema(price, ma_length00)
ma01 = f_LB_zlema(price, ma_length01)
plot(title='M0', series=ma00, color=black)
plot(title='M1', series=ma01, color=black)

isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0
isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0

buy_entry_price = isnewbuy ? price : buy_entry_price[1]
sel_entry_price = isnewsel ? price : sel_entry_price[1]
plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua)
plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua)
buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1]
sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1]
plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal)
plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal)
buy_ts = buy_appex - sl
sel_ts = sel_appex + sl
plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red)
plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red)

buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true)
buy_entry = buy_cond1 or buy_cond0
buy_close = (not USE_TRAILINGSTOP ? false : low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or 
sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true)
sel_entry = sel_cond1 or sel_cond0
sel_close = (not USE_TRAILINGSTOP ? false : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or 

strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry)
strategy.close('buy', when=buy_close)
strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry)
strategy.close('sell', when=sel_close)

//What i add .!
pos = iff(ma01 < ma00 , 1,
	    iff(ma01 > ma00 , -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue)
plot(ma00, color=red, title="MA")
plot(ma01, color=blue, title="EMA")

Lebih banyak