Pine Script循环迭代时独立存储计数器结果至数组的问题
问题解决:Pine Script v5中循环迭代的独立结果存储
你的代码核心问题在于全局持久化的var int counter = 0:var关键字会让变量保留跨bar的数值,且循环中每次迭代都会累加前一次的结果,导致数组最终存储的是两次判断的累加值,而非每次迭代的独立判断结果。
下面是两种修改方案,都能达成“存储每次迭代独立结果”的需求:
方案一:循环内初始化局部计数器
//@version=5 indicator("sma coun", overlay=false) myArray = array.new_float(0) for i = 200 to 201 int counter = 0 // 每次循环重新初始化计数器,确保独立判断 if close > ta.sma(close, i) counter := 1 array.push(myArray, counter) if barstate.islast label.new(bar_index,5, str.tostring(array.join(myArray, " - "))) label.new(bar_index, 2, "array size: " + str.tostring(array.size(myArray)))
方案二:直接存入判断结果(更简洁)
不需要额外计数器,直接用三元表达式将判断结果转为数值存入数组:
//@version=5 indicator("sma coun", overlay=false) myArray = array.new_float(0) for i = 200 to 201 // 满足条件存1,否则存0,直接得到独立迭代结果 array.push(myArray, close > ta.sma(close, i) ? 1 : 0) if barstate.islast label.new(bar_index,5, str.tostring(array.join(myArray, " - "))) label.new(bar_index, 2, "array size: " + str.tostring(array.size(myArray)))
修改说明
- 移除了全局的
var counter,确保每次迭代的判断结果不受前一次迭代或历史bar数据的影响。 - 两种方案都会让数组中分别存储
i=200和i=201时的独立判断结果(满足条件为1,否则为0),符合你的预期。
内容的提问来源于stack exchange,提问作者Shuman Rotula
相关产品推荐
相关产品推荐

