pine-script 函数 returns 与预期的值不同
pine-script function returns different value than expected
我正在努力理解 pine-script 中的函数执行。请看下面的简短脚本,它应该按原样编译:
//@version=4
study("My Script")
a = 100.
d = 100.
d:=nz(d[1]) + 10
f_(_src) => nz(_src[1]) + 10
a := f_(a)
plot(a, "a", color.red, 5)
plot(d, "d", color.yellow, 5)
我希望 a
和 d
的值相同,因为函数 "f_" 执行与 d
赋值相同的代码.
但是 a
从第 2 个循环开始一直是 110 的常数值,当 d
每个循环线性增加 +10.
它出现这种行为的原因是什么?我很乐意提供一些参考。
非常感谢你的帮助,Seb。
您的变量在每个柱上都被初始化为 100.
。
对于变量 a
:
- 传递给
f_()
的值始终是刚刚初始化为 100.
的 a
变量,因为它在每个柱上都被初始化,但是一旦进入函数内部,当前未使用值。因为你使用nz(_src[1])
,所以使用的值是上次调用函数时参数的值,这一切都是从函数的角度来看的,而不是全局范围的角度。
- 在函数的第一次调用中,
nz()
调用将值替换为 0
,因为没有先前的值。函数 returns 10
.
- 在第二个柱和所有后续柱上,您仍然使用
a=100
参数调用函数,但从那时起,函数内部的参数存在一个先前的值。它总是 100.
因为这就是你每次调用函数的原因,所以 nz(_src[1])
总是 returns 100.
,函数总是 returns 110.
对于变量 d
:
- 在第一个柱上没有先前的值,因此
nz(d[1])
returns 0
并且值 0 + 10 = 10
被分配给 d
.
- 在第二个柱上,
nz(d[1])
returns 10
和值 10 + 10 = 20
分配给 d
,依此类推。
- 在
d
的情况下,每个柱上最近初始化的值 100.
实际上从未使用过。
我正在努力理解 pine-script 中的函数执行。请看下面的简短脚本,它应该按原样编译:
//@version=4
study("My Script")
a = 100.
d = 100.
d:=nz(d[1]) + 10
f_(_src) => nz(_src[1]) + 10
a := f_(a)
plot(a, "a", color.red, 5)
plot(d, "d", color.yellow, 5)
我希望 a
和 d
的值相同,因为函数 "f_" 执行与 d
赋值相同的代码.
但是 a
从第 2 个循环开始一直是 110 的常数值,当 d
每个循环线性增加 +10.
它出现这种行为的原因是什么?我很乐意提供一些参考。
非常感谢你的帮助,Seb。
您的变量在每个柱上都被初始化为 100.
。
对于变量 a
:
- 传递给
f_()
的值始终是刚刚初始化为100.
的a
变量,因为它在每个柱上都被初始化,但是一旦进入函数内部,当前未使用值。因为你使用nz(_src[1])
,所以使用的值是上次调用函数时参数的值,这一切都是从函数的角度来看的,而不是全局范围的角度。 - 在函数的第一次调用中,
nz()
调用将值替换为0
,因为没有先前的值。函数 returns10
. - 在第二个柱和所有后续柱上,您仍然使用
a=100
参数调用函数,但从那时起,函数内部的参数存在一个先前的值。它总是100.
因为这就是你每次调用函数的原因,所以nz(_src[1])
总是 returns100.
,函数总是 returns110.
对于变量 d
:
- 在第一个柱上没有先前的值,因此
nz(d[1])
returns0
并且值0 + 10 = 10
被分配给d
. - 在第二个柱上,
nz(d[1])
returns10
和值10 + 10 = 20
分配给d
,依此类推。 - 在
d
的情况下,每个柱上最近初始化的值100.
实际上从未使用过。