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)

我希望 ad 的值相同,因为函数 "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. 实际上从未使用过。