Pine Script:如何在每次价格更新时在标签上的图表时区显示当前时间?

Pine Script: How to display current time in chart's timezone on label, at every price update?

我正在尝试做一些看似微不足道的事情,但 运行 会遇到各种各样的问题。

每当当前价格更新时,我都想在标签上绘制某些基本信息——不管我的图表的时间范围如何。

我能够准确显示数量和价格信息,但是显示时间一直是个挑战。

我的第一次尝试是使用以下代码:

if (barstate.islast)
    label.set_text(
         id=myLabel,
         text="\nTime: " + tostring(hour) + ":" + tostring(minute) + ":" + tostring(minute)
         )

我很快了解到,即使我的图表设置为纽约时区(即 UTC-4),调用 tostring(hour) 也会显示 UTC 时间。

弄清楚如何指定我希望它显示的时间与我图表的时区相对应是第一个主要障碍,我一直在纠结timestamp() syminfo.timezone 无济于事。

我的第二个主要问题是 tostring(second) 不能正确显示秒数,即使是 UTC 时间也是如此。

在处理 1m 图表时,我认为我设法通过实施

解决了这个问题

tostring((timenow-time)/1000)

但是,秒数在不同的时间范围内显示不正确。

此外,来自不同时区的不同交易所的图表都将相对于 UTC 时间“错误地”显示时间。

一定是我遗漏了一些相当基本的东西,因为时间是如此重要的数据,但我就是无法确定正确的语法。

在此先感谢您的帮助。

这里有几个不同的问题:

  1. Pine 脚本对您可能手动选择的图表时区不可见。那只会影响图表的显示。
  2. minute 变量 return 是柱的 开始 的分钟,因此在实时柱中的脚本迭代中不会更改,直到一个新的酒吧开始。要获得当前分钟,您将需要使用 minute where you can specify a timestamp in ms. The timenow 内置变量的重载版本 returns 特定脚本迭代时间的时间戳(在实时栏中是这样;当脚本在历史柱上 运行,timenow 仅在脚本执行期间每秒更新一次)。所以你需要使用 minute(timenow).
  3. 如果您希望 minute() 到 return 在另一个时区而不是交易所的时间,您可以使用第二个参数来指定时区,这就是我们在此处的第二个示例中所做的。在我们的示例中,您可以通过脚本的“Settings/Inputs”更改时区。与时区一起使用,minute() 看起来像:
    minute(timenow, "GMT-4").
//@version=4
study("", "Time", true)
i_timeZone = input("GMT-4")
f_print(_txt) => var _lbl = label.new(bar_index, highest(10)[1], _txt, xloc.bar_index, yloc.price, #00000000, label.style_none, color.gray, size.large, text.align_left), label.set_xy(_lbl, bar_index, highest(10)[1]), label.set_text(_lbl, _txt)

f_print(tostring(hour(timenow), "00:") + tostring(minute(timenow), "00:") + tostring(second(timenow), "00") + " (Exchange)\n")
f_print(tostring(hour(timenow, i_timeZone), "00:") + tostring(minute(timenow, i_timeZone), "00:") + tostring(second(timenow, i_timeZone), "00") + " (Input: " + i_timeZone + ")")