再読込みするかTime何たら関数を使えば回避できる
MQL4のバグ?らしき現象を発見しました。
インジケーターの初回読込時、Year関数をはじめとする日付関数の値を正しく取得できません。
サンプルコードは以下の通りです。
int OnInit() { Comment(" TimeYear = ", TimeYear(TimeCurrent()), " Year = ", Year(), "\n", " TimeMonth = ", TimeMonth(TimeCurrent()), " Month = ", Month(), "\n", " TimeDay = ", TimeDay(TimeCurrent()), " Day = ", Day(), "\n", " TimeHour = ", TimeHour(TimeCurrent()), " Hour = ", Hour(), "\n", " TimeMinute = ", TimeMinute(TimeCurrent()), " Minute = ", Minute(), "\n", " TimeSeconds = ", TimeSeconds(TimeCurrent()), " Seconds = ", Seconds()); return(INIT_SUCCEEDED); }
上記を実行すると、datetime型の初期値である1970/1/1 0:00:00がそれぞれ返ってきていることが分かります。
比較のために、TimeYear関数をはじめとするTime何たら関数を掲載しています。こちらは問題ありませんね。
この現象は、時間足を切り替えたり、通貨ペアを切り替えたり、パラメーターを読み込み直すなど、再読み込みすれば正しい値を返すようになります。
この現象、EAでは起きませんでした。
FX業者の問題かとも思ったのですが、他のFX業者のMT4でも再現しました。ということは製品上の問題な気がします。
仕方がないので、Time何たら関数をしばらく使うようにします。