TimeGMT()の憂鬱
スキャルピングEAを作る場合、週跨ぎのポジション保有は避けた方が良いので、週末強制クローズ機能の搭載を考えている。
ただしMT4のサーバー時間は時差が異なっていたり、夏時間があったり無かったりするので、サーバー時間を世界協定時(UTC)に変換してから処理するロジックを考える事が多いと思う。
そこでTimeGMT()という関数が登場するわけだが、思いのほか役立たずだったりする…
リファレンスには、

とあるが、要するにMT4サーバーではなくPCの時間を参照してますよっと。
PCやVPSと、MT4サーバーの時計のどちらが正しいのかは分からないが、取引する上ではMT4サーバーの時間が絶対である。
直近のMT4サーバー時間を返すTimeCurrent()と、TimeGMT()の間の整合性が保証されない限り、TimeGMT()を使った時間処理の正しさも保証されなくなってしまう。
結局、MT4サーバーの時差を直接的に得る関数はMQLには用意されてないという事になり、パラメータ等でUTCオフセットと夏時間有無を指定させるしか手段が無い模様。
(GMTとUTCは同じと考えて良いが、気になる方はWikipedia該当ページへ)
他に方法が無いかと、例えば週のレート配信開始時間と終了時間からサーバーの時差を割り出せないか検討したみたが、配信時間外にも関わらず、稀にゴミのようなバーが存在するブローカーが数社あり、この方法では信頼性に欠けることが判明している。
週末強制クローズ機能に関しては、時間処理の他にもOnTick()イベントの制約として、閑散とした週末を迎えた場合に強制クローズが出来ない可能性があるなど、課題が幾つか残っている。
ところで、MQL5のリファレンスは公式サイトで日本語化されたのだが、主流であるMQL4のリファレンスは日本語化されないまま放置されるのだろうか?
> MQL5リファレンス(日本語)
ただしMT4のサーバー時間は時差が異なっていたり、夏時間があったり無かったりするので、サーバー時間を世界協定時(UTC)に変換してから処理するロジックを考える事が多いと思う。
そこでTimeGMT()という関数が登場するわけだが、思いのほか役立たずだったりする…
リファレンスには、

とあるが、要するにMT4サーバーではなくPCの時間を参照してますよっと。
ダメじゃん…
そもそも、取引自体はMT4サーバー側で行うのだから、時間の進み具合はMT4サーバーに合わせなければならない。PCやVPSと、MT4サーバーの時計のどちらが正しいのかは分からないが、取引する上ではMT4サーバーの時間が絶対である。
直近のMT4サーバー時間を返すTimeCurrent()と、TimeGMT()の間の整合性が保証されない限り、TimeGMT()を使った時間処理の正しさも保証されなくなってしまう。
結局、MT4サーバーの時差を直接的に得る関数はMQLには用意されてないという事になり、パラメータ等でUTCオフセットと夏時間有無を指定させるしか手段が無い模様。
(GMTとUTCは同じと考えて良いが、気になる方はWikipedia該当ページへ)
他に方法が無いかと、例えば週のレート配信開始時間と終了時間からサーバーの時差を割り出せないか検討したみたが、配信時間外にも関わらず、稀にゴミのようなバーが存在するブローカーが数社あり、この方法では信頼性に欠けることが判明している。
週末強制クローズ機能に関しては、時間処理の他にもOnTick()イベントの制約として、閑散とした週末を迎えた場合に強制クローズが出来ない可能性があるなど、課題が幾つか残っている。
ところで、MQL5のリファレンスは公式サイトで日本語化されたのだが、主流であるMQL4のリファレンスは日本語化されないまま放置されるのだろうか?
> MQL5リファレンス(日本語)
テーマ : FX(外国為替証拠金取引)
ジャンル : 株式・投資・マネー