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
コメントをお書きください