For循环奇怪的行为

For loop strange behavior

我需要调用一个函数 y 次,看看其中是否只有 1 个调用是正确的。我正在尝试使用 for 循环优化我的 pinescript 代码,但结果总是 returns false。

这可行(x 为 1)但需要太多 space 如果我需要调用该函数例如 100 次:

x = 0
if function(1) or function(2) or ... function(y)
    x := x + 1

这不起作用(x 始终为 0):

x = 0
for i = 1 to y
    if x == 1
        break
    if function(i)
        x := x + 1

我也试过了(x 总是 0):

x = 0
x := for i = 1 to y
    if x == 1
        break
    if function(i)
        x := x + 1
        x
    x

这是我正在尝试的功能 运行:

helper4function(cond) => 
    bars = barssince(cond == true)
    10 <= bars and bars <= 30

helper3function(_source, _var3) => not na(pivotlow(_source, 3, 3)) and _source[3] < (_var3 - external_source[3]) 

helper2function(_source, _var1, _var2, _var3) => _source[3] - _var1 > valuewhen(helper3function(_source, _var2), _source[3], _var3) and helper4function(helper3function(_source, _var2)[_var3])

helper1function(_source, _var2, _var3) => low[3] <= valuewhen(helper3function(_source, _var2), low[3], _var3)

function(_source, _var1, _var2, _var3) => helper1function(_source, _var2, _var3) and helper2function(_source, _var1, _var2, _var3) and helper3function(_source, _var2)

您的函数的执行很可能取决于它为它所引用的系列构建过去值的历史记录,这在从 for 循环中调用时不会发生。

如果您尝试从循环内调用 ema(),并且在循环的每次迭代中使用不同的 length= 参数,则会出现同样的问题。因为所有不同的调用都将在 for 循环中发生,Pine 的运行时无法构建过去值的逐个柱线轨迹和计算每个调用实例的新柱上的函数所需的计算 ema().

为此,运行时必须为每个循环迭代生成一个新的运行时环境,这是不可能发生的。

usrman在this section结尾对问题进行了简单的讨论。