Pinescript 初始化

Pinescript initialisation

我正在尝试理解以下 pinescript 指标代码 - https://www.tradingview.com/script/XzcIRUHv-JMA-RSX-Clone-LazyBear/

我不确定 f90、f88 等变量的值是什么。它们是为其他东西预定义的快捷方式吗?它们似乎是数组,因为它们与索引一起使用。例如:

f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1

它们不是内置变量。

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 中尝试此操作,您将收到 Undeclared identifier 错误。

让我们将代码缩短为以下内容:

//@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)

让我们看看 f90_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(),它将 return 归零 。因为 nz()NaN 值替换为 zeros.

因此第一个柱的条件将为真,f90_ 将分配给 1.0.

现在让我们看一下 f88,同样是 第一个柱线

f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0 

这里的第一个条件是(nz(f90_[1]) == 0.0)。这应该是returntrue,原因同上。

第二个条件是(length-1 >= 5)。对于默认输入 (14),这也应该 return 为真。

因此,f88 将分配给 14-1 = 13 第一个柱。

我想你可以从这里继续。尝试运行我提供的短代码并查看图表。