PineScript数组越界问题求助:调用array.clear()触发Index out of bounds
问题分析与修复
错误原因清晰:调用array.clear(CCI1H)后数组大小变为0,后续代码未检查数组容量就直接用array.get()访问索引2,触发越界错误。
你的逻辑是积累3个CCI pivot高点,判断最后一个是否为三者最高。问题出在数组清空后重新积累时,还没攒够3个元素就去访问索引2、1、0。
修复后的代码
var CCI1H = array.new_float() // 初始化为空数组,避免默认值干扰 if cci > 50 if (cciPeakPivotHigh > 100) array.push(CCI1H, cciPeakPivotHigh) // 仅保留最近3个元素,超过3个时移除最早的 if array.size(CCI1H) > 3 array.shift(CCI1H) // 只有数组元素满3个时,才执行判断和标签创建 if array.size(CCI1H) == 3 CCI1Hval1 = array.get(CCI1H, 2) // 最早的元素 CCI1Hval2 = array.get(CCI1H, 1) CCI1Hval3 = array.get(CCI1H, 0) // 最新的元素 if (CCI1Hval3 > CCI1Hval2 and CCI1Hval3 > CCI1Hval1) label.new(bar_index, na, "CCI1H End", yloc = yloc.abovebar, style = label.style_none, textcolor = color.white, size = size.normal) else if cci < 50 array.clear(CCI1H)
关键修复点
- 初始数组改为空数组,避免默认0值干扰判断逻辑
- 调整
array.shift()触发时机:仅当数组元素超过3个时移除最早元素,确保数组能逐步积累到3个元素 - 将数组元素获取、标签创建逻辑嵌套在
array.size(CCI1H) == 3条件内,从根源避免越界访问
内容的提问来源于stack exchange,提问作者Turtle Herder
相关产品推荐
相关产品推荐

