我在理解Pine-Script代码段时遇到问题,请帮忙。
//@version=4
study('test')
f = 0.0
d = 0.0
d := nz(f[1])
f := d+1
plot(d)
plot(f)
在上面的代码中,变量d的值为“ [0,1,2 ...]”,f为“ [1,2,3 ...]”,这是为什么呢?我期望“ d = [0,0,0 ...] f = [1,1,1]”,请帮助解释,谢谢。
答案 0 :(得分:0)
[]
被称为History Referencing Operator。它引用变量的先前值。
您说f[1]
时,它将返回一个条之前的f
值。
最好将nz()与[]
一起使用,因为对于第一个小节,没有变量具有先前的值。因此,当您首次尝试访问变量的历史值时,结果将为NaN
,而nz()
会将NaN
转换为0
。
要知道的另一件事是,您的代码将在每个小节处执行。
现在让我们看看您的代码。
f = 0.0
d = 0.0
您在开头声明f
和d
并为其分配0。我们可以忽略此步骤,因为您正在为它们重新分配另一个值。
第一栏
d := nz(f[1])
将前一栏中的f
的值分配给d
。 f
的第一个小节没有先前的值,因此nz()
将返回0
。因此,d = 0
。
f := d+1
f = 0 +1-> f = 1
第二个栏
d := nz(f[1])
将前一栏中的f
的值分配给d
。在{strong>第一栏中,f
的值为1
。因此,d = 1
。
f := d+1
f = 1 +1-> f = 2
第三栏
d := nz(f[1])
将前一栏中的f
的值分配给d
。在秒栏上,f
的值为2
。因此,d = 2
。
f := d+1
f = 2 +1-> f = 3
注意:尝试运行以下代码,您会发现它的行为完全相同。
//@version=4
study('test')
f = 550.0
d = 0.0
d := nz(f[1])
f := d+1
plot(d)
plot(f)
原因是,f
最初具有什么值并不重要。 d := nz(f[1])
将前一个小节上的f
的值分配给d
,对于第一个小节,f
没有前一个值。因此,nz()
将返回0。
然后第一栏的情况是:
d := nz(f[1]) // d = 0
f := d+1 // f = 1
以此类推。