For loop 对于循环奇怪的行为

For loop 对于循环奇怪的行为,for-loop,pine-script,For Loop,Pine Script,我需要调用函数y次,看看这些调用中是否只有1次是真的。我试图使用for循环优化我的pinescript代码,但是结果总是返回false x是1,但如果我需要调用函数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)

我需要调用函数y次,看看这些调用中是否只有1次是真的。我试图使用for循环优化我的pinescript代码,但是结果总是返回false

x是1,但如果我需要调用函数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 := for i = 1 to y
    if x == 1
        break
    if function(i)
        x := x + 1
        x
    x
我也试过了x总是0:

x = 0
for i = 1 to y
    if x == 1
        break
    if function(i)
        x := x + 1
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在结尾简要讨论了这个问题。

请添加您的函数。函数本身非常复杂,由其他函数组成。我试图简化事情。你在想什么可能是错的?很有趣。我添加了我正在尝试运行的函数。您能否快速浏览一下,看看是否发现了可能表明该系列历史存在问题的内容?我想问题可能出在我正在使用的系列变量外部_source[3]上,但是该研究是以参数max_bars_back=800运行的,以确保可以计算该值。原因是使用barssince和valuewhen。整件事都和这个问题有点关联。相同的根本原因,但不同的影响。作为编码人员,我们不知道这一点,但为了正确计算,调用这些函数的每个实例都需要自己的历史轨迹来正确计算,这在for循环中是不可能发生的。