它们不是内置变量。
pine-script
版本 1 和 2 允许您访问与[]
组合 nz()
的变量,即使该变量尚未声明。因此,以下内容在版本 1和版本 2中有效:
f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
如果你在 中尝试这个//@version=3
,你会得到一个未声明的标识符错误。
让我们将代码缩短为以下内容:
//@version=2
study(title="JMA RSX Clone [LazyBear]", shorttitle="RSXC_LB", overlay=false)
length=input(14)
f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0
plot(f90_, title="f90", color=orange, linewidth=4)
plot(f88, title="f88", color=red, linewidth=4)
让我们看看第一个 barf90_
发生了什么。f88
f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
这里的条件是(nz(f90_[1]) == 0.0)
。f90_[1]
基本上是在询问前一个柱的值,但这是第一个柱(还记得吗?),所以没有前一个值。所以,答案是NaN(不是数字)。
现在,如果你把它放进去nz()
,它会返回零。因为用zerosnz()
替换NaN值。
因此,第一个柱的条件为真,f90_
并将分配给1.0。
f88
现在让我们再看看第一个 bar。
f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0
这里的第一个条件是(nz(f90_[1]) == 0.0)
。true
由于上述相同的原因,这应该返回。
第二个条件是(length-1 >= 5)
。对于默认输入 (14),这也应该返回 true。
因此,f88
将分配给 14-1 = 13为第一条。
我想你可以从这里继续。尝试运行我提供的短代码并查看图表。