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

日内图表周末/假期后线条不显示及仅展示最新日线需求

解决日内图表绘制前一日开盘/收盘线的问题

问题分析

原代码存在两个核心问题:

  • 依赖session.islastbar_regular触发线条绘制,周末或假期后第一个交易日没有前一个常规交易日的最后K线,导致逻辑不触发,线条无法生成。
  • 未对旧线条进行清理,会保留历史所有绘制的线条,无法只显示最新一日的。

修复方案

  1. 改用ta.change(time("D"))检测新交易日的到来,确保每个交易日都能触发线条绘制逻辑,兼容假期/周末后的场景。
  2. 声明全局变量存储线条对象,每次绘制新线条前删除旧线条,保证界面只显示最新的一组线条。

修复后的代码

//@version=5
indicator("My script", "test", true, max_lines_count = 2)

// 声明全局变量存储线条对象,初始为na
var line prevCloseLine = na
var line prevOpenLine = na

// 获取前一日的开盘价和收盘价
previousClose = request.security(syminfo.tickerid, "D", close[1])
previousOpen  = request.security(syminfo.tickerid, "D", open[1])

// 检测新交易日开始,触发线条更新
if ta.change(time("D"))
    // 删除旧线条
    line.delete(prevCloseLine)
    line.delete(prevOpenLine)
    
    // 计算线条的起始和结束时间:当前交易日开盘时间到下一个交易日开盘时间
    currentDayOpenTime = time("D")
    nextDayOpenTime = currentDayOpenTime + 1440*60*1000
    
    // 创建新线条并赋值给全局变量
    prevCloseLine := line.new(currentDayOpenTime, previousClose, nextDayOpenTime, previousClose, xloc.bar_time, extend.none, color.red)
    prevOpenLine := line.new(currentDayOpenTime, previousOpen, nextDayOpenTime, previousOpen, xloc.bar_time, extend.none, color.green)

关键修改说明

  • 用ta.change(time("D"))替代session.islastbar_regular:新交易日的第一根K线就会触发逻辑,避免假期后无触发的问题。
  • 新增var line变量存储线条对象:通过line.delete()在每次更新前清理旧线条,实现只显示最新一日的线条。
  • 调整时间计算:用time("D")获取当前交易日的开盘时间,确保线条从当日开盘开始绘制到次日开盘,覆盖整个交易日时段。

内容的提问来源于stack exchange,提问作者Kunthu Dhadda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:45:26