概要
夏時間,冬時間を判別する&その日の取引可否を判別する.
引数
%Y-%m-%dT%H:%M:%S形式の日時(datetime型)
戻り値
- 夏時間チェックフラグ(1なら夏時間,0なら冬時間)
- 取引可否チェックフラグ(1なら可,0なら不可=close)
コード
#201204 夏時間,冬時間を判別する&その日の取引可否を判別する関数 # 2020年12月26日(土)の6時台を取引不可能とする(「取引可能」となったバグを取り除く) def Judge_SummerAndMarketOpen_ver2(time_s): #入力は%Y-%m-%dT%H:%M:%S形式の日時(datetime型) DateYear = int(time_s.year) DateMonth = int(time_s.month) DateDay = int(time_s.day) DateHour = int(time_s.hour) DateMinute = int(time_s.minute) Nwd=int(time_s.weekday()) if (DateMonth>=1 and DateMonth<=2) or DateMonth==12: SummerCheck=0 elif DateMonth>=4 and DateMonth<=10: SummerCheck=1 elif DateMonth==3: if DateDay - Nwd > 13:#3月の夏時間への切り替えは14日以降っぽい… SummerCheck = 1 else: SummerCheck = 0 elif DateMonth==11: if DateDay - Nwd > 0: SummerCheck = 0 else: SummerCheck = 1 #市場がオープンかを判断する MarketCheck = 0 if Nwd ==0: # 月なら,朝からオープン if SummerCheck == 1: if (DateHour == 6 and DateMinute >= 10) or DateHour >= 7: MarketCheck = 1 else: if (DateHour == 7 and DateMinute >= 10) or DateHour >= 8: MarketCheck = 1 if Nwd>=1 and Nwd<=4:#火~金なら,メンテ時間以外はオープン if SummerCheck==1: if DateHour<=4 or (DateHour==5 and DateMinute <55) or (DateHour==6 and DateMinute >=10) or DateHour>=7: MarketCheck=1 else: if DateHour<=5 or (DateHour==6 and DateMinute <55) or (DateHour==7 and DateMinute >=10) or DateHour>=8: MarketCheck=1 elif Nwd==5:#土曜なら朝まではオープン if SummerCheck==1: if DateHour<=4 or (DateHour==5 and DateMinute <55): MarketCheck=1 else: if DateHour<=5 or (DateHour==6 and DateMinute <55): MarketCheck=1 #以下,例外的にクローズになる条件 #1/1の朝7時以降で,かつ平日なら,クローズ, if DateMonth==1 and DateDay==1 and Nwd<=4: if (DateHour==6 and DateMinute>55) or DateHour>=7: MarketCheck=0 # 1/2かつ月曜(1/1が日曜)なら,クローズ, elif DateMonth==1 and DateDay==2 and Nwd==0: MarketCheck = 0 # 1/3かつ火曜(1/1が日曜)かつ7時10分以下なら,クローズ(1/2が終日クローズなので,再開は1/3の7時10分以降) elif DateMonth == 1 and DateDay == 3 and Nwd == 1: if DateHour<=6 or (DateHour==7 and DateMinute<10): MarketCheck = 0 #12/25かつ平日かつ6時55分以降ならクローズ elif DateMonth == 12 and DateDay == 25 and Nwd <= 4: if (DateHour == 6 and DateMinute >= 55) or DateHour>=7: MarketCheck = 0 #12/26かつ月曜(12/25が日曜)ならクローズ elif DateMonth==12 and DateDay==26 and Nwd==0: MarketCheck = 0 # 12/26かつ土曜かつ6時台ならクローズ(12/25(金)の7時~12/28(月)~6時台はクローズ) elif DateMonth == 12 and DateDay == 26 and Nwd == 5: if DateHour <= 6: MarketCheck = 0 # 12/27かつ火曜(12/25が日曜)かつ7時10分以下なら,クローズ(12/26が終日クローズなので,再開は12/27の7時10分以降) elif DateMonth == 12 and DateDay == 27 and Nwd == 1: if DateHour <= 6 or (DateHour == 7 and DateMinute < 10): MarketCheck = 0 return(SummerCheck,MarketCheck)
夏時間,冬時間の切り替えとなる3月,11月については,pythonに於いて,月~日曜の曜日を0~6で表すことを用いて判断している.具体的には,11月1日(DateDay=1)が月曜(Nwd=0)なら,冬時間(DateDay-Nwd>0).逆を言えば,DateDay-Nwd<=0となる条件では,11月でも,10月最終週始まりの週なので,まだ夏時間と判断する.
取引可能な日時かどうかは,基本的には,OandaFXの営業スケジュールを反映させている.基本的に,平日は取引可で記載し,証券会社のスケジュールを見て,例外的に「平日だけど市場close」となっている条件を追加している.
コメント