Chiến lược này tạo ra tín hiệu mua và bán dựa trên đường chéo vàng và đường chéo chết của đường trung bình chuyển động. Cụ thể, nó sử dụng đường trung bình chuyển động theo cấp số nhân 5 ngày (EMA) và đường trung bình chuyển động theo cấp số nhân kép 34 ngày (DEMA). Khi đường EMA ngắn hạn 5 ngày vượt qua đường DEMA dài hạn 34 ngày, một tín hiệu mua được tạo ra. Khi đường EMA ngắn hạn 5 ngày vượt qua đường DEMA dài hạn 34 ngày, một tín hiệu bán được tạo ra.
Chiến lược này kết hợp cả các yếu tố chéo trung bình xu hướng và trung bình động để có hiệu suất ổn định. Trung bình động như một chỉ số theo xu hướng có thể xác định hiệu quả xu hướng thị trường; Sự kết hợp EMA và DEMA có thể làm mịn dữ liệu giá để tạo ra tín hiệu giao dịch; Các chéo giữa trung bình động ngắn hạn và dài hạn có thể cung cấp tín hiệu giao dịch sớm khi thay đổi xu hướng lớn.
Những rủi ro này có thể được giảm bằng cách điều chỉnh chiều dài trung bình động, tối ưu hóa giờ giao dịch và thiết lập stop loss hợp lý.
Chiến lược này tạo ra các tín hiệu giao dịch thông qua các giao dịch chéo trung bình động đôi, kết hợp với các kỹ thuật theo dõi xu hướng và làm mịn dữ liệu. Đây là một chiến lược theo dõi xu hướng đơn giản và thực tế. Thông qua điều chỉnh tham số và tinh chỉnh logic, nó có thể thích nghi với các sản phẩm và khung thời gian khác nhau, cung cấp tín hiệu sớm về những thay đổi xu hướng lớn và tránh các tín hiệu sai. Đáng khuyến cáo và áp dụng.
/*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"}] args: [["v_input_1",false]] */ //@version=2 strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', shorttitle='S', overlay=true) 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)