OPEN-SOURCE SCRIPT

Pivot Points High Low & Missed Reversal Levels [LuxAlgo]

643
//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])

Wyłączenie odpowiedzialności

Informacje i publikacje przygotowane przez TradingView lub jego użytkowników, prezentowane na tej stronie, nie stanowią rekomendacji ani porad handlowych, inwestycyjnych i finansowych i nie powinny być w ten sposób traktowane ani wykorzystywane. Więcej informacji na ten temat znajdziesz w naszym Regulaminie.