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

如何在Pine Script中为枢轴点绘制水平线?代码报错求解

解决Pine Script中在枢轴点绘制水平线的问题

你推测的没错,hline()确实不支持序列数据——它只能接收固定的常量价格,而ta.pivothigh()和ta.pivotlow()返回的是随K线动态变化的序列值,这就是报错的核心原因。

正确的做法是使用line.new()函数动态创建水平线,它可以根据序列中的枢轴点价格生成线条。以下是修正后的完整脚本:

//@version=5
indicator("Pivot Lines", max_lines_count=500, overlay=true)
leftBars = input.int(50, "左侧K线数")
rightBars = input.int(50, "右侧K线数")

// 存储已创建的枢轴高点/低点线条,用var避免每次K线都重新初始化
var line[] ph_lines = array.new_line()
var line[] pl_lines = array.new_line()

// 检测枢轴高点和低点
ph = ta.pivothigh(high, leftBars, rightBars)
pl = ta.pivotlow(low, leftBars, rightBars) // 这里建议用low而非close,更符合枢轴低点的定义

// 当出现新的枢轴高点时,创建向右延伸的水平线
if not na(ph)
    // 创建线条:从当前K线的枢轴价格,向右延伸到图表最右侧
    new_line = line.new(bar_index, ph, bar_index + rightBars, ph, 
                       color=color.orange, linestyle=line.style_dotted, linewidth=2)
    array.push(ph_lines, new_line)

// 当出现新的枢轴低点时,创建向右延伸的水平线
if not na(pl)
    new_line = line.new(bar_index, pl, bar_index + rightBars, pl, 
                       color=color.blue, linestyle=line.style_dotted, linewidth=2)
    array.push(pl_lines, new_line)

// 可选:超出线条数量限制时删除最早的线条,避免报错
if array.size(ph_lines) > max_lines_count / 2
    line.delete(array.shift(ph_lines))
if array.size(pl_lines) > max_lines_count / 2
    line.delete(array.shift(pl_lines))

关键说明:

  • line.new()可以接收动态的价格和K线索引参数,完美适配枢轴点的序列数据
  • 用var声明线条数组,确保数组不会在每根K线都重新创建
  • 添加了线条数量控制逻辑,避免超过max_lines_count的限制导致脚本报错
  • 修正了枢轴低点的数据源为low,这是更标准的用法(原脚本用close不太准确)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:25:08