Pine Script函数调用一致性警告与语法错误问题求助
问题解决方法
警告原因
Pine Script 对函数调用有一致性要求:要么函数在每根K线的计算周期内都被调用,要么函数内部不能包含var声明的持久化变量。你的函数f使用了var bool h = false,且仅在barstate.islast的循环中调用,违反了这个规则,因此触发警告。另外,函数定义必须放在全局作用域,不能嵌套在if或for块内,这就是你移动函数后出现语法错误的原因。
解决方案
根据你的逻辑需求,有两种修正方式:
方案1:移除函数内的持久化变量
如果你的逻辑只是检查偏移K线的小时是否变化,不需要保留跨调用的状态,直接把var去掉,让h成为函数的局部临时变量:
//@version=5 indicator("My script", timeframe="5") f(i) => bool h = false // 去掉var,改为局部变量 if (hour[i] != hour[i-1]) h := true h var a = 0 if (barstate.islast) for i = 1 to 10 if f(i) a := 1 // 更多代码... plot(close)
方案2:全局持久化状态+全周期调用函数
如果你的实际逻辑需要保留跨调用的状态,把var变量移到函数外部,并确保函数在每根K线都被调用一次(即使不用结果):
//@version=5 indicator("My script", timeframe="5") var bool h = false // 将持久化变量移到全局作用域 f(i) => if (hour[i] != hour[i-1]) h := true h // 每根K线调用一次函数,满足一致性要求 dummy = f(0) var a = 0 if (barstate.islast) for i = 1 to 10 if f(i) a := 1 // 更多代码... plot(close)
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

