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

Zwi*_*der 4 datetime pine-script

我试图做一些看似微不足道的事情,但却遇到了各种各样的问题。

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

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

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

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

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

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

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

在处理 1m 图表时,我想我可以通过实施来解决这个问题

tostring((timenow-time)/1000)

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

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

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

预先感谢您的任何帮助。

Pin*_*ucF 5

这里有几个不同的问题:

  1. Pine 脚本看不到您可能手动选择的图表时区。这仅影响图表的显示。
  2. 该变量返回柱开始时minute的分钟,因此在实时柱中的脚本迭代中不会更改,直到新柱开始。要获取当前分钟,您将需要使用可以在其中指定以毫秒为单位的时间戳的重载版本。内置变量返回特定脚本迭代时间的时间戳(这在实时柱中是正确的;当脚本在历史柱上运行时,仅在脚本执行期间每秒更新一次)。所以你需要使用.minutetimenowtimenowminute(timenow)
  3. 如果您想minute()返回交易所以外的另一个时区的时间,您可以使用第二个参数来指定时区,这就是我们在第二个示例中所做的。在我们的示例中,您可以通过脚本的“设置/输入”更改时区。与时区一起使用,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 + ")")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述