This indicator plots RO and ±RB in a separate pane. Its Data Window exposes all ten layers, M and D. A pale band marks RO from −5 to +5; a darker background marks completed bars meeting the three-bar neutral rule above. The optional alert detects a completed-chart-bar cross above zero, independently of that neutral rule. It places no orders.
Fixed ten-layer, two-bar SMA implementation with an 11-close denominator. Values remain unavailable until the layers exist and the denominator is positive.pine
//@version=6
indicator("Rainbow oscillator: ten SMA layers", overlay = false)
a1 = ta.sma(close, 2)
a2 = ta.sma(a1, 2)
a3 = ta.sma(a2, 2)
a4 = ta.sma(a3, 2)
a5 = ta.sma(a4, 2)
a6 = ta.sma(a5, 2)
a7 = ta.sma(a6, 2)
a8 = ta.sma(a7, 2)
a9 = ta.sma(a8, 2)
a10 = ta.sma(a9, 2)
meanLayer = (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10) / 10
layerHigh = math.max(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
layerLow = math.min(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
closeRange = ta.highest(close, 11) - ta.lowest(close, 11)
ready = not na(a10) and closeRange > 0
ro = ready ? 100 * (close - meanLayer) / closeRange : na
rb = ready ? 100 * (layerHigh - layerLow) / closeRange : na
plot(ro, "RO", color = color.blue, linewidth = 2)
plot(rb, "Positive bandwidth", color = color.gray)
plot(-rb, "Negative bandwidth", color = color.gray)
hline(0, "Zero")
upperNeutral = hline(5, "Illustrative neutral upper", color = color.new(color.gray, 60))
lowerNeutral = hline(-5, "Illustrative neutral lower", color = color.new(color.gray, 60))
fill(upperNeutral, lowerNeutral, color = color.new(color.gray, 95))
neutralNow = ready and math.abs(ro) <= 5 and rb <= 10
neutralThree = neutralNow and neutralNow[1] and neutralNow[2]
bgcolor(barstate.isconfirmed and neutralThree ? color.new(color.gray, 85) : na, title = "Three-bar neutral condition")
plot(a1, "Layer 1", display = display.data_window)
plot(a2, "Layer 2", display = display.data_window)
plot(a3, "Layer 3", display = display.data_window)
plot(a4, "Layer 4", display = display.data_window)
plot(a5, "Layer 5", display = display.data_window)
plot(a6, "Layer 6", display = display.data_window)
plot(a7, "Layer 7", display = display.data_window)
plot(a8, "Layer 8", display = display.data_window)
plot(a9, "Layer 9", display = display.data_window)
plot(a10, "Layer 10", display = display.data_window)
plot(meanLayer, "Layer mean", display = display.data_window)
plot(closeRange, "Close range", display = display.data_window)
crossUp = ta.crossover(ro, 0)
alertcondition(barstate.isconfirmed and crossUp, "RO close above zero", "Rainbow oscillator crossed above zero on a completed chart bar.")