MT4のEAバックテストでサマータイムを正確に計算する

夏時間

MT4でEAのプログラミングをしていると、困るのが「夏時間の判定」です。こんな記事も書いているくらいです。

たいてい、MT4を扱っているFX業者のタイムゾーンはGMT+2、ニューヨークの夏時間に合わせてGMT+3になります。このように扱うと週の日足が5本になり簡便になりますからね。

EAのアルゴリズムで日本時間を用いている場合、夏時間を考慮に入れなければなりません。例えばこのようなケースです。

最後の戦略はこちらの本で提唱されている戦略ですね。

このような戦略のときには、夏時間の判定を正確に反映しなければならないのですが、MT4では夏時間の判定がなかなか厄介です。

MT4プログラムの小ネタ アメリカ夏時間を判定するプログラムというものもありますが、こちらはバックテストでは動きません。バックテストではMT4標準でGMTを取得する関数TimeGMT()が機能しないからです。

fx-onなどで販売されているEAを見ても、正確に夏時間を反映してバックテストしているプログラムが見当たらないようだったので、、人力で作ってみました。

力づくで夏時間を判定する

今回は力技で夏時間を判定しています。かなりアホなプログラムです笑

そもそもニューヨーク夏時間は、現地時間で「3月第2日曜日午前2時〜11月第1日曜日午前2時」と決められています。

ですので、TimeCurrent()で取得したサーバー時刻がこの範囲内なら夏時間、ということですね。しかもFXなので土日は考慮しなくて良いですから、このようなクソコードで判定できます。

上記、見たまんまですが、switch文で年を判定し、あとは月日からサマータイムか否かを判定しています。2005年から2038年まで対応しています。

もちろん、もっと簡便なコードにすることも可能です。この期間のカレンダーのパターンは7パターンしかありませんので。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする