如何让Pine Script中昨日高低位射线从形成点延伸至当前K线?
让Pine Script v5绘制的昨日高低位射线从精确点位起始的解决方案
当前你的代码中,射线起点用了当日开盘时间,因此射线从新交易日开盘位置开始。要实现从昨日高低位形成的精确K线位置起笔,需要在日线级别上下文里定位到昨日最高、最低价对应的具体bar时间戳,再以此作为射线起点。
修改后的完整代码
//@version=5 indicator('PDHL', overlay=true) show_pdhl = input(true, 'Show Previous Day High/Low') // 在日线级别获取昨日高低价,以及它们对应的精确时间戳 [pdh, pdl, pdh_time, pdl_time] = request.security(syminfo.tickerid, 'D', [ high[1], low[1], ta.valuewhen(high == high[1], time, 0), // 昨日最高价所在bar的时间 ta.valuewhen(low == low[1], time, 0) // 昨日最低价所在bar的时间 ], lookahead = barmerge.lookahead_on) // 仅在新交易日的第一根bar创建射线,避免重复生成 var line pdh_line = na var line pdl_line = na var label pdh_label = na var label pdl_label = na if show_pdhl // 新交易日重置射线和标签 if ta.change(time('D')) line.delete(pdh_line) line.delete(pdl_line) label.delete(pdh_label) label.delete(pdl_label) // 从昨日高低价的精确点位开始绘制射线到当前bar pdh_line := line.new(pdh_time, pdh, time, pdh, xloc.bar_time, color=color.red) pdl_line := line.new(pdl_time, pdl, time, pdl, xloc.bar_time, color=color.green) // 添加标签到射线末端 pdh_label := label.new(bar_index, pdh, style=label.style_label_left, size=size.small, color=#ffffff, text='PDH', textcolor=color.red) pdl_label := label.new(bar_index, pdl, style=label.style_label_left, size=size.small, color=#ffffff, text='PDL', textcolor=color.green) else // 非新交易日,更新射线的终点到当前bar line.set_x2(pdh_line, time) line.set_x2(pdl_line, time) // 更新标签位置到当前bar label.set_x(pdh_label, bar_index) label.set_x(pdl_label, bar_index)
关键修改点说明
- 获取精确时间戳:通过
ta.valuewhen(high == high[1], time, 0)在日线级别定位到昨日最高价对应的bar的时间,同理获取最低价的时间,这就是射线的起始点。 - 避免重复创建对象:使用
var声明射线和标签变量,仅在新交易日(ta.change(time('D')))初始化一次,之后只更新射线的终点位置,避免每根bar都创建新的线条导致性能问题。 - 动态更新射线:非新交易日时,用
line.set_x2()把射线终点更新到当前bar的时间,实现射线随K线推进延伸的效果。
内容的提问来源于stack exchange,提问作者d3b4s1s
相关产品推荐
相关产品推荐

