This strategy mainly uses the Relative Strength Index (RSI) combined with Bollinger Bands for trading signal judgment. Specifically, it goes long when the RSI crosses above the oversold level and below the lower Bollinger Band, and goes short when the RSI crosses below the overbought level and above the upper Bollinger Band.
The strategy first calculates the RSI indicator and Bollinger Bands. The RSI indicator reflects the relative strength of the trading instrument. When the RSI is below the oversold zone (default 30), it means the instrument is oversold and should buy. Bollinger Bands include upper band, middle band and lower band, which reflects well the fluctuation range of prices. Buying near the lower band and selling near the upper band can provide relatively reliable signals. This strategy combines the RSI indicator and Bollinger Bands for trading signal judgment. It generates buy signal when the RSI rises from the oversold zone to above it (default 30), and price rises from below the lower band to above it; it generates sell signal when the RSI falls from the overbought zone to below it (default 70), and price falls from above the upper band to below it.
Solutions:
The overall strategy is robust, effectively combines RSI and Bollinger Bands for stop loss. Further improvement can be achieved by testing and optimizing parameters. Also need to be aware of potential signal missing risks due to strict rules. In general, this is a reliable quantitative trading strategy.
/*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("BB + RSI 20MIN,", shorttitle="BBRSI 20MIN", overlay=true ) // Strategy Tester Start Time sYear = input(2019, title = "Start Year") sMonth = input(04, title = "Start Month", minval = 01, maxval = 12) sDay = input(01, title = "Start Day", minval = 01, maxval = 31) sHour = input(00, title = "Start Hour", minval = 00, maxval = 23) sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59) startTime = true ///////////// RSI RSIlength = input(9,title="RSI Period Length") RSIoverSold = input(30, minval=1,title="RSIL") RSIoverBought = input(69, minval=1,title="RSIh") price = open vrsi = rsi(price, RSIlength) ///////////// Bollinger Bands BBlength = input(60, minval=1,title="Bollinger Period Length") BBmult = input(2.0, minval=0.001, maxval=50,title="Bb") BBbasis = sma(price, BBlength) BBdev = BBmult * stdev(price, BBlength) BBupper = BBbasis + BBdev BBlower = BBbasis - BBdev source = close buyEntry = crossover(source, BBlower) sellEntry = crossunder(source, BBupper) plot(BBbasis, color=aqua,title="Bollinger Bands SMA Basis Line") p1 = plot(BBupper, color=silver,title="Bollinger Bands Upper Line") p2 = plot(BBlower, color=silver,title="Bollinger Bands Lower Line") fill(p1, p2) ///////////// Colors switch1=input(true, title="Enable Bar Color?") switch2=input(true, title="Enable Background Color?") TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? green : na barcolor(switch1?TrendColor:na) bgcolor(switch2?TrendColor:na,transp=50) ///////////// RSI + Bollinger Bands Strategy if (not na(vrsi)) if (crossover(vrsi, RSIoverSold) and crossover(source, BBlower)) strategy.entry("RSI_BB_L", strategy.long and startTime, stop=BBlower, comment="RSI_BB_L") else strategy.cancel(id="RSI_BB_L") if (crossunder(vrsi, RSIoverBought) and crossunder(source, BBupper)) strategy.entry("RSI_BB_S", strategy.short and startTime, stop=BBupper,comment="RSI_BB_S") else strategy.cancel(id="RSI_BB_S") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)