Dual EMA Golden Cross Strategi Terobosan

Penulis:ChaoZhang, Tarikh: 2023-12-20 16:34:58
Tag:

img

Ringkasan

Strategi ini adalah strategi trend berdasarkan operasi salib emas dan salib kematian garis purata bergerak eksponensial (EMA) 5 minit dan 34 minit. Ia menjadi panjang apabila EMA cepat melintasi EMA perlahan dari bawah, dan menjadi pendek apabila EMA cepat melintasi di bawah EMA perlahan dari atas. Ia juga menetapkan stop profit dan stop loss untuk mengawal risiko.

Prinsip Strategi

  1. EMA5 yang cepat dan EMA34 yang perlahan membentuk isyarat dagangan. EMA5 mencerminkan perubahan harga baru-baru ini dan EMA34 mencerminkan perubahan harga jangka menengah.
  2. Apabila EMA5 melintasi EMA34, ia adalah salib emas, yang menunjukkan trend jangka pendek lebih baik daripada trend jangka menengah, jadi pegang kedudukan panjang.
  3. Apabila EMA5 melintasi di bawah EMA34, ia adalah salib kematian, yang menunjukkan trend jangka pendek lebih buruk daripada trend jangka menengah, jadi pegang kedudukan pendek.
  4. Tetapkan stop profit dan stop loss untuk mengunci keuntungan dan mengawal risiko.

Analisis Kelebihan

  1. Menggunakan EMA berganda menyaring pelarian palsu dan mengelakkan terperangkap.
  2. Mengikuti trend jangka menengah meningkatkan peluang keuntungan.
  3. Menetapkan stop profit dan stop loss berkesan mengawal risiko.

Analisis Risiko

  1. EMA berganda mempunyai kesan yang lambat dan mungkin kehilangan peluang perdagangan jangka pendek.
  2. Stop loss yang ditetapkan terlalu luas meningkatkan risiko kerugian.
  3. Hentikan keuntungan yang terlalu ketat kehilangan peluang untuk memaksimumkan keuntungan.

Arahan pengoptimuman

  1. Mengoptimumkan parameter EMA untuk mencari kombinasi parameter terbaik.
  2. Mengoptimumkan titik stop profit dan stop loss untuk mengunci keuntungan yang lebih besar.
  3. Tambah penunjuk lain seperti MACD, KDJ untuk menapis isyarat dan meningkatkan ketepatan.

Ringkasan

Strategi ini menghasilkan isyarat perdagangan dari salib emas dan salib kematian garis EMA berganda, dan menetapkan stop profit dan stop loss untuk mengawal risiko.


/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', 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?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=22.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:',  defval=5)
ma_length01 = input(title='DEMA length:',  defval=34)
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 ? low <= buy_entry_price - sl: 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 ? high >= sel_entry_price + sl : 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)

Lebih lanjut