如何在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
相关产品推荐
相关产品推荐

