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)