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

如何基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:35:24