Chiến lược đột phá đôi EMA Golden Cross

Tác giả:ChaoZhang, Ngày: 2023-12-20 16:34:58
Tags:

img

Tổng quan

Chiến lược này là một chiến lược theo xu hướng dựa trên các hoạt động chéo vàng và chéo chết của các đường trung bình chuyển động theo hàm số (EMA) 5 phút và 34 phút. Nó đi dài khi EMA nhanh vượt qua EMA chậm từ dưới, và đi ngắn khi EMA nhanh vượt qua dưới EMA chậm từ trên. Nó cũng thiết lập dừng lợi nhuận và dừng lỗ để kiểm soát rủi ro.

Nguyên tắc chiến lược

  1. EMA5 nhanh và EMA34 chậm tạo thành tín hiệu giao dịch. EMA5 phản ánh những thay đổi giá gần đây và EMA34 phản ánh những thay đổi giá trung hạn.
  2. Khi EMA5 vượt qua EMA34, đó là một chữ thập vàng, cho thấy xu hướng ngắn hạn tốt hơn xu hướng trung hạn, vì vậy hãy giữ vị trí dài.
  3. Khi EMA5 vượt qua dưới EMA34, đó là một thập tự tử, cho thấy xu hướng ngắn hạn tồi tệ hơn xu hướng trung hạn, vì vậy giữ vị trí ngắn.
  4. Thiết lập dừng lợi nhuận và dừng lỗ để khóa lợi nhuận và kiểm soát rủi ro.

Phân tích lợi thế

  1. Sử dụng EMA hai bộ lọc breakout sai và tránh bị mắc kẹt.
  2. Tiếp theo xu hướng trung hạn tăng cơ hội lợi nhuận.
  3. Thiết lập dừng lợi nhuận và dừng lỗ có hiệu quả kiểm soát rủi ro.

Phân tích rủi ro

  1. EMA kép có hiệu ứng chậm và có thể bỏ lỡ các cơ hội giao dịch ngắn hạn.
  2. Đặt dừng lỗ quá rộng làm tăng rủi ro mất mát.
  3. Dừng lợi nhuận đặt quá chặt sẽ mất cơ hội để tối đa hóa lợi nhuận.

Hướng dẫn tối ưu hóa

  1. Tối ưu hóa các tham số EMA để tìm ra sự kết hợp tốt nhất.
  2. Tối ưu hóa điểm dừng lợi nhuận và dừng lỗ để khóa lợi nhuận lớn hơn.
  3. Thêm các chỉ số khác như MACD, KDJ để lọc tín hiệu và cải thiện độ chính xác.

Tóm lại

Chiến lược này tạo ra các tín hiệu giao dịch từ các đường chéo vàng và đường chéo chết của các đường EMA kép, và thiết lập dừng lợi nhuận và dừng lỗ để kiểm soát rủi ro. Đây là một xu hướng trung hạn đơn giản và hiệu quả sau chiến lược.


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

Thêm nữa