思わず嵌ってしまったのでご報告します。
【MQL4の場合】
例えば、MQL4で5分足を使用しインジケーター若しくは、EAを作動させた場合、ヒストリーセンターに格納されている5分足と1分足のデータを用いて処理されます。Bar数は、ヒストリカルセンターの5分足のデーター数(ただし、オプションにて制限を加えない場合)となり、5分ごと以下に区切られたデータで処理されることになります。【MQL5の場合】
以下のコードをUSDJPY M5で走らせてみました。int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- Print("Open[0] =",open[0]," Open[1] = ",open[1]," Open[2] = ",open[2]); Print("Time[0] =",time[0]," Time[1] = ",time[1]," Time[2] = ",time[2]); //--- return value of prev_calculated for next call return(rates_total); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Time[0] =1971.01.04 00:00:00 Time[1] = 1971.01.05 00:00:00 Time[2] = 1971.01.06 00:00:00
Open[0] =357.73 Open[1] = 357.81 Open[2] = 357.86
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
USDJPYのM5で稼働させたにもかかわらず、日足のデータが格納されています。
チャートを最も左側(最古)にスライドさせてみると以下の様になっています。
仕様なのかバグなのかわかりませんが、指定した時間足のデータがなくなった場合、日足データで補完するようになっているようです。また、日足より上位の時間足に関しては、補完処理はされていませんでした。
《あるBarから突然、時間足の異なるデータを使うことになるなんて、恐ろしすぎる…orz》
【まとめ】
≪CopyOpen・・・・・CopyTime≫などでデータを取得した際も同様の事例となりました。どこまで、時間足通りのデータが格納されているか調べる必要があるなんて….
バグであることを祈りたいものです。
バックテストをする際は、MQL4以上に注意が必要になりますね・・・・orz
【追記】※再追記
天狗さんから頂いたコメントによると,FXDDのヒストリカルデータでも同じような現象が現れたそうです。ただし、現在FXDDのMT5デモ申請ページが閉鎖?されているようで確認ができませんでした。ちなみに、再度MetaQuotes-Demoのヒストリカルデータを読み込んでも問題は解消されませんでした。また、アルパリ(US)[208.122.38.200:443]のヒストリカルデータをUSDJPY M5で確認した結果以下の通りとなりました。
現在~2010/04/18までがM5データ
2010/04/19~2007/10/15の間がH1データ
2007/10/15以降は、D1データ
なんと2段階です。・・・orz
【再再追記】
この問題の記事がありましたのでご覧ください。Strange history data in Strategy test: old data becomes H1 during M5 test
『バグではなく仕様だ!』って感じでしょうか?対応策は、 MT5→【Tools】→【Options】→【Charts】を選択後【Max bars in chart:】を適正なbar数に変更し終了です。この値がUnlimitedに設定されているとこのような現象が発生するようです。
【データの抜けを確認するインジケーター】
視覚的にデータの抜けを確認できるインジケーターを作成してみました。方法は、Barのtimeの差を対数値で表示するものです。
どの程度の抜けがあるか?もしくは取引がされていなかったのか?がわかります。
checkbars.mq5
7 件のコメント :
ローソク使っていたのにバーになっていたのは、それが理由だったんですね
FXDDでも同じでしたがhistoryデータ消してみたら直りました、MT5のデータを作る部分がおかしかったのだと思います(勘)
天狗さんへ
教えて頂いてありがとうございます。
やはり、MetaQuotes-Demoのヒストリカルデータは、問題がありすぎますね^^;
すみません、FXDDの方でも全然直ってないです御免なさいorz
バグ報告はされてると思うのですが、されてなければした方が良いかと
蛇足ですねすみません
天狗さんへ
アルパリでもダメでした。
バグ報告は、まだしてません^^;
参考になりました有難うございます。orz
三度すみませんorz
Max bars in chartはどうやらダウンロードするバーの本数の様です
詳細は長文となりますので、私めの拙いブログを参照して下さると幸いです
再々追記の内容が同じ意図であれば、お気になさらぬよう。
コメントを投稿