Pine Script技术需求:绘制当日特定日内K线开盘价全日水平线
解决Pine Script绘制当日第二根30分钟K线开盘价全日水平线问题
需求:获取当日第二根30分钟K线(10:30收盘的那根)的开盘价,绘制一条仅覆盖当日全天的水平线,不能延伸到次日。
原代码存在的问题:
- v1(黄线):每根K线都创建新线条,很快达到
max_lines_count=500上限,后续无法显示 - v2、v3(橙线、绿线):逻辑错误,没正确捕获目标K线的开盘价,也没控制线条的覆盖范围
修正后的代码
//@version=5 indicator('Custom Gap Indicator', shorttitle='CGI', overlay=true) // 定义当日第二根30分钟K线的收盘时刻条件 is_target_bar = hour == 10 and minute == 30 // 存储目标K线的开盘价,每日重置 var float target_open = na if ta.change(time("D")) target_open := na if is_target_bar target_open := open // 存储线条对象,每日更新而非新建 var line day_line = na if ta.change(time("D")) // 新交易日删除旧线条 if not na(day_line) line.delete(day_line) day_line := na // 目标K线收盘后创建线条,初始设置覆盖到当日剩余K线 if is_target_bar day_line := line.new(x1=bar_index - 1, y1=target_open, x2=bar_index, y2=target_open, width=3, color=color.new(color.blue, 0)) // 实时更新线条终点,确保覆盖到当日最新K线 if not na(day_line) and not is_target_bar line.set_x2(day_line, bar_index)
关键逻辑说明
- 避免线条数量超限:用
var line day_line存储单条线条对象,每个交易日仅删除旧线条、更新新线条,不会触发创建上限 - 精准捕获目标开盘价:通过
hour == 10 and minute == 30判断第二根30分钟K线的收盘时刻,此时记录该K线的开盘价 - 控制覆盖范围:目标K线收盘后创建线条,后续每根K线实时更新线条终点为当前
bar_index,确保线条只覆盖当日K线,不会延伸到次日
内容的提问来源于stack exchange,提问作者Luca_TV
相关产品推荐
相关产品推荐

