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

Pine Script技术求助:如何绘制所有高低枢轴点的双向延伸水平线

解决Pine Script中仅显示最后一条枢轴高点水平线的问题

你的核心问题是每次K线都重新创建线条并覆盖变量,导致历史线条丢失。以下是修正后的实现方案:

问题分析

原代码中line levelLine = line.new(...)在每个bar周期都会执行,每次都会将levelLine重新赋值为新创建的线条,之前的线条没有被存储,最终只能看到最后一次创建的结果。

修正代码

//@version=5
indicator(title="枢轴高点水平线", shorttitle="Pivot High Lines", overlay=true)

pivotLength = 100
// 检测左右各pivotLength个bar范围内的枢轴高点
pivotHigh = ta.pivothigh(high, pivotLength, pivotLength)

// 用数组存储所有创建的线条对象,避免丢失历史线条
var line[] pivotLines = array.new_line()
// 设置最大线条数量,避免触发Pine Script绘图对象上限
maxLines = 50

// 仅在检测到新的枢轴高点时创建水平线
if not na(pivotHigh)
    // 创建双向延伸的水平线,起点设为枢轴高点对应的bar位置
    newLine = line.new(bar_index - pivotLength, pivotHigh, bar_index, pivotHigh, 
                      extend=extend.both, color=color.red, width=1)
    // 将新线条加入数组保存
    array.push(pivotLines, newLine)
    // 线条数量超过上限时,删除最早创建的线条
    if array.size(pivotLines) > maxLines
        line.delete(array.shift(pivotLines))

关键改进点

  • 仅在枢轴高点出现时创建线条:通过if not na(pivotHigh)判断,只在检测到新的枢轴高点时执行创建逻辑,避免无效重复创建。
  • 用数组存储线条对象:var line[] pivotLines定义一个持久化数组,保存所有创建的线条,确保历史线条不会被覆盖。
  • 限制线条数量:设置maxLines控制最大显示的线条数,超过上限时自动删除最早的线条,避免触发Pine Script的绘图对象数量限制。

补充说明

如果你的需求是基于枢轴高点左侧pivotLength个bar的high值绘制水平线,只需将pivotHigh替换为high[pivotLength]即可,但通常枢轴水平线对应枢轴高点本身的价格。

内容的提问来源于stack exchange,提问作者silverstreak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:01:17