The strategy is named “Double Exponential Moving Average RSI Trading Strategy”. It uses Double EMA and Relative Strength Index (RSI) as the main trading indicators to implement automated trading.
The strategy first calculates the Double Exponential Moving Average (MA) of the price, then calculates the RSI based on MA, and further calculates the Exponential Moving Average of RSI (Smooth). It generates buy signals when RSI crosses above its moving average and sell signals when RSI crosses below its moving average. Optionally, the strategy also sets parameters for maximum number of trades per day, trade size as percentage of equity, trading time session, take profit and stop loss in points, and trailing stop in points for risk control.
Counter measures:
The strategy has clear mechanical rules and high reliability overall, suitable for medium-to-long-term trending products. When optimized, it can become a basic trend following mechanical strategy with controllable risks, worth further evaluation on live performance.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title='[STRATEGY][RS]DemaRSI V0', shorttitle='D', overlay=false, initial_capital=100000, currency=currency.USD) src = input(close) ma_length = input(21) rsi_length = input(4) rsi_smooth = input(4) ma = ema(ema(src, ma_length), ma_length) marsi = rsi(ma, rsi_length) smooth = ema(marsi, rsi_smooth) plot(title='M', series=marsi, color=black) plot(title='S', series=smooth, color=red) hline(0) hline(50) hline(100) max_order_per_day = input(6) // strategy.risk.max_intraday_filled_orders(max_order_per_day) trade_size_as_equity_factor = input(false) trade_size = input(type=float, defval=10000.00) * (trade_size_as_equity_factor ? strategy.equity : 1) take_profit_in_points = input(100000) stop_loss_in_points = input(100000) trail_in_points = input(150) USE_SESSION = input(true) trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false) istradingsession = not USE_SESSION ? true : not na(time('1', trade_session)) buy_entry = istradingsession and crossover(marsi, smooth) sel_entry = istradingsession and crossunder(marsi, smooth) strategy.entry('buy', long=true, qty=1, when=buy_entry) strategy.entry('sel', long=false, qty=1, when=sel_entry) strategy.exit('buy.Exit', from_entry='buy', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points) strategy.exit('sel.Exit', from_entry='sel', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points) strategy.close_all(when=not istradingsession)