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

4

我正试图做一些看起来很琐碎的事情,但却遇到了各种问题。

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

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

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

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时间也是如此。

在处理1分钟图表时,我认为通过实施以下操作可以解决这个问题:

tostring((timenow-time)/1000)

然而,在不同的时间框架下,秒数不能正确地显示。

除此之外,不同交易所的图表在不同的时区中显示的时间都与UTC时间“不正确”。

由于时间是如此关键的数据,我肯定缺少一些相当基础的东西,但我无法确定正确的语法。

感谢您提前的任何帮助。

1个回答

5

这里涉及到几个不同的问题:

  1. Pine脚本无法了解您可能手动选择的图表时区。这只影响图表的显示。
  2. minute变量返回柱子开始时的分钟数,因此在实时柱迭代中不会更改,直到新的柱子开始为止。要获取当前分钟数,您需要使用minute的重载版本,其中可以指定毫秒级别的时间戳。内置变量timenow返回特定脚本迭代的时间戳(在实时栏中是正确的;当脚本运行在历史柱上时,timenow仅在脚本执行期间每秒更新)。因此,您需要使用minute(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 + ")")

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接