Pythonで今が夏時間か冬時間かを調べる

夏時間、冬時間とMT5について

アメリカではサマータイム制度があり、取引時間が異なります。夏時間のほうが取引時間が1時間早くなります。

夏時間(サマータイム)3月第2日曜日~11月第1日曜日
冬時間(標準時間)11月第1日曜日~3月第2日曜日
夏時間、冬時間の期間

日本はUTCから9時間早く時間が進むため。UTCが0時の時、日本は9時です。MT5に表示さる時刻は冬時間(標準時間)の期間はUTCより2時間早く、日本より7時間遅くなります。夏時間(サマータイム)はMT5の表示時刻はUTCより3時間早くなり、日本より6時間遅くなります。MT5からデータを取得して内容を確認する場合、Pythonのlog出力では、自動で+9時間されて日本時間で表示されてしまいますが、MT5の時刻で確認したい場合、この7時間や、6時間を戻した時間にしないと確認しずらくなります。oandaのMT5では日本時間で表示するプラグインが用意されていますが、これを使うと表示が重なって全然使えなかったので、私はそのまま2時間ずれ(夏時間は3時間ずれ)の表示を使用しています。

夏時間か冬時間かどちらの時間帯かPythonで調べる

ローソク足の時刻を表示する場合、夏時間か冬時間かどちらの時間帯かで表示する時間の補正値が変わるので、どちらの時間帯かを確認する関数があると便利です。その関数が以下になります。

import datetime

JST = datetime.timezone(datetime.timedelta(hours=+9), 'JST')

def summer_start(now=None):
    if now is None:
        now = datetime.datetime.now(tz=JST)
    #3月第2日曜日から
    tgt_day = datetime.datetime(
        now.year,
        3,
        8,
        0,
        0,
        tzinfo=JST)
    #youbi = ['MON','TUE','WED','THU','FRI','SAT','SUN']
    move_day = 6 - tgt_day.weekday()
    tgt_day = tgt_day + datetime.timedelta(days=move_day) + datetime.timedelta(hours=3)
    return tgt_day

def winter_start(now=None):
    if now is None:
        now = datetime.datetime.now(tz=JST)
    #11月第1週日曜日から
    tgt_day = datetime.datetime(
        now.year,
        11,
        1,
        0,
        0,
        tzinfo=JST)
    #youbi = ['MON','TUE','WED','THU','FRI','SAT','SUN']
    move_day = 6 - tgt_day.weekday()
    tgt_day = tgt_day + datetime.timedelta(days=move_day) + datetime.timedelta(hours=1)
    return tgt_day

def is_summer_time(now=None):
    if now is None:
        now = datetime.datetime.now(tz=JST)
    ss = summer_start(now=now)
    ws = winter_start(now=now)
    summer = False
    if ws > now > ss:
        summer = True
    return summer

夏時間は3月第2日曜日から、冬時間は11月第1週日曜日からです。
datetimeライブラリを用いて、年、月、曜日を取得し、今が夏時間か冬時間を調べる関数の作り方です。
summer_start()は夏時間の開始時刻、winter_start()は冬時間の開始時刻
is_summer_time()は現在時刻が夏時間ならTrue,冬時間ならFalseを返します 。

この関数を使って時刻データを調整したローソク足の取得方法→ ”MT5のcandleデータをDataframeで取得”

コメント