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

