Pine-Script 自引用变量的问题
Problem with Pine-Script self-referencing variables
我在理解 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]",请帮忙解释一下,谢谢
我还有一个问题:
func(price)=>
sum = 10.0
sum := sum + price[1]
func(close)
func(open)
函数逐条调用,但如何保存上一个价格变量。实现 Pine 脚本历史引用运算符功能。
任何帮助谢谢!
[]
在 pinescript 中被称为 History Referencing Operator。它指的是变量的先前值。
当你说 f[1]
时,它 return 就是 f
之前 一个 的值。
您将 nz() 与 []
一起使用是很好的,因为对于第一个柱,没有变量具有先前的值。因此,当您第一次尝试访问变量的历史值时,结果将是 NaN
并且 nz()
会将 NaN
转换为 0
.
另一件需要知道的事情是,您的代码将针对每个柱执行。
现在让我们看看您的代码。
f = 0.0
d = 0.0
你在开头声明了f
和d
,然后给它们赋值0。我们可以忽略这一步,因为您正在为它们重新分配另一个值。
第一栏
d := nz(f[1])
将 f
在前一根柱上的值分配给 d
。 f
第一个柱 没有先前值 ,因此 nz()
将 return 0
。所以,d = 0
.
f := d+1
f = 0 + 1 -> f = 1
第二个栏
d := nz(f[1])
将 f
在前一根柱上的值分配给 d
。 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()
将 return 0.
那么第一个柱会发生什么:
d := nz(f[1]) // d = 0
f := d+1 // f = 1
等等..
我在理解 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]",请帮忙解释一下,谢谢
我还有一个问题:
func(price)=>
sum = 10.0
sum := sum + price[1]
func(close)
func(open)
函数逐条调用,但如何保存上一个价格变量。实现 Pine 脚本历史引用运算符功能。 任何帮助谢谢!
[]
在 pinescript 中被称为 History Referencing Operator。它指的是变量的先前值。
当你说 f[1]
时,它 return 就是 f
之前 一个 的值。
您将 nz() 与 []
一起使用是很好的,因为对于第一个柱,没有变量具有先前的值。因此,当您第一次尝试访问变量的历史值时,结果将是 NaN
并且 nz()
会将 NaN
转换为 0
.
另一件需要知道的事情是,您的代码将针对每个柱执行。
现在让我们看看您的代码。
f = 0.0
d = 0.0
你在开头声明了f
和d
,然后给它们赋值0。我们可以忽略这一步,因为您正在为它们重新分配另一个值。
第一栏
d := nz(f[1])
将 f
在前一根柱上的值分配给 d
。 f
第一个柱 没有先前值 ,因此 nz()
将 return 0
。所以,d = 0
.
f := d+1
f = 0 + 1 -> f = 1
第二个栏
d := nz(f[1])
将 f
在前一根柱上的值分配给 d
。 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()
将 return 0.
那么第一个柱会发生什么:
d := nz(f[1]) // d = 0
f := d+1 // f = 1
等等..