cAlgo Tips & Sample

MT4とcTraderでタイムゾーンを考える

MT4とcTraderではタイムゾーンの感覚が異なる

タイムゾーン、「東京時間」とか「ニューヨーク時間」とかいうアレです。ご存じのとおり、FXの値動きは時間帯によっても異なります。そのため、EAやcBotなど自動売買プログラムを作成する際は時間帯によって取引を控えたり、戦略を変えるといったこともよくある話でしょう。

EA作者さんはMT4のタイムゾーンで慣れてると思いますが、cTraderでは多少勝手が異なります。EAをcBotに移植する際は少し注意が必要ですので、ご一読ください。

 

 

MT4のタイムゾーン

さきにMT4のタイムゾーンについて確認しておきましょう。何でcBotで時差調整が必要になるのか理解いただくためにも。

 

MT4はGMT+2/GMT+3が基本

MT4ではサーバーの時刻設定により異なることがあるのですが、基本的にはほとんどのブローカーで冬時間GMT+2/夏時間GMT+3のタイムゾーンを使用しています。

一見するとこれは東部ヨーロッパ時間のようにも見えますが、実は微妙に異なります。サマータイムの切り替えはアメリカ基準で行われるのです。アメリカとヨーロッパではサマータイム切り替えタイミングが異なるのです。

MT4のタイムゾーンは、正確には「EST(米国東部時間)を7時間すすめた時刻」ということになります。つまり、ニューヨーク時間+7時間です。

 

なんでこんなややこしいことになってるのか

MT4ではシステム上、日足は0時から24時までとなります。しかし日足はニューヨーククローズ基準で作成されるのが一般的です。

そのため、ニューヨーククローズ時刻(=ニューヨーク時間の17時)を24時に調整するため、ニューヨーク時間からは7時間ずらしたGMT+2/GMT+3に設定されている、というのが実際のところのようです。

(ちなみに、ときどき別のタイムゾーンで設定されてるMT4もありますが、日足0時始まりの仕様により、1週間の日足が6本というおかしなチャートになってしまうため避けた方がいいでしょう。)

 

何が言いたいかというと、MT4のタイムゾーンは特殊なのです。世界のどこも使っていないMT4専用タイムゾーンなのです。

 

 

cTraderのタイムゾーン

cTraderでは特に決まってない

決まってないと言ったら語弊があるかもしれませんが、cTraderでは表示時刻は自由に設定できますし、cBotやインジケーターでは開発者が設定したTimeZoneが適用されます。つまり自分でどれを使うか決められるのです。

なので、デフォルトのサーバー時刻というものを気にすることはないでしょう。なお、いずれの設定でも日足はちゃんとニューヨーククローズ基準で作られるようになってます。

 

cBotを作るときの設定

cBotを作成するときはデフォルトではTimeZone.UTC(GMT±0)が設定されてます。時間を気にしないcBotであればこのままで構いませんが、時間を使用する場合はEasternStandardTime(EST:ニューヨーク時間)に変更しておく方が無難かもしれません。

ここでの注意点ですが、MT4と合わせようとしてGMT+2/+3のEEuropeStandardTimeを選んではいけません。上記の通り、サマータイム切り替えタイミングがずれるため、微妙に挙動が異なってしまいます。

現時点では1年のうち数週間ずれるだけですが、もうすぐヨーロッパではサマータイムが廃止される予定なので、気づいたらサマータイム非対応のcBotになってしまう可能性もあります。

MT4と合わせたいのであれば、なおさらEasternStandardTimeに設定して、プログラム内で7時間の時差を調整するでという方法をとるべきです。

ちなみにajinoriは、自分用(もしくは日本人向け)に時間を表示させる類のツールを作る場合、TimeZone.TokyoStandardTimeを使うこともありますが、まぁ一般的ではないでしょうね。

 

EA移植時の時差調整の方法

EAからcBotに移植する際、cBot側でTimeZone.EasternStandardTimeに設定した場合のMT4時間との変換の具体的を示します。

やり方はいろいろありますが、一例として。DateTime型を変換するメソッドを用意しておくのがいいと思います。

 

cTrader側のタイムゾーンを使う場合

こっちのが変換が必要な機会は少ないのでお勧めです。MT4基準の時間はいわゆる普通のニューヨーク時間に変換してから使います。

private DateTime ConvertToEST(DateTime dt) {
    return dt - new TimeSpan(7, 0, 0);
}

ハードコーディングされてたり、外部パラメータから受け取ったりでMT4基準の時刻(GMT+2/+3)があったら、必ずConvertToESTを通してから使います。

 

MT4基準のタイムゾーンを使う場合

MT4に慣れすぎていて頭の中がMT4の時刻しか受けつけないという方もいるでしょう。「は?0時っていったら日本時間早朝でしょ?」みたいな。そういう方はこっちで。

private DateTime ConvertToMT4Time(DateTime dt) {
    return dt + new TimeSpan(7, 0, 0);
}

Server.TimeやBars.OpenTimesなどcAlgo APIが返す時刻すべてをConvertToMT4Timeを通して、MT4の時間に直してから使うようにします。

 

どっちにせよ慣れるまではどっかで間違えそうなので注意が必要ですね。

 

-cAlgo Tips & Sample

© 2024 cTrader's Life Powered by AFFINGER5