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

如何在Pine Script 5中测试当前K线日期?时间戳异常问题

解决Pine Script日线图时间戳匹配问题

我在日线时间框架的图表上,想给特定日期画竖线,于是写了测试代码对比当前K线日期和目标日期,但发现两个时间戳数值差了至少10倍,完全不符合预期。

原测试代码:

var current = timestamp(year, month,dayofmonth,0,0,0)
var against = timestamp(2023, 5, 12, 0, 0, 0)

var okDate = (current == against)

str = "Current: " + str.tostring(current) + "\n" + "Against: " + str.tostring(against)

if barstate.islast
    label.new(bar_index + 5, high + 5, text=str, color = color.lime,
    style=label.style_label_lower_left, textalign = text.align_left, size=size.normal)

问题原因

核心问题出在var关键字的使用——var声明的变量只会在脚本加载时初始化一次,后续每根K线都不会重新计算。所以current存储的是脚本启动时第一根K线的时间戳,而不是当前遍历到的K线日期。随着K线推进,year/month/dayofmonth已经对应新的日期,但current的值一直停留在初始状态,自然和目标时间戳against差距巨大。

修正后的代码

// 去掉var,让current随每根K线重新计算当前日期的时间戳
current = timestamp(year, month, dayofmonth, 0, 0, 0)
against = timestamp(2023, 5, 12, 0, 0, 0)

okDate = current == against

// 日期匹配时绘制竖线,完成原本需求
if okDate
    line.new(bar_index, low, bar_index, high, color=color.red, width=2)

// 最后一根K线显示时间戳对比
str = "Current: " + str.tostring(current) + "\n" + "Against: " + str.tostring(against)
if barstate.islast
    label.new(bar_index + 5, high + ta.atr(10), text=str, color=color.lime,
              style=label.style_label_lower_left, textalign=text.align_left, size=size.normal)

修正说明

  • 去掉所有不必要的var,让current和okDate在每根K线都重新计算,确保获取的是当前K线的日期时间戳
  • 新增了日期匹配时绘制竖线的逻辑,直接实现原本的需求
  • 调整了标签的Y轴位置,用ATR指标偏移避免标签超出图表可视范围

内容的提问来源于stack exchange,提问作者Jérôme Verstrynge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:33:10