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

Pine Script v5指定日期间隔垂直线绘制问题及优化问询

在TradingView的Pine Script v5中优化日期间隔垂直线绘制

我需要在TradingView中使用Pine Script v5实现以下功能:基于通过input confirm参数选择的起始日期,按照数组内设定的天数偏移量(如5、10、15天等)绘制垂直线。例如起始日期选6月1日,则需在6月6日、11日等对应日期绘制垂直线。

最初编写的代码仅能绘制起始日期的垂直线,将时间戳调整为毫秒格式后代码可正常运行,但希望找到无需遍历数组的更优实现方式。

初始代码(仅绘制起始日期)

//@version=5
indicator("Vertical lines on Dates", overlay = true)

// 交互式起始日期
start_date = input.time(timestamp("1 Jul 2021 00:00 +0000"), "Start Date",inline = "01",group = grp1,confirm = true)

// 定义天数数组
days = array.new_int(21)
array.set(days, 0, 5)
array.set(days, 1, 10)
array.set(days, 2, 15)

for i = 0 to (array.size(days) == 0 ? na : array.size(days) - 1)
    var time_unix=(start_date+array.get(days,i)*86400)
    if time == time_unix
        line.new(time_unix,high,time_unix,low,xloc = xloc.bar_time)

调整后可运行代码(遍历数组实现)

//@version=5
indicator("Vertical lines on Dates", overlay = true)

grp1 = "设置"
start_date = input.time(timestamp("1 Jul 2021 00:00 +0000"), "起始日期",inline = "01",group = grp1,confirm = true)

// 定义天数数组
days = array.new_int(3)
array.set(days, 0, 5)
array.set(days, 1, 55)
array.set(days, 2, 105)

var lastOccurance_ = start_date
for i = 0 to (array.size(days) == 0 ? na : array.size(days) - 1)
    lastOccurance_ := start_date + array.get(days,i)*60*60*24*1000
    if lastOccurance_ == time
        line.new(bar_index,high * 2,bar_index,low * 0.5,color = color.black)

优化方案(无需遍历数组)

核心思路是计算当前K线时间与起始日期的天数差,直接判断该差值是否存在于设定的偏移天数数组中,避免循环遍历:

//@version=5
indicator("优化版日期偏移垂直线", overlay=true)

// 分组设置
grp1 = "参数设置"
// 可确认的起始日期输入
start_date = input.time(timestamp("1 Jul 2021 00:00 +0000"), "起始日期", inline="01", group=grp1, confirm=true)
// 直接初始化偏移天数数组(支持任意数量的天数)
offset_days = array.new_int(3, 5, 10, 15)

// 计算当前K线时间与起始日期的整数天数差
days_since_start = math.floor((time - start_date) / (86400 * 1000))

// 当天数差在数组中,且是该日期的第一根K线时绘制垂直线
if array.includes(offset_days, days_since_start) and ta.change(time("D"))
    // 垂直线覆盖近期高低点范围,避免因当前K线高低限制显示不全
    line.new(bar_index, ta.highest(high, 20), bar_index, ta.lowest(low, 20), 
             color=color.new(color.blue, 0), width=2, style=line.style_solid)

优化点说明

  1. 避免数组遍历:使用array.includes()直接判断天数差是否在目标数组中,代码更简洁高效
  2. 防止重复画线:通过ta.change(time("D"))确保每个日期仅在第一根K线绘制一次垂直线
  3. 更灵活的数组初始化:直接用array.new_int()的多参数形式初始化数组,省去多次array.set()的冗余操作
  4. 自适应垂直线范围:用近期高低点定义垂直线的上下端点,避免因当前K线高低导致线条显示不全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:30:42