pyてよn日記

一寸先は闇が人生

AWS:NY 証券取引所の取引時間と Amazon CloudWatch の設定

 NY 証券取引所(以下,NYSE)で米国株を扱う際の日本との時差について解説する.また,それに関連して時差を考慮した際の Amazon CloudWatch の設定を試みた.

日本と米国の時差

 日本と米国全土の時差は 14 〜 17 時間(サマータイム時は 13 〜 16 時間)である.日本の方が早く進んでいる

  • サマータイムの例

    • 日本: 2019/08/01 21:00
    • 米国(NY):2019/08/01 08:00
  • 冬時間の例

    • 日本: 2019/01/01 14:00
    • 米国(NY):2019/01/01 00:00

NYSE の取引時間

 NYSE では,現地時間で以下の時間帯が取引時間となっている.

  • プレマーケット:08:00 - 9:30
  • 立会時間:09:30 - 16:00
  • アフターマーケット:16:00 - 20:00

 プレマーケット,アフターマーケットは,米国株式市場の時間外取引(Extended hours trading)と呼ばれる.現地時間は常に変わらないが,サマータイム(夏時間),ウィンタータイム(仮)(冬時間)の関係で日本時間では取引時間がずれるため注意する必要がある.それぞれの時期での現地時間,日本時間の対応をまとめてみた.

サマータイム

  • 3 月第 2 日曜日 〜 11 月第 1 日曜日(約 8 ヶ月)
  • 2nd SUN of March 〜 1st SUN of November

 米国では,3 月第 2 日曜日から 11 月第 1 日曜日までサマータイムが実施される.その際の株式市場の取引時間帯と日本時間との対応は以下の通りとなる.

NYSE の取引時間帯と日本時間の対応表(夏時間)

現地時間(US) 日本時間
プレマーケット 08:00 - 09:30 21:00 - 22:30
立会時間 09:30 - 16:00 22:30 - 翌 05:00
アフターマーケット 16:00 - 20:00 翌 05:00 - 翌 09:00

冬時間

  • 11 月第 2 月曜日 〜 3 月第 2 土曜日(約 4 ヶ月)
  • 2nd MON of November 〜 2nd SAT of March

 冬時間はサマータイム以外の時期である.

NYSE の取引時間帯と日本時間の対応表(冬時間)

現地時間(US) 日本時間
プレマーケット 08:00 - 09:30 22:00 - 23:30
立会時間 09:30 - 16:00 23:30 - 翌 06:00
アフターマーケット 16:00 - 20:00 翌 06:00 - 翌 10:00

 日本時間では,冬時間の方が夏時間よりも 1 時間遅い時間となっている.

小まとめ

 NYSE の取引時間と日本時間との対応に関する分かりやすい図があったので以下に示しておく.

https://faq.monex.co.jp/usr/faq/images/FsgekFMKakytsO2a.jpg?1531788121

https://faq.monex.co.jp/faq/show/971?site_domain=default より引用

NYSE の前日の株価の情報を取得したいときの Amazon CloudWatch の設定

 現在,AWS Lambda にて,NY 株式市場の特定銘柄の株価を取得する関数を定期実行している.これは,AWSAmazon CloudWatch というサービスで cron を使用したスケジューラを用いて行なっている(正確には「cron 方式のスケジュール式を用いて」).

docs.aws.amazon.com

 サマータイムを考慮した時間の設定が多少ややこしかったので,スケジューラの設定に関してメモを残しておく.

CloudWatch に登録したスケジュール式

docs.aws.amazon.com

 その日の終値を含めた値を取得することを考える.取引時間中では当然その日の終値を取得できないため,取引時間終了後,終値が更新された段階で API 経由で取得する(詳細は省力).

 例えば 2019/08/07 の NYSE の特定銘柄の終値を取得したい場合,以下のように日本時間を考慮すれば良い.

  • サマータイム

    • 現地時間:2019/08/07 16:00 close
    • 日本時間(夏時間):2019/08/08 05:00
  • 冬時間

    • 現地時間:2019/12/01 16:00 close
    • 日本時間(冬時間):2019/12/02 06:00

 ここまでわかれば,後は cron の設定をするだけ.cron 式の形式は以下の通り(詳しくは上記のページを参照).

cron([Minutes] [Hours] [Day-of-month] [Month] [Day-of-week] [Year])

 今回はリアルタイム性が必要ないのと,サマータイムに関連する cron の設定方法が分からなかったため,より遅い時間に終値が定まる冬時間を基準に cron 式を CloudWatch に登録した(システムのタイムゾーンAsia/Tokyo にしてある).

cron(30 6 ? * TUE-SAT *)

 火曜日から土曜日,日本時間の朝 6:30 に実行する.これにより,以下のような形で NYSE終値を取得できるようになる.

  • 日本時間の火曜日の朝には,月曜日の終値が取得できる
  • 日本時間の水曜日の朝には,火曜日の終値が取得できる
  • ...
  • 日本時間の土曜日の朝には,月曜日の終値が取得できる

 自分の知識の無さによるものであるが,本来なら夏時間と冬時間を考慮した設定ができる気がする.

終わりに

 現在は自分の日常感覚とずれるのが面倒で AWS Lambda 側のタイムゾーンを(環境変数の設定で)TZ=Asia/Tokyo にしているが,システムを作る場合にはシステム内部のタイムゾーンUTC に設定しておいた方が無難なのかなと感じた.標準を UTC にして,アプリケーション内では常に時差を取る,といった形にすれば良さそう.

 下記の記事と,そのブックマークコメントが参考になりそうなので,それらを見てもう少し勉強してみようと思う.

www.m3tech.blog

b.hatena.ne.jp