You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TradingView PineScript:昨日高点线起始位置异常及代码优化请求

TradingView PineScript:昨日高点线起始位置异常及代码优化请求

嗨,我来帮你搞定这个昨日高点线的问题,顺便给代码做个简化优化~

首先先明确你的核心问题和需求:

问题:当前代码画出的黄色高点线,是从前一根K线的索引开始的,而不是从昨日高点对应的K线位置,或者昨日开盘的起始位置。
需求:

  • 让高点线从昨日高点的K线位置,或者昨日交易日的起始位置开始绘制
  • 当今日收盘价突破这条线时,线在突破点终止
  • 清理代码里的冗余部分,简化逻辑

修正并优化后的代码

//@version=5
indicator(title='HL', shorttitle='HL', overlay=true)

// 输入参数
i_htf = 'D'
i_show_last = 1
i_ln_h_offset = 20
i_hide_crossed = true

// 获取昨日日线级别的高点,以及昨日日线最后一根K线在当前图表的索引
[high_htf, prev_day_last_bar_idx] = request.security(symbol=syminfo.tickerid, timeframe=i_htf, expression=[high[1], bar_index], lookahead=barmerge.lookahead_on)

// 判断是否突破价格水平的函数
break_line(price) =>
    (close[1] < price and close >= price) or (close[1] > price and close <= price)

// 初始化线条数组
var line[] high_lines = array.new_line()

// 当日线切换时(新交易日开始),创建新的昨日高点线
if ta.change(time('D'))
    // 删除超出显示数量的旧线条
    if array.size(high_lines) >= i_show_last
        line.delete(array.shift(high_lines))
    
    // 创建新线:起点是昨日日线最后一根K线的索引,终点往后偏移指定数量
    new_line = line.new(x1=prev_day_last_bar_idx, y1=high_htf, x2=bar_index + i_ln_h_offset, y2=high_htf, color=#ffff00)
    array.push(high_lines, new_line)

// 更新每条线的终点,并处理突破逻辑
for current_line in high_lines
    line_price = line.get_y1(current_line)
    // 如果还没突破,持续更新线的终点到当前K线+偏移量
    if not break_line(line_price)
        line.set_x2(current_line, bar_index + i_ln_h_offset)
    else
        // 突破后,将线的终点设为突破的K线索引
        line.set_x2(current_line, bar_index)
        // 如果开启隐藏突破后的线,直接删除
        if i_hide_crossed
            line.delete(current_line)
            array.remove(high_lines, array.indexof(high_lines, current_line))

关键优化点说明

  1. 修正线的起始位置
    之前用last_index = bar_index是取的当前图表前一根确认K线的索引,现在通过request.security直接获取昨日日线最后一根K线在当前图表的索引(prev_day_last_bar_idx),这样线的起点就准确对应到昨日的结束位置,也就是你需要的“昨日高点/昨日起始”附近的位置。

  2. 简化线条管理逻辑
    原来的keep_lines和all_lines两个数组合并成一个high_lines,减少了数组之间的冗余操作,逻辑更清晰:只在日线切换时创建新线,超出显示数量就删除旧线。

  3. 优化突破处理逻辑
    把突破判断和线条更新合并到一个循环里,避免重复遍历数组。突破后直接调整线的终点,开启i_hide_crossed时直接删除线条,减少不必要的判断。

  4. 清理冗余代码
    移除了不必要的var变量(比如last_high、last_index),简化了线条创建的触发时机(从barstate.isconfirmed改为ta.change(time('D')),只在新交易日开始时创建新线,避免重复创建)。

这样调整后,黄色高点线就会从昨日的最后一根K线位置开始绘制,突破时也会准确在突破点终止,代码也更简洁易维护啦~

备注:内容来源于stack exchange,提问作者Arun_K_Bhaskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:59:31