アメリカとヨーロッパの夏時間/冬時間を判定する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{
//アメリカ冬時間、ヨーロッパ冬時間の処理
}
}
個人的に作成する必要があったので自作したんですが、使いたい人はいるでしょうか。何か役に立てば嬉しく思います。


