This complete v6 indicator repeats six hypothetical cases across chart bars. The values are test coordinates, not market observations. Add it to a chart and open the Data Window. Use Case number to locate each row in the next table; the cycle is based on bar_index, so it is not tied to specific timestamps. Reject invalid ranges is on by default.
Fixed OHLC inputs isolate drawing behavior from market data.pinescript
//@version=6
indicator("plotcandle input cases", overlay = false)
rejectInvalid = input.bool(true, "Reject invalid ranges")
caseNumber = bar_index % 6
float o = caseNumber == 1 ? 102.0 : caseNumber == 2 ? na : 100.0
float h = caseNumber == 1 ? 105.0 : caseNumber == 3 ? 99.0 : caseNumber == 4 ? 101.0 : 104.0
float l = caseNumber == 1 ? 99.0 : caseNumber == 3 ? 103.0 : caseNumber == 4 ? 99.0 : caseNumber == 5 ? na : 98.0
float c = caseNumber == 1 or caseNumber == 4 ? 100.0 : 102.0
hasOHLC = not na(o) and not na(h) and not na(l) and not na(c)
rangeIsValid = hasOHLC and h >= math.max(o, c) and l <= math.min(o, c) and h >= l
canDraw = hasOHLC and (not rejectInvalid or rangeIsValid)
bodyColor = c > o ? color.teal : c < o ? color.orange : color.gray
plotcandle(canDraw ? o : na, h, l, c, title = "Test candles", color = bodyColor, wickcolor = color.gray, bordercolor = bodyColor)
plot(caseNumber, "Case number", display = display.data_window)
plot(o, "Input open", display = display.data_window)
plot(h, "Input high", display = display.data_window)
plot(l, "Input low", display = display.data_window)
plot(c, "Input close", display = display.data_window)
plot(rangeIsValid ? 1 : 0, "Valid range: 1=yes", display = display.data_window)