//@version=6 indicator("IMG 29 — Opening Range Audit", overlay=true) // Educational observation tool. No orders, fill simulation or profitability claim. if timeframe.in_seconds() != 900 runtime.error("Use a standard 15-minute chart.") string tz = "America/New_York" int hh = hour(time, tz) int mm = minute(time, tz) int dayKey = year(time, tz) * 10000 + month(time, tz) * 100 + dayofmonth(time, tz) bool newDay = ta.change(dayKey) != 0 var float rangeHigh = na var float rangeLow = na var int seen = 0 var bool used = false if newDay rangeHigh := na rangeLow := na seen := 0 used := false if barstate.isconfirmed and hh == 9 and mm == 30 rangeHigh := high rangeLow := low seen := 1 if barstate.isconfirmed and hh == 9 and mm == 45 and seen == 1 rangeHigh := math.max(rangeHigh, high) rangeLow := math.min(rangeLow, low) seen := 2 bool ready = seen == 2 and hh >= 10 // A bar starting 11:45 closes at noon and is included. bool inWindow = hh >= 10 and hh < 12 bool signal = barstate.isconfirmed and ready and inWindow and not used and close > rangeHigh and close[1] <= rangeHigh if signal used := true plot(ready ? rangeHigh : na, "Frozen range high", color=color.black, style=plot.style_linebr) plot(ready ? rangeLow : na, "Frozen range low", color=color.gray, style=plot.style_linebr) plotshape(signal, "First qualifying close", shape.triangleup, location.belowbar, color.black, size=size.small) plot(signal ? low - syminfo.mintick : na, "Proposed stop reference", display=display.data_window)