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 第一个柱。
我想你可以从这里继续。尝试运行我提供的短代码并查看图表。
我正在尝试理解以下 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 第一个柱。
我想你可以从这里继续。尝试运行我提供的短代码并查看图表。