You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

检查数组大小仍触发数组索引越界错误的原因排查

问题原因及解决方法

核心原因

报错的本质是:你在if条件中检查数组大小满足>4后,到执行array.get()操作的这段时间里,triangle_price或triangle_index数组的大小被其他代码修改了(比如执行了array.clear()、array.pop()、array.remove()等操作),导致实际执行数组索引访问时,数组大小已经降到1,索引1自然越界。

Pine Script是逐bar执行的,同一个bar内的代码段会按顺序运行,如果在你的if条件判断之后、for循环执行之前,有其他逻辑修改了这两个数组的大小,就会触发这个错误。部分时间周期无报错,是因为那些周期里数组大小没被修改。

解决步骤

  1. 在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)
                // ... 剩余代码不变
    
  2. 排查其他修改数组的代码
    检查脚本中所有涉及triangle_price和triangle_index的代码,确认是否有在同一个bar内修改数组大小的逻辑:

    • 有没有调用array.pop()、array.remove()、array.clear()这类会减少数组元素的函数?
    • 有没有其他if块或函数会修改这两个数组?
      如果有,调整代码执行顺序,确保数组大小校验和数组访问操作是连续执行的,中间没有修改数组的逻辑。
  3. 确保数组和确认逻辑的一致性
    检查confirmedTriangle的赋值逻辑,应该只有当triangle_price和triangle_index数组大小满足要求时,才将其设为true,从源头减少无效判断。

内容的提问来源于stack exchange,提问作者Acta Non Verba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:33:23