Pine script 函数';绘制标签';应在每次计算时调用,以确保一致性

Pine script 函数';绘制标签';应在每次计算时调用,以确保一致性,pine-script,Pine Script,我正在努力修复以下警告。我怎样才能修好它们 第158行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第161行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第164行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第167行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第170行:应在每次计算时调用函数“draw_label

我正在努力修复以下警告。我怎样才能修好它们

第158行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第161行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第164行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第167行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第170行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第173行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第176行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第179行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第182行:应在每次计算时调用函数“draw_label”,以确保一致性。建议从此作用域提取调用。 第185行:为确保一致性,应在每次计算时调用函数“draw_label”。建议从此作用域提取调用

/@version=4
研究(“支撑阻力”,叠加=真)
prd=输入(defval=10,title=“轴心周期”,minval=4,maxval=30)
ppsrc=输入(deffal='Close/Open',title=“Source”,options=['High/Low','Close/Open'])
maxnumpp=input(defval=20,title=“最大轴数”,minval=5,maxval=100)
ChannelW=输入(10,title=“最大通道宽度%”,最小值=1)
maxnumsr=input(5,title=“最大序列号”,最小值=1,最大值=10)
最小强度=输入(2,title=“最小强度”,最小值=1,最大值=10)
linestyle=input(定义值='虚线',标题='线样式',选项=['实线','虚线','虚线')
线宽=输入(defval=2,title=“线宽”,minval=1,maxval=4)
电阻颜色=输入(defval=color.red,title=“电阻颜色”,type=input.color)
supportcolor=input(defval=color.lime,title=“Support color”,type=input.color)
showpp=输入(假,title=“显示点”)
浮子ph=na,浮子pl=na
浮动src1=ppsrc==‘高/低’?高:最大值(关闭、打开)
浮动src2=ppsrc==‘高/低’?低:最小值(关闭、打开)
ph:=高(src1、珠江三角洲、珠江三角洲)
pl:=pivotlow(src2、prd、prd)
plotshape(ph和showpp,text=“H”,style=shape.labeldown,color=na,textcolor=color.red,location=location.overbar,transp=0,offset=-prd)
plotshape(pl和showpp,text=“L”,style=shape.labelup,color=na,textcolor=color.lime,location=location.belowbar,transp=0,offset=-prd)
//计算最大S/R通道区宽度
prdhighest=最高(300)
prdlowest=最低(300)
cwidth=(最大值-最小值)*信道W/100
var pivotvals=array.new_float(0)
如果ph或pl
数组.反移位(数据透视值,ph?ph:pl)
如果array.size(pivotvals)>maxnumpp//限制数组大小
array.pop(pivotvals)
获取\u sr\u vals(ind)=>
float lo=array.get(pivotvals,ind)
浮动高=低
int numpp=0
对于y=0的数组。大小(pivotvals)-1
float cpp=array.get(数据透视值,y)
浮点wdth=cpp 0
对于i=数组。大小(sr_强度)-1到0
如果力量
ret=真
如果array.size(高级)大于0
对于i=0到数组大小(sr\u up\u level)-1
//包括在内?
如果array.get(sr_up_level,i)>=lo和array.get(sr_up_level,i)=lo和array.get(sr_dn_level,i)=array.get(sr_strength,i)
数组。移除(sr_强度,i)
数组.移除(高级上一级,i)
数组.删除(sr\U dn\U级别,i)
ret
其他的
ret:=假
打破
ret
//获得最短时间
var int btime=时间
b时间:=na(时间[1])?btime:min(btime,time-time[1])
四舍五入(值)=>
四舍五入(值/syminfo.mintick)*syminfo.mintick
绘制线(ycoor,L样式)=>
行。新的(x1=条形图索引,
y1=ycoor,
x2=条形指数-1,
y2=ycoor,
扩展,
color=ycoor>=close?电阻color:supportcolor,
style=l样式,
宽度=线宽)
st=安全性(syminfo.tickerid,'D',时间)
cl=安全性(syminfo.tickerid,'D',时间\u关闭)
打开=timenow>st和timenow
速率=100*(ycoor-关闭)/关闭
新标签(x=打开?时间+B时间*30:时间[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\u labeldown:label.style\u labelup,
xloc=xloc.bar\u时间,
yloc=yloc.价格)
设置_lx(实验室,林)=>
速率=100*(标签获取(实验室)-关闭)/关闭
label.set_text(lab,text=tostring(label.get_y(lab))+“(“+tostring(rate,,,,,,,,,,,,)+“%”)
label.set_x(实验室,x=打开?时间+b时间*30:时间[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\u style(lab,style=label.get\y(lab)>=close?label.style\u labeldown:label.style\u labelup)
line.set_color(lin,color=line.get_y1(lin)>=close?电阻颜色:supportcolor)
变量行l1=na,变量行l2=na,变量行l3=na,变量行l
//@version=4
study("Support Resistance", overlay = true)
prd = input(defval = 10, title="Pivot Period", minval = 4, maxval = 30)
ppsrc = input(defval = 'Close/Open', 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')
***
_t1 = time
_t2 = time[100]
draw_label(ycoor)=>
    rate = 100 * (ycoor - close) / close
    label.new(x = opened ? _t1 + btime * 30 : _t2, 
              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)
***