如何在K线突破后将实线延续为虚线?(Pine Script)
Pine Script 实现突破后高低线转虚线延伸
核心实现思路
要实现突破后线条从实线转虚线延伸,需要分三步处理:
- 持久化存储标记的高低价、线条对象,以及是否突破的状态
- 实时检测后续K线是否突破标记的高低水平
- 突破前保持实线并延长,突破后切换为虚线继续延伸
修改后的完整代码
//@version=5 indicator("高低线突破转虚线", overlay=true) // 输入参数 showLine = input.bool(true, "显示线条") max = input.int(5, "回溯K线数") lineColor = input.color(color.blue, "线条颜色") // 持久化变量:保存线条对象、标记价、突破状态 var line highLine = na var line lowLine = na var float markedHigh = na var float markedLow = na var bool highBroken = false var bool lowBroken = false if showLine // 清理旧线条(避免重复创建) if not na(highLine) line.delete(highLine) if not na(lowLine) line.delete(lowLine) // 计算时间间隔,确定线条起点 dt = time - time[1] // 记录标记的高低价 markedHigh := high[max] markedLow := low[max] // 创建初始实线 highLine := line.new( x1=time - dt * max, y1=markedHigh, x2=time, y2=markedHigh, color=lineColor, style=line.style_solid, width=2, xloc=xloc.bar_time ) lowLine := line.new( x1=time - dt * max, y1=markedLow, x2=time, y2=markedLow, color=lineColor, style=line.style_solid, width=2, xloc=xloc.bar_time ) // 重置突破状态 highBroken := false lowBroken := false // 实时更新高线状态 if not na(highLine) // 检测向上突破 if high > markedHigh and not highBroken highBroken := true line.set_style(highLine, line.style_dashed) line.set_x2(highLine, time) // 突破后持续延长虚线 elif highBroken line.set_x2(highLine, time) // 未突破时延长实线 else line.set_x2(highLine, time) // 实时更新低线状态 if not na(lowLine) // 检测向下突破 if low < markedLow and not lowBroken lowBroken := true line.set_style(lowLine, line.style_dashed) line.set_x2(lowLine, time) // 突破后持续延长虚线 elif lowBroken line.set_x2(lowLine, time) // 未突破时延长实线 else line.set_x2(lowLine, time)
关键代码说明
var关键字:确保变量在脚本运行期间持久化,不会每根K线都重置- 线条更新逻辑:每根K线都会检查突破状态,未突破时延长实线,突破后切换为虚线并继续延长
- 旧线条清理:避免多次触发
showLine后画面堆积大量线条
内容的提问来源于stack exchange,提问作者zollen 123
相关产品推荐
相关产品推荐

