Pine Script v5需求:绘制未被穿越的前收盘价水平线并向右延伸
解决Pine Script绘制多条未被穿越前收盘价水平线的问题
需求说明
- 在任意时间周期下,绘制**前收盘价(上一根K线收盘价)**的水平线并向右延伸
- 水平线需保留至被价格穿越为止,所有未被穿越的线都要显示
原代码问题分析
- 未定义
pdc、dpdc、offset变量,直接导致代码报错 - 使用
plot函数只能绘制单条线,无法实现多条动态水平线的需求 - 价格穿越的判断逻辑错误,仅维护单个价格变量,无法追踪多条水平线的状态
修正后的代码
//@version=5 indicator("未被穿越的前收盘价水平线", overlay=true) // 存储所有未被穿越的水平线对象 var line[] pdc_lines = array.new_line() // 获取上一根K线的收盘价(前收盘价) prev_close = close[1] // 进入新K线时,创建新的前收盘价水平线 if barstate.isnew // 在当前K线起点绘制水平线,初始延伸至当前K线位置 new_line = line.new(bar_index - 1, prev_close, bar_index, prev_close, color=color.new(#c8055a, 40), width=2) array.push(pdc_lines, new_line) // 遍历所有水平线,检查是否被价格穿越,未穿越则延长线 var int i = 0 while i < array.size(pdc_lines) current_line = array.get(pdc_lines, i) line_price = line.get_y1(current_line) // 判断当前K线是否上下穿越水平线 crossed = (close > line_price and open < line_price) or (close < line_price and open > line_price) if crossed line.delete(current_line) array.remove(pdc_lines, i) else // 未穿越则将线延长至当前K线 line.set_x2(current_line, bar_index) i += 1
代码关键逻辑说明
- 用
var line[]数组存储所有水平线对象,实现多条线的状态管理 - 通过
barstate.isnew判断新K线生成时机,创建对应前收盘价的水平线 - 遍历数组内的每条线:
- 若当前K线价格穿越水平线,则删除该线并从数组移除
- 未穿越则调用
line.set_x2将线延长至当前K线位置,实现向右延伸效果
内容的提问来源于stack exchange,提问作者aganesan99
相关产品推荐
相关产品推荐

