顺序计数和标签触发器 Pine 脚本
Sequential count and label triggers Pine script
我正在尝试计算和标记 rsi crosses 超过较低频带时的长触发。每次 crossover 触发器发生时,都会出现一个新标签,其中包含 os1、os2、os3。最多 3,然后回到 1。我分析并使用了 TD 顺序脚本中的一些代码,但坦率地说,我不知道它是如何工作的。我使用默认的 RSI 脚本进行研究。它一直给我 os 1. 有什么线索出错了吗?非常感谢任何建议。 :) 谢谢!!
//@version=4
study(title="Relative Strength Index", shorttitle="RSI", format=format.price, precision=2, resolution="")
len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#8E1599)
upper = input(70)
lower = input(30)
band1 = hline(upper, "Upper Band", color=#C0C0C0)
band0 = hline(lower, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")
os = crossover(rsi, lower)
position = rsi
plot (os?position:na,color=color.red, style=plot.style_circles,linewidth=3)
oss = 0
oss := os==1 ? nz(oss[1])==0 ? 1: oss[1]==1 ?2: oss[1]==2 ? 3: 0: 0
plotshape(oss==1?true:na,style=shape.arrowup,text="os1",color=color.blue,location=location.absolute)
plotshape(oss==2?true:na,style=shape.arrowup,text="os2",color=color.blue,location=location.absolute)
plotshape(oss==3?true:na,style=shape.arrowup,text="os3",color=color.blue,location=location.absolute)
您需要使用 'var' 关键字来防止变量在每次更新时重置为零。嵌套的 ?: 表达式也有问题。这是经过修改的脚本,可保持对较低波段交叉的计数并在 3 后重置。
//@version=4
study(title="Relative Strength Index", shorttitle="RSI", format=format.price, precision=2, resolution="")
len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#8E1599)
upper = input(70)
lower = input(30)
band1 = hline(upper, "Upper Band", color=#C0C0C0)
band0 = hline(lower, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")
os = crossover(rsi, lower)
position = rsi
plot (os?position:na,color=color.red, style=plot.style_circles,linewidth=3)
var oss = 0
if(os)
oss := oss[1]==3 ? 1 : oss[1]+1
plotshape(oss==1 and os?true:na,style=shape.arrowup,text="os1",color=color.blue,location=location.absolute)
plotshape(oss==2 and os?true:na,style=shape.arrowup,text="os2",color=color.blue,location=location.absolute)
plotshape(oss==3 and os?true:na,style=shape.arrowup,text="os3",color=color.blue,location=location.absolute)
我正在尝试计算和标记 rsi crosses 超过较低频带时的长触发。每次 crossover 触发器发生时,都会出现一个新标签,其中包含 os1、os2、os3。最多 3,然后回到 1。我分析并使用了 TD 顺序脚本中的一些代码,但坦率地说,我不知道它是如何工作的。我使用默认的 RSI 脚本进行研究。它一直给我 os 1. 有什么线索出错了吗?非常感谢任何建议。 :) 谢谢!!
//@version=4
study(title="Relative Strength Index", shorttitle="RSI", format=format.price, precision=2, resolution="")
len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#8E1599)
upper = input(70)
lower = input(30)
band1 = hline(upper, "Upper Band", color=#C0C0C0)
band0 = hline(lower, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")
os = crossover(rsi, lower)
position = rsi
plot (os?position:na,color=color.red, style=plot.style_circles,linewidth=3)
oss = 0
oss := os==1 ? nz(oss[1])==0 ? 1: oss[1]==1 ?2: oss[1]==2 ? 3: 0: 0
plotshape(oss==1?true:na,style=shape.arrowup,text="os1",color=color.blue,location=location.absolute)
plotshape(oss==2?true:na,style=shape.arrowup,text="os2",color=color.blue,location=location.absolute)
plotshape(oss==3?true:na,style=shape.arrowup,text="os3",color=color.blue,location=location.absolute)
您需要使用 'var' 关键字来防止变量在每次更新时重置为零。嵌套的 ?: 表达式也有问题。这是经过修改的脚本,可保持对较低波段交叉的计数并在 3 后重置。
//@version=4
study(title="Relative Strength Index", shorttitle="RSI", format=format.price, precision=2, resolution="")
len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#8E1599)
upper = input(70)
lower = input(30)
band1 = hline(upper, "Upper Band", color=#C0C0C0)
band0 = hline(lower, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")
os = crossover(rsi, lower)
position = rsi
plot (os?position:na,color=color.red, style=plot.style_circles,linewidth=3)
var oss = 0
if(os)
oss := oss[1]==3 ? 1 : oss[1]+1
plotshape(oss==1 and os?true:na,style=shape.arrowup,text="os1",color=color.blue,location=location.absolute)
plotshape(oss==2 and os?true:na,style=shape.arrowup,text="os2",color=color.blue,location=location.absolute)
plotshape(oss==3 and os?true:na,style=shape.arrowup,text="os3",color=color.blue,location=location.absolute)