为何标签返回0,0,0且触发数组大小超限错误?当前Bar Index未达上限
数组过大错误排查与解决
问题描述
所有检查无异常但功能失效,测试从数组取值时发现数组无值存储,同时收到错误:
Study Error
Error on bar 10: Array is too large. Maximum size is 100000.
当前Bar Index约为17000,远未达到100000的数组限制,需排查问题根源。
相关代码片段:
// Establish loop numbers. CurrentBarIndexRealtime = bar_index //This is around ~17,000 (Nowhere near the 100,000 array limitation. Hmm.) LookbackForTotalArraySize = (365 * 24) FirstBarIndex = CurrentBarIndexRealtime - TotalDurationPeriod365Days1hr + 1 CurrentBarIndex = CurrentBarIndexRealtime // Test data retrieval from plotted labels. val1 = array.get(Array15, 5) val2 = array.get(Array20, 25) val3 = array.get(Array25, 55) label.new(bar_index, high, "Values: " + str.tostring(val1) + ", " + str.tostring(val2) + ", " + str.tostring(val3), color=color.blue, textcolor=color.white, style=label.style_label_up)
问题根源
TotalDurationPeriod365Days1hr变量异常:该变量未在提供的代码片段中定义,若其值远大于预期的8760(365*24),会导致FirstBarIndex = 17000 - 超大值 +1变成极小负数。后续若用此负数初始化数组或作为循环起始索引,数组会被强制创建成从负数索引到当前bar的超大跨度,直接触发100000的上限。- 数组初始化/填充逻辑错误:若数组基于
FirstBarIndex到CurrentBarIndexRealtime的区间创建或填充,当FirstBarIndex为负数时,区间长度会变为17000 - 负数,数值极易超过100000。 - 动态扩容失控:若数组通过循环不断添加元素,而循环次数因
FirstBarIndex为负数被错误计算,会导致短时间内数组元素数量突破100000。
解决方案
- 验证
TotalDurationPeriod365Days1hr的值:添加代码输出该变量实际值,确认是否符合预期:
确保它等于label.new(bar_index, low, "TotalDuration: " + str.tostring(TotalDurationPeriod365Days1hr), color=color.red)365*24(即8760),若不符则修正变量定义。 - 修正
FirstBarIndex计算逻辑:添加边界判断,避免出现负数:FirstBarIndex = math.max(0, CurrentBarIndexRealtime - TotalDurationPeriod365Days1hr + 1) - 检查数组实际尺寸:添加代码查看数组当前大小,确认是否真的超过限制:
label.new(bar_index, low-10, "Array15 Size: " + str.tostring(array.size(Array15)), color=color.green) - 排查数组填充循环:若存在填充数组的循环逻辑,确保循环起始索引为
FirstBarIndex、结束索引为CurrentBarIndexRealtime,且循环次数不超过100000。
内容的提问来源于stack exchange,提问作者TheLegendOfA
相关产品推荐
相关产品推荐

