海外の取引所の時間を日本時間に変換する

Pineスクリプトで参照できるビルトイン変数 hour は、取引所のタイムゾーンの時間を保持している。これは、あくまで「取引所のタイムゾーン」であって、TradingViewのチャートで設定してるタイムゾーンの時間ではないことに注意。

TSEやOSEなど日本の取引所の銘柄については、取引所のタイムゾーンが東京のため、変数 hour は日本時間(UTC+9)を保持しているので問題ない。
※協定世界時(UTC)と日本時間の時差は+9時間(UTC+9)

海外の取引所(CME、FXCM、OANDAなど)の銘柄に対しては、日本とタイムゾーンが異なり、変数 hour はチャート上で表示される日本時間と一致しない。

例えば、TradingViewのタイムゾーン設定が "(UTC+9) Tokyo" となっていることを前提にすると、CMEの銘柄をチャートに表示しているとき、Pineスクリプトで hour == 9 の条件で何かプロットしようとしても、チャート上では23時にプロットされる。また、FXCM、OANDAの銘柄の場合は、hour == 9 の条件でプロットしても、チャート上では22時にプロットされる。

このようにそれぞれの取引所のタイムゾーンによって、変数 hour の値とチャート上の時間での表示にずれが生じる。

このような海外の取引所との時差の問題をPineスクリプト上で上手く扱うには、変数 time を利用する。

変数 time は、UTC±0 の時間をミリ秒の値で保持しているので、この値を日本時間(UTC+9)に変換すれば、取引所に関わらずチャート上の時間と一致した表示を行うことができる。


//@version=4
study("local hour", overlay=true, scale=scale.none)

// 1h のチャート表示用

offset = 9 // 協定世界時(UTC)と日本の時差は+9時間
localhour = (time / (1000 * 60 * 60) + offset) % 24 // UTC+offsetの時間に変換

plot(hour == 9 ? 10e20 : na, style=plot.style_histogram, color=color.black)
plot(localhour == 9 ? 10e20 : na, style=plot.style_histogram, color=color.red, linewidth=2)