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

如何设置line.new的x1、x2在指定交易时段起止,仅当日显示

解决思路

  • 第一步:通过time()函数指定时区为Asia/Shanghai(对应东八区UTC+8),匹配到每日8:30的开盘bar和次日3:50的收盘bar对应的索引值,作为线段的x1、x2坐标
  • 第二步:用var数组存储当日生成的所有线段,每日开盘时自动清空上一交易日的旧线段,保证仅展示当前交易日的线段
  • 第三步:修改原有line.new的逻辑,取消extend.right参数,直接用匹配到的起止坐标替换原来的bar_index相关参数

可直接运行的修改后代码

//@version=5
indicator("交易日时段水平线", overlay=true)
var step = syminfo.mintick*500
// 存储当日生成的线段
var array<line> dayLines = array.new_line()

// 匹配东八区当日8:30的bar索引
startTime = time("D", "08:30-08:31", "Asia/Shanghai")
x1 = bar_index - ta.barssince(startTime == time)
// 匹配东八区次日3:50的bar索引
endTime = time("D", "03:50-03:51", "Asia/Shanghai")
totalBarsOfDay = ta.valuewhen(endTime == time, bar_index - ta.valuewhen(startTime == time, bar_index, 0), 0)
x2 = x1 + totalBarsOfDay

// 每日开盘时清空上一日的旧线段
if startTime
    array.clear(dayLines)

// 在最后一根K线生成线段
if barstate.islast
    // 先清空之前最后一根K线生成的重复线段
    for i = 0 to array.size(dayLines) - 1
        line.delete(array.get(dayLines, i))
    array.clear(dayLines)
    // 生成新的水平线段
    for counter = 0 to 5 - 1
        stepUp = math.ceil(close / step) * step + (counter * step)
        currentLine = line.new(x1, stepUp, x2, stepUp, color=color.blue, width=2)
        array.push(dayLines, currentLine)

逻辑说明

  • 时区参数用Asia/Shanghai即可完全匹配东八区时间,无需手动换算夏令时,Pine Script会自动处理
  • 若你交易的品种收盘时间不是次日3:50,直接修改endTime里的时间字符串即可适配
  • 数组存储线段的逻辑是为了避免K线刷新时生成大量重复线段,保持图表整洁
  • 如果需要调整线段的数量,直接修改for counter = 0 to 5 -1里的数字即可,比如要生成10条就改成0 to 10 -1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:06:05