OPEN-SOURCE SCRIPT

Pivot Points High Low & Missed Reversal Levels [LuxAlgo]

1018
//version=5
indicator("Pivot Points High Low & Missed Reversal Levels [LuxAlgo]", overlay=true, max_labels_count=500, max_lines_count=500, max_bars_back=500)

length = input(50, 'Pivot Length')

show_reg = input.bool(true, 'Regular Pivots', inline='inline1')
reg_ph_css = input.color(#ef5350, 'High', inline='inline1')
reg_pl_css = input.color(#26a69a, 'Low', inline='inline1')

show_miss = input.bool(true, 'Missed Pivots', inline='inline2')
miss_ph_css = input.color(#ef5350, 'High', inline='inline2')
miss_pl_css = input.color(#26a69a, 'Low', inline='inline2')

label_css = input.color(color.white, 'Text Label Color')

// Initialize variables
var line zigzag = na
var line ghost_level = na
var max = 0., var min = 0.
var max_x1 = 0, var min_x1 = 0
var follow_max = 0., var follow_max_x1 = 0
var follow_min = 0., var follow_min_x1 = 0
var os = 0, var py1 = 0., var px1 = 0

// Pivot calculations
n = bar_index
ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)

max := math.max(high[length], max)
min := math.min(low[length], min)
follow_max := math.max(high[length], follow_max)
follow_min := math.min(low[length], follow_min)

if max > max[1]
max_x1 := n-length
follow_min := low[length]
if min < min[1]
min_x1 := n-length
follow_max := high[length]

if follow_min < follow_min[1]
follow_min_x1 := n-length
if follow_max > follow_max[1]
follow_max_x1 := n-length

// Line and label updates
line.set_x2(ghost_level[1], n)

if ph
if show_miss
if os[1] == 1
label.new(min_x1, min, '👻', color=miss_pl_css, style=label.style_label_up, size=size.small,
tooltip=str.tostring(min, '#.####'))

zigzag := line.new(px1, py1, min_x1, min, color=miss_ph_css, style=line.style_dashed)
px1 := min_x1, py1 := min

if not na(ghost_level)
line.delete(ghost_level)
ghost_level := line.new(px1, py1, px1, py1, color=color.new(reg_pl_css, 50), width=2)
else if ph < max
label.new(max_x1, max, '👻', color=miss_ph_css, style=label.style_label_down, size=size.small,
tooltip=str.tostring(max, '#.####'))
label.new(follow_min_x1, follow_min, '👻', color=miss_pl_css, style=label.style_label_up, size=size.small,
tooltip=str.tostring(min, '#.####'))

zigzag := line.new(px1, py1, max_x1, max, color=miss_pl_css, style=line.style_dashed)
px1 := max_x1, py1 := max
if not na(ghost_level)
line.delete(ghost_level)
ghost_level := line.new(px1, py1, px1, py1, color=color.new(reg_ph_css, 50), width=2)

zigzag := line.new(px1, py1, follow_min_x1, follow_min, color=miss_ph_css, style=line.style_dashed)
px1 := follow_min_x1, py1 := follow_min
if not na(ghost_level)
line.delete(ghost_level)
ghost_level := line.new(px1, py1, px1, py1, color=color.new(reg_pl_css, 50), width=2)

if show_reg
label.new(n-length, ph, '▼', textcolor=label_css, color=reg_ph_css, style=label.style_label_down, size=size.small,
tooltip=str.tostring(ph, '#.####'))
zigzag := line.new(px1, py1, n-length, ph, color=miss_pl_css, style=ph < max or os[1] == 1 ? line.style_dashed : line.style_solid)

py1 := ph, px1 := n-length, os := 1, max := ph, min := ph

if pl
if show_miss
if os[1] == 0
label.new(max_x1, max, '👻', color=miss_ph_css, style=label.style_label_down, size=size.small,
tooltip=str.tostring(max, '#.####'))

zigzag := line.new(px1, py1, max_x1, max, color=miss_pl_css, style=line.style_dashed)
px1 := max_x1, py1 := max
if not na(ghost_level)
line.delete(ghost_level)
ghost_level := line.new(px1, py1, px1, py1, color=color.new(reg_ph_css, 50), width=2)
else if pl > min
label.new(follow_max_x1, follow_max, '👻', color=miss_ph_css, style=label.style_label_down, size=size.small,
tooltip=str.tostring(max, '#.####'))
label.new(min_x1, min, '👻', color=miss_pl_css, style=label.style_label_up, size=size.small,
tooltip=str.tostring(min, '#.####'))

zigzag := line.new(px1, py1, min_x1, min, color=miss_ph_css, style=line.style_dashed)
px1 := min_x1, py1 := min
if not na(ghost_level)
line.delete(ghost_level)
ghost_level := line.new(px1, py1, px1, py1, color=color.new(reg_pl_css, 50), width=2)

zigzag := line.new(px1, py1, follow_max_x1, follow_max, color=miss_ph_css, style=line.style_dashed)
px1 := follow_max_x1, py1 := follow_max
if not na(ghost_level)
line.delete(ghost_level)
ghost_level := line.new(px1, py1, px1, py1, color=color.new(reg_pl_css, 50), width=2)

if show_reg
label.new(n-length, pl, '▲', textcolor=label_css, color=reg_pl_css, style=label.style_label_up, size=size.small,
tooltip=str.tostring(pl, '#.####'))
zigzag := line.new(px1, py1, n-length, pl, color=miss_ph_css, style=pl > min or os[1] == 0 ? line.style_dashed : line.style_solid)

py1 := pl, px1 := n-length, os := 0, max := pl, min := pl

// Handle last bar
var label lbl = na
if barstate.islast
x = 0, y = 0.

prices = array.new_float(0)
prices_x = array.new_int(0)

for i = 0 to n-px1-1
array.push(prices, os == 1 ? low : high)
array.push(prices_x, n-i)

if not na(lbl)
label.delete(lbl)

if os == 1
y := array.min(prices)
x := array.get(prices_x, array.indexof(prices, y))

if show_miss
lbl := label.new(x, y, '👻', color=miss_pl_css, style=label.style_label_up, size=size.small,
tooltip=str.tostring(y, '#.####'))
else
y := array.max(prices)
x := array.get(prices_x, array.indexof(prices, y))

if show_miss
lbl := label.new(x, y, '👻', color=miss_ph_css, style=label.style_label_down, size=size.small,
tooltip=str.tostring(y, '#.####'))

if show_miss
line.delete(line.new(px1, py1, x, y, color=os == 1 ? miss_ph_css : miss_pl_css, style=line.style_dashed)[1])

line.delete(line.new(x, y, n, y, color=color.new(os == 1 ? miss_ph_css : miss_pl_css, 50), width=2)[1])

Disclaimer

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.