如何用Pine Script将表格值转为plotchar?解决数组过大报错
解决Pine Script数组过大报错问题
报错原因
你代码里的sr_levels是var声明的数组,会在脚本运行期间持续保留数据。每次K线更新时,for循环都会执行array.push往数组里添加新元素,随着K线数量不断累积,数组大小最终超过了Pine Script限制的100000上限,触发报错。
修复方案
因为你只需要当前有效的支撑阻力位数据,不需要保留历史累积的旧数据,所以每次填充数组前先清空它,再重新添加当前标签对应的数值:
var table t = table.new(position.bottom_right, 1, 12) var sr_levels = array.new_float() // 初始化空数组即可,无需预设大小 // 先清空数组,再批量添加当前标签值 array.clear(sr_levels) for y = 0 to array.size(sr_labels) - 1 label_text = label.get_text(array.get(sr_labels,y)) sr_level_price = str.substring(label_text, 0, 5) table.cell(t, 0, y, sr_level_price, bgcolor = color.yellow) array.push(sr_levels, str.tonumber(sr_level_price)) // 现在可正常使用plotchar plotchar(array.get(sr_levels,0), title = "0", char = '')
替代优化方案
如果你的sr_labels数组里的标签数量固定(对应表格的12行),也可以用array.set覆盖数组元素,避免数组无限制增长:
var table t = table.new(position.bottom_right, 1, 12) var sr_levels = array.new_float(12, 0) // 预设数组大小对应表格行数 for y = 0 to array.size(sr_labels) - 1 label_text = label.get_text(array.get(sr_labels,y)) sr_level_price = str.substring(label_text, 0, 5) table.cell(t, 0, y, sr_level_price, bgcolor = color.yellow) array.set(sr_levels, y, str.tonumber(sr_level_price)) plotchar(array.get(sr_levels,0), title = "0", char = '')
内容的提问来源于stack exchange,提问作者ramkumar-yoganathan
相关产品推荐
相关产品推荐

