This chart-timeframe indicator uses SMA, a 0 to 1 scale, and na for missing windows or zero denominators. The length input starts at 14 as an example setting; it is not an optimized parameter. Intermediate values appear in the Data Window. The line can update during the open bar, while the two alert conditions require a closed chart bar.
Educational calculation audit. Pine syntax validation passed; no strategy orders, higher-timeframe requests or performance claims are included.pine
//@version=6
indicator("DeMarker calculation audit", overlay=false, precision=4)
length = input.int(14, "SMA length", minval=1)
validPair = not na(high) and not na(low) and not na(high[1]) and not na(low[1])
deMax = validPair ? math.max(high - high[1], 0.0) : na
deMin = validPair ? math.max(low[1] - low, 0.0) : na
avgMax = ta.sma(deMax, length)
avgMin = ta.sma(deMin, length)
fullWindow = ta.sma(validPair ? 1.0 : 0.0, length) == 1.0
denominator = avgMax + avgMin
dem = fullWindow and denominator > 0.0 ? avgMax / denominator : na
plot(dem, "DeMarker (0 to 1)", color=color.blue, linewidth=2, style=plot.style_linebr)
hline(0.7, "Upper reference", color=color.gray)
hline(0.5, "Midpoint", color=color.gray, linestyle=hline.style_dotted)
hline(0.3, "Lower reference", color=color.gray)
plot(deMax, "DeMax", display=display.data_window)
plot(deMin, "DeMin", display=display.data_window)
plot(avgMax, "SMA DeMax", display=display.data_window)
plot(avgMin, "SMA DeMin", display=display.data_window)
crossAboveLower = ta.crossover(dem, 0.3)
crossBelowUpper = ta.crossunder(dem, 0.7)
alertcondition(barstate.isconfirmed and crossAboveLower, "Confirmed cross above 0.3", "DeMarker crossed above 0.3 on a closed chart bar.")
alertcondition(barstate.isconfirmed and crossBelowUpper, "Confirmed cross below 0.7", "DeMarker crossed below 0.7 on a closed chart bar.")