【问题标题】:Self Referencing Variables in Pine Script for TradingViewTradingView 的 Pine 脚本中的自引用变量
【发布时间】:2020-11-14 20:02:18
【问题描述】:

所以我试图将此绝对强度直方图从 pine 脚本 v2 转换为 v4,但不知何故,它不允许我在同一行中初始化和自引用变量。我该如何解决这个问题?

这是我要转换的原始代码:

    calc_abssio( ) =>
        A=iff(close>close[1], nz(A[1])+(close/close[1])-1,nz(A[1]))
        M=iff(close==close[1], nz(M[1])+1.0/osl,nz(M[1]))
        D=iff(close<close[1], nz(D[1])+(close[1]/close)-1,nz(D[1]))
        iff (D+M/2==0, 1, 1-1/(1+(A+M/2)/(D+M/2)))

abssi=calc_abssio()
abssio = (abssi - ema(abssi,lma))
alp=2.0/(ld+1)
mt=alp*abssio+(1-alp)*nz(mt[1])
ut=alp*mt+(1-alp)*nz(ut[1])

这是我将其转换为 pine 脚本版本 4 的尝试。以下代码未在图表上显示任何信息:

lma = input(19, title = "Ema Length")
ld = input(19, title = "Signal Length")
osl = 10


calc_abssio() => 
    A = 0.0
    M = 0.0
    D = 0.0
    A := close>close[1]? A[1]+(close/close[1])-1: A[1]
    M := close==close[1]? M[1]+1.0/osl: M[1]
    D := close<close[1]? D[1]+(close[1]/close)-1: D[1]
    iff (D+M/2==0, 1, 1-1/(1+(A+M/2)/(D+M/2)))

abssi=calc_abssio()
abssio = (abssi - ema(abssi,lma))
alp=2.0/(ld+1)
mt = 0.0
mt:=alp*abssio+(1-alp)*nz(mt[1])
ut = 0.0
ut:=alp*mt+(1-alp)*nz(ut[1])
s=((2-alp)*mt-ut)/(1-alp)
d=abssio-s
hline(0, title="ZeroLine")

plot(abssio, color=(abssio > 0 ? abssio >= s ? color.green : color.orange : abssio <=s ? color.red 
:color.orange), title="ABSSIO", linewidth=2, style = plot.style_histogram)

plot(abssio, color=color.black,title="ABSSIO_Points", linewidth=2)
plot(s, color=color.gray, title="MA")
plot(d, color=d>0?color.green:color.red)

stopLong = crossover(s, abssio)
stopShort = crossover(abssio,s)
plotshape(stopLong, style = shape.xcross, location = location.top, color = color.green)

plotshape(stopShort, style = shape.xcross, location = location.top, color = color.red)

【问题讨论】:

    标签: pine-script self-reference


    【解决方案1】:

    nz 如果前一个柱上不存在递归变量,则带有 1 个参数的函数将返回 0:

    calc_abssio() => 
        A = 0.0
        M = 0.0
        D = 0.0
        A := close > close[1]  ? nz(A[1]) + (close / close[1]) - 1 : nz(A[1])
        M := close == close[1] ? nz(M[1]) + 1.0 / osl              : nz(M[1])
        D := close < close[1]  ? nz(D[1]) + (close[1] / close) - 1 : nz(D[1])
        iff (D+M/2==0, 1, 1-1/(1+(A+M/2)/(D+M/2)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      相关资源
      最近更新 更多