I want to convert this tradingview indicator support and resistance v2 codicator
Forums › ProRealTime forum Français › Support ProBuilder › I want to convert this tradingview indicator support and resistance v2 codicator
- This topic has 2 replies, 2 voices, and was last updated 1 year ago by robertogozzi.
-
-
05/30/2023 at 11:41 AM #215401
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © LonesomeTheBlue//@version=5
indicator(‘Support Resistance – Dynamic v2’, ‘SRv2′, overlay=true)
prd = input.int(defval=10, title=’Pivot Period’, minval=4, maxval=30, group=’Setup’)
ppsrc = input.string(defval=’High/Low’, title=’Source’, options=[‘High/Low’, ‘Close/Open’], group=’Setup’)
maxnumpp = input.int(defval=20, title=’ Maximum Number of Pivot’, minval=5, maxval=100, group=’Setup’)
ChannelW = input.int(defval=10, title=’Maximum Channel Width %’, minval=1, group=’Setup’)
maxnumsr = input.int(defval=5, title=’ Maximum Number of S/R’, minval=1, maxval=10, group=’Setup’)
min_strength = input.int(defval=2, title=’ Minimum Strength’, minval=1, maxval=10, group=’Setup’)
labelloc = input.int(defval=20, title=’Label Location’, group=’Colors’, tooltip=’Positive numbers reference future bars, negative numbers reference histical bars’)
linestyle = input.string(defval=’Dashed’, title=’Line Style’, options=[‘Solid’, ‘Dotted’, ‘Dashed’], group=’Colors’)
linewidth = input.int(defval=2, title=’Line Width’, minval=1, maxval=4, group=’Colors’)
resistancecolor = input.color(defval=color.red, title=’Resistance Color’, group=’Colors’)
supportcolor = input.color(defval=color.lime, title=’Support Color’, group=’Colors’)
showpp = input(false, title=’Show Point Points’)float src1 = ppsrc == ‘High/Low’ ? high : math.max(close, open)
float src2 = ppsrc == ‘High/Low’ ? low : math.min(close, open)
float ph = ta.pivothigh(src1, prd, prd)
float pl = ta.pivotlow(src2, prd, prd)plotshape(ph and showpp, text=’H’, style=shape.labeldown, color=na, textcolor=color.new(color.red, 0), location=location.abovebar, offset=-prd)
plotshape(pl and showpp, text=’L’, style=shape.labelup, color=na, textcolor=color.new(color.lime, 0), location=location.belowbar, offset=-prd)Lstyle = linestyle == ‘Dashed’ ? line.style_dashed : linestyle == ‘Solid’ ? line.style_solid : line.style_dotted
//calculate maximum S/R channel zone width
prdhighest = ta.highest(300)
prdlowest = ta.lowest(300)
cwidth = (prdhighest – prdlowest) * ChannelW / 100var pivotvals = array.new_float(0)
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 by 1
float cpp = array.get(pivotvals, y)
float wdth = cpp <= lo ? hi – cpp : cpp – lo
if wdth <= cwidth // fits the max channel width?
if cpp <= hi
lo := math.min(lo, cpp)
else
hi := math.max(hi, cpp)numpp += 1
numpp
[hi, lo, numpp]var sr_up_level = array.new_float(0)
var sr_dn_level = array.new_float(0)
sr_strength = array.new_float(0)find_loc(strength) =>
ret = array.size(sr_strength)
for i = ret > 0 ? array.size(sr_strength) – 1 : na to 0 by 1
if strength <= array.get(sr_strength, i)
break
ret := i
ret
retcheck_sr(hi, lo, strength) =>
ret = true
for i = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) – 1 : na by 1
//included?
if array.get(sr_up_level, i) >= lo and array.get(sr_up_level, i) <= hi or array.get(sr_dn_level, i) >= lo and array.get(sr_dn_level, i) <= hi
if strength >= array.get(sr_strength, i)
array.remove(sr_strength, i)
array.remove(sr_up_level, i)
array.remove(sr_dn_level, i)
ret
else
ret := false
ret
break
retvar sr_lines = array.new_line(11, na)
var sr_labels = array.new_label(11, na)for x = 1 to 10 by 1
rate = 100 * (label.get_y(array.get(sr_labels, x)) – close) / close
label.set_text(array.get(sr_labels, x), text=str.tostring(label.get_y(array.get(sr_labels, x))) + ‘(‘ + str.tostring(rate, ‘#.##’) + ‘%)’)
label.set_x(array.get(sr_labels, x), x=bar_index + labelloc)
label.set_color(array.get(sr_labels, x), color=label.get_y(array.get(sr_labels, x)) >= close ? color.red : color.lime)
label.set_textcolor(array.get(sr_labels, x), textcolor=label.get_y(array.get(sr_labels, x)) >= close ? color.white : color.black)
label.set_style(array.get(sr_labels, x), style=label.get_y(array.get(sr_labels, x)) >= close ? label.style_label_down : label.style_label_up)
line.set_color(array.get(sr_lines, x), color=line.get_y1(array.get(sr_lines, x)) >= close ? resistancecolor : supportcolor)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 by 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)for x = 1 to 10 by 1
line.delete(array.get(sr_lines, x))
label.delete(array.get(sr_labels, x))for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) – 1 : na by 1
float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2)
rate = 100 * (mid – close) / close
array.set(sr_labels, x + 1, label.new(x=bar_index + labelloc, y=mid, text=str.tostring(mid) + ‘(‘ + str.tostring(rate, ‘#.##’) + ‘%)’, color=mid >= close ? color.red : color.lime, textcolor=mid >= close ? color.white : color.black, style=mid >= close ? label.style_label_down : label.style_label_up))array.set(sr_lines, x + 1, line.new(x1=bar_index, y1=mid, x2=bar_index – 1, y2=mid, extend=extend.both, color=mid >= close ? resistancecolor : supportcolor, style=Lstyle, width=linewidth))
f_crossed_over() =>
ret = false
for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) – 1 : na by 1
float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2)
if close[1] <= mid and close > mid
ret := true
ret
retf_crossed_under() =>
ret = false
for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) – 1 : na by 1
float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2)
if close[1] >= mid and close < mid
ret := true
ret
retalertcondition(f_crossed_over(), title=’Resistance Broken’, message=’Resistance Broken’)
alertcondition(f_crossed_under(), title=’Support Broken’, message=’Support Broken’)05/30/2023 at 12:28 PM #21543105/30/2023 at 11:51 PM #215462N’ajoutez pas de requêtes différentes à des sujets existants, vous devriez en commencer un nouveau.
Ce forum est consacré au codage pour la plateforme ProRealTime uniquement, qui est gratuite.
Pour les conversions vers d’autres plateformes, suivez ce lien pour les services payants https://www.prorealcode.com/trading-programming-services/.
Merci 🙂
-
AuthorPosts
Find exclusive trading pro-tools on