TimeLocal()について

TimeCurrent()関数は、MT4のサーバー時刻をdatetime型で返すのに対して、TimeLocal()関数は、パソコンの時刻(日本在住の人であれば日本時刻)をdatetime型で返します。

 

しかし、TimeLocal()関数をEA内で使用して、そのEAをバックテストにかけると、一体どんな数値を返すのでしょうか。

 

この点、私の記憶が正しければ、以前のバージョンのメタトレーダーでは、バックテスト上のTimeLocal()関数は、バックテストをしている時のパソコン時刻を返していました。

 

なので、バックテストではTimeCurrent()関数がヒストリカルデータに沿って、

 

2018.01.04 00:00:00

2018.01.05 00:00:00

2018.01.06 00:00:00

2018.01.07 00:00:00

 

という具合に、その足ごとにサーバー時刻を返すのに対して、TimeLocal()関数は、

 

2018.09.16 00:00:00

2018.09.16 00:00:00

2018.09.16 00:00:00

2018.09.16 00:00:00

 

と、ほとんど一定の数値を返すだけでした。

 

それゆえ、この二つの関数を利用して日本時刻とサーバー時刻の時差を自動で算出するEAを作ると、トレードではうまくいくのですが、バックテストではとんでもない結果になってしまいました。

 

なので、時差を考慮するEAを作るときは、どうしても外部パラメーターにその時差を手入力する以外にありませんでした。

ところが、現在では、バックテスト上のTimeLocal()関数は、バックテストをしている時のパソコン時刻ではなく、TimeCurrent()関数と同じ値を返す仕様になっているようです。

 

このことは、MQL4のリファレンスにも書かれています。

なので、バックテストではTimeCurrent()関数もTimeLocal()関数も、現在では、ヒストリカルデータに沿って、

 

2018.01.04 00:00:00

2018.01.05 00:00:00

2018.01.06 00:00:00

2018.01.07 00:00:00

 

という具合に、同一の値を返します。

 

じゃあ、何かいいことでもあるのかというと、何もありません。(笑)

 

つまり、この二つの関数を利用して日本時刻とサーバー時刻の時差を自動で算出するEAが作れるようになったのかというと、少なくともバックテストでは依然として無理です。

 

どうせ、仕様を変えるなら、もう少し気のきいた変更をしてほしいものですね。TT