Convert “Support Resistance – Dynamic v2” from tradingview to prorealtime

Viewing 1 post (of 1 total)
  • Author
    Posts
  • #169539 quote
    datageekdatageek
    Participant
    Average
    // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
    // © LonesomeTheBlue
    
    //@version=4
    study("Support Resistance - Dynamic v2", "SRv2", overlay = true)
    prd = input(defval = 10, title="Pivot Period", minval = 4, maxval = 30)
    ppsrc = input(defval = 'High/Low', title="Source", options = ['High/Low', 'Close/Open'])
    maxnumpp = input(defval = 20, title =" Maximum Number of Pivot", minval = 5, maxval = 100)
    ChannelW = input(10, title = "Maximum Channel Width %", minval = 1)
    maxnumsr = input(5, title =" Maximum Number of S/R", minval = 1, maxval = 10)
    min_strength = input(2, title =" Minimum Strength", minval = 1, maxval = 10)
    linestyle = input(defval = 'Dashed', title = "Line Style", options = ['Solid', 'Dotted', 'Dashed'])
    linewidth = input(defval = 2, title = "Line Width", minval = 1, maxval = 4)
    resistancecolor = input(defval = color.red, title = "Resistance Color", type = input.color)
    supportcolor = input(defval = color.lime, title = "Support Color", type = input.color)
    showpp = input(false, title = "Show Point Points")
    
    float ph = na, float pl = na
    float src1 =  ppsrc == 'High/Low' ? high : max(close, open)
    float src2 =  ppsrc == 'High/Low' ? low: min(close, open)
    ph := pivothigh(src1, prd, prd)
    pl := pivotlow(src2, prd, prd)
    
    plotshape(ph and showpp, text = "H",  style = shape.labeldown, color = na, textcolor = color.red, location = location.abovebar, transp = 0, offset = -prd)
    plotshape(pl and showpp, text = "L",  style = shape.labelup, color = na, textcolor = color.lime, location = location.belowbar, transp = 0, offset = -prd)
    
    //calculate maximum S/R channel zone width
    prdhighest =  highest(300)
    prdlowest = lowest(300)
    cwidth = (prdhighest - prdlowest) * ChannelW / 100
    
    var 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
            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]  
    
    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)
        if ret > 0
            for i = array.size(sr_strength) - 1 to 0
                if strength <= array.get(sr_strength, i)
                    break
                ret := i
        ret
    
    check_sr(hi, lo, strength)=>
        ret = true
        if array.size(sr_up_level) > 0
            for i = 0 to array.size(sr_up_level) - 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
                    break
        ret
    
    //get min time
    var int btime = time
    btime := na(time[1]) ? btime : min(btime, time - time[1])
    
    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) 
    
    st = security(syminfo.tickerid, 'D', time)
    cl = security(syminfo.tickerid, 'D', time_close)
    opened = timenow > st and timenow < cl
        
    draw_label(ycoor)=>
        rate = 100 * (ycoor - close) / close
        label.new(x = opened ? time + btime * 30 : time[100], 
                  y = ycoor, text = tostring(ycoor) + "(" + tostring(rate,'#.##') + "%)", 
                  color = ycoor >= close ? color.red : color.lime,
                  textcolor = ycoor >= close ? color.white : color.black, 
                  style = ycoor >= close ? label.style_labeldown : label.style_labelup, 
                  xloc = xloc.bar_time, 
                  yloc = yloc.price)
    
    set_lx(lab, lin)=>
        rate = 100 * (label.get_y(lab) - close) / close
        label.set_text(lab, text = tostring(label.get_y(lab)) + "(" + tostring(rate,'#.##') + "%)")
        label.set_x(lab, x = opened ? time + btime * 30 : time[100])
        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)
        label.set_style(lab, style = label.get_y(lab) >= close ? label.style_labeldown : label.style_labelup)
        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
    
    set_lx(lb1, l1), set_lx(lb2, l2), set_lx(lb3, l3), set_lx(lb4, l4), set_lx(lb5, l5), set_lx(lb6, l6), set_lx(lb7, l7), set_lx(lb8, l8), set_lx(lb9, l9), set_lx(lb10, l10)
    
    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)
        
        line.delete(l1), line.delete(l2), line.delete(l3), line.delete(l4), line.delete(l5), line.delete(l6), line.delete(l7), line.delete(l8), line.delete(l9), line.delete(l10)
        label.delete(lb1), label.delete(lb2), label.delete(lb3), label.delete(lb4), label.delete(lb5), label.delete(lb6), label.delete(lb7), label.delete(lb8), label.delete(lb9), label.delete(lb10)
        if array.size(sr_up_level)
            Lstyle = linestyle == 'Dashed' ? line.style_dashed :
                     linestyle == 'Solid' ? line.style_solid :
                     line.style_dotted
            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 x == 0
                    l1 := draw_line(mid, Lstyle)
                    lb1 := draw_label(mid)
                if x == 1
                    l2 := draw_line(mid, Lstyle)
                    lb2 := draw_label(mid)
                if x == 2
                    l3 := draw_line(mid, Lstyle)
                    lb3 := draw_label(mid)
                if x == 3
                    l4 := draw_line(mid, Lstyle)
                    lb4 := draw_label(mid)
                if x == 4
                    l5 := draw_line(mid, Lstyle)
                    lb5 := draw_label(mid)
                if x == 5
                    l6 := draw_line(mid, Lstyle)
                    lb6 := draw_label(mid)
                if x == 6
                    l7 := draw_line(mid, Lstyle)
                    lb7 := draw_label(mid)
                if x == 7
                    l8 := draw_line(mid, Lstyle)
                    lb8 := draw_label(mid)
                if x == 8
                    l9 := draw_line(mid, Lstyle)
                    lb9 := draw_label(mid)
                if x == 9
                    l10 := draw_line(mid, Lstyle)
                    lb10 := draw_label(mid)
    
    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
    
    alertcondition(f_crossed_over(), title='Resistance Broken', message='Resistance Broken')
    alertcondition(f_crossed_under(), title='Support Broken', message='Support Broken')
    

    Is it possible to convert this indicator for use in prorealtime.

    https://www.tradingview.com/script/va09eWAp-Support-Resistance-Dynamic-v2/

    auto-support-and-resistance-tradingview.png auto-support-and-resistance-tradingview.png Screenshot-2021-05-12-22.11.16.png Screenshot-2021-05-12-22.11.16.png Screenshot-2021-05-12-22.14.51.png Screenshot-2021-05-12-22.14.51.png
Viewing 1 post (of 1 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

Convert “Support Resistance – Dynamic v2” from tradingview to prorealtime


ProBuilder: Indicators & Custom Tools

New Reply
Author
author-avatar
datageek @datageek Participant
Summary

This topic contains 1 voice and has 0 replies.

Topic Details
Forum: ProBuilder: Indicators & Custom Tools
Language: English
Started: 05/12/2021
Status: Active
Attachments: 3 files
ProRealCode ProRealCode
Loading...