This strategy is a trend following strategy based on golden cross and death cross operations of the 5-minute and 34-minute exponential moving averages (EMA) lines. It goes long when the fast EMA crosses over the slow EMA from below, and goes short when the fast EMA crosses below the slow EMA from above. It also sets stop profit and stop loss to control risks.
This strategy generates trading signals from golden crosses and death crosses of the dual EMA lines, and sets stop profit and stop loss to control risks. It is a simple and effective mid-term trend following strategy. Further enhancing stable profitability can be achieved by optimizing stop profit/loss parameters and introducing other indicators to filter signals.
/*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)