如何在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
相关产品推荐
相关产品推荐

