检查数组大小仍触发数组索引越界错误的原因排查
问题原因及解决方法
核心原因
报错的本质是:你在if条件中检查数组大小满足>4后,到执行array.get()操作的这段时间里,triangle_price或triangle_index数组的大小被其他代码修改了(比如执行了array.clear()、array.pop()、array.remove()等操作),导致实际执行数组索引访问时,数组大小已经降到1,索引1自然越界。
Pine Script是逐bar执行的,同一个bar内的代码段会按顺序运行,如果在你的if条件判断之后、for循环执行之前,有其他逻辑修改了这两个数组的大小,就会触发这个错误。部分时间周期无报错,是因为那些周期里数组大小没被修改。
解决步骤
在if块内部再次校验数组大小
把数组大小的检查移到if块内部,并且立即保存数组大小到变量,避免后续修改影响判断:if confirmedTriangle price_size = array.size(triangle_price) index_size = array.size(triangle_index) // 确保两个数组都满足最小长度要求 if price_size > 4 and index_size > 4 for i = 0 to 3 // 原for循环内的代码 xIndexDis = array.get(triangle_index, 0) - array.get(triangle_index, 4) yPriceDis = array.get(triangle_price, 0) - array.get(triangle_price, 4) // ... 剩余代码不变排查其他修改数组的代码
检查脚本中所有涉及triangle_price和triangle_index的代码,确认是否有在同一个bar内修改数组大小的逻辑:- 有没有调用
array.pop()、array.remove()、array.clear()这类会减少数组元素的函数? - 有没有其他if块或函数会修改这两个数组?
如果有,调整代码执行顺序,确保数组大小校验和数组访问操作是连续执行的,中间没有修改数组的逻辑。
- 有没有调用
确保数组和确认逻辑的一致性
检查confirmedTriangle的赋值逻辑,应该只有当triangle_price和triangle_index数组大小满足要求时,才将其设为true,从源头减少无效判断。
内容的提问来源于stack exchange,提问作者Acta Non Verba
相关产品推荐
相关产品推荐

