如何基于Pine Script数组最新值绘制line.new线条?
Pine Script 基于数组最新值绘制线条的解决方案
问题根源
你当前的代码会在每一根K线周期都遍历数组创建新线条,随着K线不断推进,线条会持续累加,最终数量远超过数组实际长度。要实现仅显示当前数组对应的线条,核心是每次更新时先清除旧线条,再基于最新数组内容绘制新线条。
解决代码
//@version=5 indicator("Strong Levels", overlay=true) // 替换为你实际的水平数组更新逻辑 var array<float> strong_levels_array = array.new_float() // 示例:模拟数组更新(每50根K线重置一次水平值) if bar_index % 50 == 0 array.clear(strong_levels_array) for i = 0 to 7 array.push(strong_levels_array, close + i * 0.01) // 存储线条ID的数组(仅初始化一次) var array<int> sr_lines = array.new_int() // 步骤1:清除所有旧线条 while array.size(sr_lines) > 0 line.delete(array.pop(sr_lines)) // 步骤2:基于最新数组绘制线条 if array.size(strong_levels_array) > 0 for x = 0 to array.size(strong_levels_array) - 1 mid = array.get(strong_levels_array, x) line_id = line.new( x1=bar_index, y1=mid, x2=bar_index - 1, y2=mid, extend=extend.both, color=color.new(color.blue, 60), style=line.style_solid, width=2 ) array.push(sr_lines, line_id) // 数据窗口显示数组长度(用于验证) var table t = table.new(position.bottom_right, 1, 1) if barstate.islast table.cell(t, 0, 0, "Power Levels: " + str.tostring(array.size(strong_levels_array)))
关键说明
- 使用
var声明sr_lines数组,确保只在脚本启动时初始化一次,避免重复创建数组 - 通过
while循环弹出并删除所有旧线条,彻底清除上一周期绘制的内容 - 仅在
strong_levels_array非空时执行绘制逻辑,避免空数组的无效循环 - 示例中的数组更新逻辑仅作演示,实际使用时替换为你自己的业务逻辑即可
内容的提问来源于stack exchange,提问作者Vladyslav Archivadze
相关产品推荐
相关产品推荐

