【问题标题】:Sequential count and label triggers Pine script顺序计数和标签触发 Pine 脚本
【发布时间】:2020-11-02 07:41:12
【问题描述】:

当 rsi 越过较低波段时,我正在尝试计算和标记长触发器。每次发生交叉触发时,都会出现一个带有 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)

【问题讨论】:

    标签: pine-script


    【解决方案1】:

    您需要使用“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)
    

    【讨论】:

    • 谢谢!由于我的问题尝试了其他脚本变体,并且确实发现每次更新时计数都会重置为 0。我没有尝试'var'方法。我将更深入地了解它的逻辑。谢谢!
    • 不客气。如果它回答了您的问题,请为答案投票。谢谢! :)
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2013-04-20
    相关资源
    最近更新 更多