//@version=4 study("Zig Zag High Low", overlay = true) length = input(4, title = "High/Low length") h = highest(high, length * 2 + 1) l = lowest(low, length * 2 + 1) f_isMin(len) => l == low[len] f_isMax(len) => h == high[len] var dirUp = false var lastLow = high * 100 var lastHigh = 0.0 var timeLow = bar_index var timeHigh = bar_index var line li = na f_drawLine() => _li_color = dirUp ? color.teal : color.orange line.new( timeHigh - length, lastHigh, timeLow - length, lastLow, xloc.bar_index, color=_li_color, width=2 ) if dirUp if (f_isMin(length) and low[length] < lastLow) lastLow := low[length] timeLow := bar_index line.delete(li) li := f_drawLine() if (f_isMax(length) and high[length] > lastLow) lastHigh := high[length] timeHigh := bar_index dirUp := false li := f_drawLine() if not dirUp if (f_isMax(length) and high[length] > lastHigh) lastHigh := high[length] timeHigh := bar_index line.delete(li) li := f_drawLine() if f_isMin(length) and low[length] < lastHigh lastLow := low[length] timeLow := bar_index dirUp := true li := f_drawLine() if (f_isMax(length) and high[length] > lastLow) lastHigh := high[length] timeHigh := bar_index dirUp := false li := f_drawLine()