アメリカとヨーロッパの夏時間/冬時間を判定するMQL4コード

以前「移動平均線クロスを知らせてくれるインジケーター」という記事を掲載しましたが、久しぶりに MQL4 に関するネタを書いてみます。


FX などの運用で広く使われているプラットフォーム MT4,MT5 では、表示されている時刻は日本時間ではなく開発元 MetaQuotes 社の本社があるキプロス時間になっています。

周知の通りヨーロッパには夏時間と冬時間があるため、キプロスでもヨーロッパ式に以下の期間が夏時間になります。

  • 3月最終日曜日~10月最終日曜日

一方、アメリカ時間では夏時間の期間は以下の通りとなっています。

  • 3月第2日曜日~11月第1日曜日

つまり、ヨーロッパ時間とアメリカ時間では切替え日に違いがあり、「アメリカ時間では夏時間になっているが、ヨーロッパではまだ冬時間」「ヨーロッパ時間では冬時間だが、アメリカ時間では夏時間」という期間が存在することになります。

このずれについては、一般的にはあまり気にする人はいないと思います。しかしながら、例えば夏時間と冬時間を考慮して時刻指定で動作するEAを自作する場合などは留意する必要があります。

そこで、はたして需要があるかどうかわかりませんが、アメリカ時間とヨーロッパ時間の夏時間/冬時間を考慮する関数を作成してみました。

bool DST_US()
  {
   // アメリカ夏時間は true、冬時間は false を返す

   bool ret = false;
   
   datetime DST_Start;
   datetime DST_End;
   datetime Local_Time = TimeCurrent();
   
   //夏時間の開始日(3/14の前の日曜日)
   DST_Start = StringToTime(IntegerToString(Year()) + ".03.14");
   DST_Start = DST_Start - TimeDayOfWeek(DST_Start) * 24 * 60 * 60;
   
   //夏時間の終了日(11/7の前の日曜日)
   DST_End = StringToTime(IntegerToString(Year()) + ".11.07");
   DST_End = DST_End - TimeDayOfWeek(DST_End) *24 * 60 * 60;
   
   if(Local_Time > DST_Start && Local_Time < DST_End) ret = true;
   return ret;
  }

bool DST_EU()
  {
   // ヨーロッパ夏時間は true、冬時間は false を返す

   bool ret = false;
   
   datetime DST_Start;
   datetime DST_End;
   datetime Local_Time = TimeCurrent();
   
   //夏時間の開始日(3/31の前の日曜日)
   DST_Start = StringToTime(IntegerToString(Year()) + ".03.31");
   DST_Start = DST_Start - TimeDayOfWeek(DST_Start) * 24 * 60 * 60;
   
   //夏時間の終了日(10/31の前の日曜日)
   DST_End = StringToTime(IntegerToString(Year()) + ".10.31");
   DST_End = DST_End - TimeDayOfWeek(DST_End) *24 * 60 * 60;
   
   if(Local_Time > DST_Start && Local_Time < DST_End) ret = true;
   return ret;
  }

使用する際のコードは以下の通りです。

   bool ret_us = DST_US();
   bool ret_eu = DST_EU();

   if(ret_us == true){

      if(ret_eu == true){

        //アメリカ夏時間、ヨーロッパ夏時間の処理

      }else{

        //アメリカ夏時間、ヨーロッパ冬時間の処理

      }
   }else{

      if(ret_eu == true){

        //アメリカ冬時間、ヨーロッパ夏時間の処理

      }else{

        //アメリカ冬時間、ヨーロッパ冬時間の処理

      }
   }

個人的に作成する必要があったので自作したんですが、使いたい人はいるでしょうか。何か役に立てば嬉しく思います。