Support Resistance - Dynamic v2
Support Resistance - Dynamic v2
if ph or pl
array.unshift(pivotvals, ph ? ph : pl)
if array.size(pivotvals) > maxnumpp // limit the array size
array.pop(pivotvals)
get_sr_vals(ind)=>
float lo = array.get(pivotvals, ind)
float hi = lo
int numpp = 0
for y = 0 to array.size(pivotvals) - 1
float cpp = array.get(pivotvals, y)
float wdth = cpp <= lo ? hi - cpp : cpp - lo
if wdth <= cwidth // fits the max channel width?
lo := cpp <= lo ? cpp : lo
hi := cpp > lo ? cpp : hi
numpp := numpp + 1
[hi, lo, numpp]
round_it(value)=>
round(value / syminfo.mintick) * syminfo.mintick
draw_line(ycoor, Lstyle)=>
line.new(x1 = bar_index,
y1 = ycoor,
x2 = bar_index - 1,
y2 = ycoor,
extend = extend.both,
color = ycoor >= close ? resistancecolor : supportcolor,
style = Lstyle,
width = linewidth)
draw_label(ycoor)=>
label.new(x = time + btime * 30,
y = ycoor, text = tostring(ycoor),
color = ycoor >= close ? color.red : color.lime,
textcolor = ycoor >= close ? color.white : color.black,
style = label.style_labeldown,
xloc = xloc.bar_time,
yloc = yloc.price)
set_lx(lab, lin)=>
label.set_x(lab, x = time + btime * 30)
label.set_color(lab, color = label.get_y(lab) >= close ? color.red :
color.lime)
label.set_textcolor(lab, textcolor = label.get_y(lab) >= close ? color.white :
color.black)
line.set_color(lin, color = line.get_y1(lin) >= close ? resistancecolor :
supportcolor)
var line l1 = na, var line l2 = na, var line l3 = na, var line l4 = na, var line l5
= na, var line l6 = na, var line l7 = na, var line l8 = na, var line l9 = na, var
line l10 = na
var label lb1 = na, var label lb2 = na, var label lb3 = na, var label lb4 = na, var
label lb5 = na, var label lb6 = na, var label lb7 = na, var label lb8 = na, var
label lb9 = na, var label lb10 = na
if ph or pl
//because of new calculation, remove old S/R levels
array.clear(sr_up_level)
array.clear(sr_dn_level)
array.clear(sr_strength)
//find S/R zones
for x = 0 to array.size(pivotvals) - 1
[hi, lo, strength] = get_sr_vals(x)
if check_sr(hi, lo, strength)
loc = find_loc(strength)
// if strength is in first maxnumsr sr then insert it to the arrays
if loc < maxnumsr and strength >= min_strength
array.insert(sr_strength, loc, strength)
array.insert(sr_up_level, loc, hi)
array.insert(sr_dn_level, loc, lo)
// keep size of the arrays = 5
if array.size(sr_strength) > maxnumsr
array.pop(sr_strength)
array.pop(sr_up_level)
array.pop(sr_dn_level)
f_crossed_over()=>
ret = false
if array.size(sr_up_level) > 0
for x = 0 to array.size(sr_up_level) - 1
float mid = round_it((array.get(sr_up_level, x) +
array.get(sr_dn_level, x)) / 2)
if close[1] <= mid and close > mid
ret := true
ret
f_crossed_under()=>
ret = false
if array.size(sr_up_level) > 0
for x = 0 to array.size(sr_up_level) - 1
float mid = round_it((array.get(sr_up_level, x) +
array.get(sr_dn_level, x)) / 2)
if close[1] >= mid and close < mid
ret := true
ret