代码之间的时区转换

Timezone convertion between tickers

我正在尝试为那些在代码 SPX 交易时段内的柱状图 ES1! 上色背景。
我们可以使用 time(resolution, session) 函数来查明柱是否在指定的会话中。

t1 = time(timeframe.period, "0930-1600")
bgcolor(t1 ? color.yellow : na)

这在代码 SPX 上使用时有效。
正如预期的那样,您可以看到所有条形图都有黄色背景。
为什么?因为 SPXSPX 代码的时区 09:3016:00 之间交易,即 America/New_York

当我们将代码切换为 ES1! 时,黄色背景也从 09:30 开始。
原因是 time(resolution, session) 函数中的 session 参数是在当前代码的时区中计算的。

SPX 在时区 America/New_York 进行交易,即 UTC-4
ES1! 在时区 America/Chicago 进行交易,即 UTC-5

因此,当 SPX 在纽约 09:30 开始交易时,芝加哥只有 08:30
因此,我需要 ES1! 图表上的黄色背景从 08:30.
开始 但是,无法在另一个时区评估 time(resolution, session) 函数。

我需要的是 time() 还考虑时区的函数。
理想情况下是这样的:

t1 = time(timeframe.period, "0930-1600", "America/New_York")

当当前柱落在纽约交易时段内时,return ES1! 的非 na 值。
我知道当前的 time(resolution, session) 函数无法做到这一点。

有人对此有解决方案或解决方法吗?

可以用security来计算时间:

t1 = security("SPX", timeframe.period, time(timeframe.period, "0930-1600"))
bgcolor(t1 ? color.yellow : na)

更新

正如 Bjorn Mistiaen 在评论中注意到的那样,gaps 参数必须设置为 barmerge.gaps_on:

t1 = security("SPX", timeframe.period, time(timeframe.period, "0930-1600"), gaps=barmerge.gaps_on)
bgcolor(t1 ? color.yellow : na)