RSI with bands
An RSI in the sub panel with fixed overbought and oversold levels and Bollinger bands drawn on the RSI itself, candles coloured when the RSI is stretched beyond both, and markers when it turns back.
//@xfscript 1
indicator("RSI Bands")
let length: int = input.int(14, "length", "RSI length", 2, 200, 1)
let band_length: int = input.int(20, "bandLength", "Band length", 2, 200, 1)
let band_mult: float = input.float(2, "bandMult", "Band width", 0.5, 4, 0.1)
let upper: float = input.float(70, "upper", "Overbought", 50, 100, 1)
let lower: float = input.float(30, "lower", "Oversold", 0, 50, 1)
let rsi: float = ta.rsi(close, length)
let band_top: float = ta.bb_upper(rsi, band_length, band_mult)
let band_bottom: float = ta.bb_lower(rsi, band_length, band_mult)
plot.panel_range(0, 100)
plot.panel_line(band_top, "#6B7280", 1, "dashed")
plot.panel_line(band_bottom, "#6B7280", 1, "dashed")
plot.panel_line(rsi, "#A78BFA", 2, "solid")
plot.panel_hline(upper, "#EF4444", "dotted", "Overbought")
plot.panel_hline(50, "#4B5563", "dotted", "")
plot.panel_hline(lower, "#22C55E", "dotted", "Oversold")
let stretched_up: bool = rsi > upper && rsi > band_top
let stretched_down: bool = rsi < lower && rsi < band_bottom
plot.candle_color(stretched_up || stretched_down, stretched_up ? "#EF4444" : "#22C55E", 0.8)
plot.marker(ta.crossunder(rsi, upper), high, "#EF4444", "triangle", "above", 9, 3)
plot.marker(ta.crossover(rsi, lower), low, "#22C55E", "triangle", "below", 9, 3)