If you don't mind highs and lows being inside bounds, you can do it this way:
Code:
declare upper;
input lookback = 500;
input within_n_ticks = 3;
def h = highest(high, lookback);
def l = lowest(low, lookback);
def t = tickSize();
def warning_range = within_n_ticks * t;
plot near_high = if close >= h - warning_range then 1 else 0;
plot near_low = if close <= l + warning_range then 1 else 0;
near_high.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
near_low.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
AssignPriceColor(if near_high == 1 then color.green else if near_low == 1 then color.red else color.gray);
You can do it with highestall() and lowestall(), but it will complain about complexity and isn't usable as a scan (if I recall correctly)
Code:
declare upper;
input within_n_ticks = 3;
def h = highestall(high);
def l = lowestall(low);
def t = tickSize();
def warning_range = within_n_ticks * t;
plot near_high = if close >= h - warning_range then 1 else 0;
plot near_low = if close <= l + warning_range then 1 else 0;
near_high.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
near_low.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
AssignPriceColor(if near_high == 1 then color.green else if near_low == 1 then color.red else color.gray);
What you do with it is up to you,
but have fun
-mashume