見出し画像

Pine Script™ (v6) の覚書 - コラム : チャートの1日はいつ始まるの?(TimeZoneについて) (5)

前回までの話


夏時間について

夏時間を持つtimezoneがあります。たとえば、"America/New_York"は、EST(GMT-5)と夏時間EDT(GMT-4)のことですが、timezoneに"America/New_York"を指定している限り、自動的に切り替わります。
夏時間の難しいところは、地域によって、切り替えのタイミングが異なることです。

夏時間の例:
America/New_York 3月2週目の日曜〜11月1週目の日曜日
Europe/London  3月の最終日曜日〜10月の最終日曜日

また、おそらく便宜上使われているであろう為替チャートのGMT+2(夏時間GMT+3)がどのタイミングで切り替わるのかはわかりません。きちんと調べていませんが、おそらくEST/EDTのタイミングなのではないかと想像しています。

夏時間か冬時間かを判定する

とりあえず、Europe/London(GMTとBST)、America/New_York(ESTとEDT)、America/Chicago(CSTとCDT)について、今の時間(timenow)が夏時間なのかどうかを調べて表示するスクリプトを書いてみました。

hour()でtimezone名("America/New_York")で取得したtimestampと、UTC/GMT表記("GMT-5"や"GMT-4")で取得したtimestampを比較して、夏時間なのか冬時間なのかを判定しています。

timezoneのGMTとの差が1時間単位の場合には何時かだけを見ればいいのでこの方法でできますが、30分単位の差の場合はこの方法では判定できません。たとえば、インドのtimezone ISTはGMT+5.5(夏時間はなし)です。

hour(time, timezone) → series int

https://jp.tradingview.com/pine-script-reference/v6/#fun_hour-1
t=table.new(position.top_right,100,100,color.new(color.blue,80),color.new(color.yellow,60),2,color.new(color.orange,60),2)

t.cell(10,10,"Europe/London",text_color=color.new(color.orange,40))
t.cell(11,10,"America/New_York",text_color=color.new(color.orange,40))
t.cell(12,10,"America/Chicago",text_color=color.new(color.orange,40))

LondonTime=switch hour(timenow,"Europe/London")
    hour(timenow,"GMT")=>"GMT"
    hour(timenow,"GMT+1")=>"BST(GMT+1)"
    =>na

t.cell(10,20,LondonTime,text_color=color.new(color.blue,20))

New_YorkTime=switch hour(timenow,"America/New_York")
    hour(timenow,"GMT-5")=>"EST(GMT-5)"
    hour(timenow,"GMT-4")=>"EDT(GMT-4)"
    =>na

t.cell(11,20,New_YorkTime,text_color=color.new(color.blue,20))

ChicagoTime=switch hour(timenow,"America/Chicago")
    hour(timenow,"GMT-6")=>"CST(GMT-6)"
    hour(timenow,"GMT-5")=>"CDT(GMT-5)"
    =>na

t.cell(12,20,ChicagoTime,text_color=color.new(color.blue,20))

pinescriptではGMTは使えましたが、BSTとEST/EDTとCST/CDTは使えないということが確認できました(のでGMT表記)。
このスクリプトでは、Europe/LondonとAmerica/New_YorkとAmerica/Chicagoのtimezoneが夏時間かどうかを右上に表示します。(図1)

図1 英米の夏時間or冬時間(3月18日時点)

実はstr.format_time()でも"z"で都市名で指定した場合の実際のtimezone(America/New_Yorkの場合EDTかEST)を取得することができます。(図2)

str.format_time(time, format, timezone) → series string

https://jp.tradingview.com/pine-script-reference/v5/#fun_str.format_time
// イギリス
t.cell(10,21,str.format_time(timenow,"z","Europe/London"),text_color=color.new(color.blue,20))

// アメリカ(New_York)
t.cell(11,21,str.format_time(timenow,"z","America/New_York"),text_color=color.new(color.blue,20))

// アメリカ(Chicago)
t.cell(12,21,str.format_time(timenow,"z","America/Chicago"),text_color=color.new(color.blue,20))
図2 str.format_timeでtimezoneを取得表示した場合(下段)

ところが、EDTやCDTが取得できるのにこれをtimezoneの指定に用いることができません(図3)。ご注意ください。

図3 str.fromat_timeにEDTを指定した場合のエラー

ESTとCST(アメリカ)のSTはStandard Time
BST(イギリス)のSTはSummer Time
で逆になっています。面白いですね。

続く


いいなと思ったら応援しよう!

rca よろしければ応援お願いします!