1

我正在尝试了解以下 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
4

1 回答 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,你会得到一个未声明的标识符错误。

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

//@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为第一条。

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

于 2018-09-17T12:58:09.663 回答