MT4で自作EAや他人が公開しているEAのバックテストを行う場合、テストしたい期間分のヒストリカルデータが必要になります。
普通にMT4を起動すると、現在利用している業者のヒストリーデータを利用することになりますが、直近のデータしかないため長期のバックテストを行うには向きません。
そこで、MT4での長期バックテストを正確に行うために必要なMT4のヒストリカルデータの取得・作成手順を解説します。
バックテスト用MT4環境を構築
MT4を起動して、FX業者のサーバーに接続してしまうと、ヒストリカルデータがサーバにあるデータで上書きされてしまいます。
そこで、サーバーに接続しないバックテスト専用のMT4環境を用意します。
トレード用(チャート監視用)と兼用するとややこしいことになるので、トレード用とバックテスト用のMT4は別にしましょう。
1.オプション設定
まずMT4を起動します。
メニューの「ツール」から「オプション」を選択します。
「サーバー」タブに表示されている「プロキシサーバーを有効にする」にチェックを入れ、右の「プロキシ・・・」ボタンを押します。
プロキシ設定ウィンドウが表示されるので、「サーバー」の個所に適当にでたらめな英字を入力し、「OK」ボタンを押します。
次に「チャート」タブをクリックし、「ヒストリー内の最大バー数」と「チャートの最大バー数」の所をすべて数字の9で埋めてください。
最後に「OK」ボタンを押します。
再度、メニューバーの「ツール」から「オプション」をクリックし、「チャート」タブを開いてみてください。
「ヒストリー内の最大バー数」と「チャートの最大バー数」の所が、先ほど入力した99999・・・から「2147483647」に変更されていることがわかります。
実はこの「2147483647」という数字がここに入力できる最大値なんです。
先ほどはこの数字を入力する手間を省くために9という数字を埋めたというわけです。
以上確認したら、「OK」ボタンを押してオプション画面を閉じます。
2.古いヒストリカルデータの削除
新しいヒストリカルデータの用意する前に、古いヒストリカルデータを削除します。
メニューバーの「ファイル」から「データフォルダを開く」をクリックします。
エクスプローラが立ち上がります。この段階でMT4は終了してください。
次に、「history」フォルダを開きます。
○○○ Serverとなっているフォルダを探し、そのフォルダを開いてください。
今回は、FXDDデモ口座用にインストールしたMT4を使って解説しているため、「FXDD-MT4 Demo Server」となっています。
他の業者のMT4を使用している場合はここの名前が異なってくるので適宜読み替えてください。
「○○○ Server」のフォルダを開くと、拡張子が「hst」となっているファイルが存在すると思います。
これがヒストリカルデータとなります。この拡張子が「hst」になっているファイルを全て削除してください。
ヒストリカルデータを取得する
※2016年8月8日追記
FXDDのヒストリカルデータは色々と問題があることが判明したため、現在はGMOクリック証券もしくはデューカスコピーのヒストリカルデータの使用を推奨しています。私自身は現在FXDDのヒストリカルデータは使用していません。
下記の記事を一緒に参照することをお勧めします。
さて、肝心のヒストリカルデータですが、ここでは海外FX業者のFXDDが提供しているヒストリカルデータを利用します。
バックテストを行うに当たっては実際に自分が利用するFX業者のヒストリカルデータを使うのが最もベストですが、多くのFX業者はヒストリカルデータを提供していない、もしくは提供していても短期間のみがほとんどです。
またMetatrader開発元のMetaQuotes社もヒストリカルデータを提供していますが、信頼性がどうも低いようで、現状多くの人がこのFXDDのヒストリカルデータを利用してバックテストを行っている状況だと思います。
FXDDは、2005年からのヒストリカルデータを提供しており、長期のバックテストに最適です。
EAのバックテストにおいて、私は2005年より前のものは必要ないと思っています。なぜなら、2006年頃からインターネットを介した個人のFX売買が盛んになり、それまでの相場とは相場環境が一変しているからです。
そんなわけで、信頼性も比較的高いFXDDのヒストリカルデータを利用するのが現状最も最善だと考えます。
1.ヒストリカルデータのダウンロード
下記リンク先から、FXDDのヒストリカルデータをダウンロードします。
ダウンロードページ中の「MetaTrader」と書かれているすぐ下の部分(上の画像の赤枠に囲まれている所)から、バックテストしたい通貨ペアをクリックしてヒストリカルデータをダウンロードしてください。
ここでは「USD/JPY」通貨ペアのデータをダウンロードしたことととして解説します。
自分のPCのダウンロード先に「USDJPY.zip」というzip圧縮ファイルがダウンロードされているので、それを圧縮解凍ソフトを利用して解凍してください。
解凍すると、「USDJPY.hst」というファイルが出来上がります。これは1分足に対応するヒストリカルデータとなります。
2.MT4にヒストリカルデータをインポートする
MT4を再度起動します。
メニューバーの「ツール」から「ヒストリーセンター」をクリックします。
左の通貨ペアの所から、ヒストリカルデータをインポートする対象の通貨ペアを探します。
ここでは「Forex」をダブルクリック。
通貨ペアがずらっと表示されるので、スクロールして「USDJPY」をダブルクリック。
展開して表示された「1Minute(M1)」をダブルクリックします。
ここで、ヒストリーセンターウィンドウのウィンドウタイトル(一番上)に「USDJPY,M1」と表示されていることを確認して下さい。
確認できたら右下の「インポート」ボタンをクリックします。
ブラウズボタンをクリックします。
ファイルの選択画面が表示されるので、「開く」ボタンの上にあるドロップダウンリストに「MetaQuotes files(*.hst)」が選択されていることを確認します。
次に、先ほどFXDDウェブサイトからダウンロードしたファイルを解凍してできた「USDJPY.hst」が保存されているディレクトリを表示し、インポートするhstファイルをクリックして選択し、「開く」ボタンをクリックします。
インポートデータがずらっと表示されたと思います。
念のため、一番下までスクロールさせて2005年1月からのデータが読み込まれているか確認してみてください。
確認できたら「OK」ボタンをクリックします。
上の画像のようにインポートされたデータがずらっと表示されます。正常にインポートされているのを確認して「閉じる」ボタンをクリックします。
ここで、MT4を一度終了してください。
全ての時間足のヒストリカルデータの作成
1分足ヒストリカルデータをMT4に取り込めたので、次はすべての時間足のヒストリカルデータをこの1分足ヒストリカルデータから作成します。
全ての時間足の作成にあたって「Period Converter All」というスクリプトを利用します。
まず、下記URLにアクセスしてください。
http://www.mql5.com/ru/code/11201
ページ中の上記画像の赤枠の所にある「Period_converter_ALL.mq4」をクリックすると、ファイルをダウンロードしようとするのでPCにファイルをダウンロードしてください。
次にMT4を起動させます。
メニューバーの「ファイル」から「データフォルダを開く」をクリックしてデータフォルダを表示させます。
エクスプローラが立ち上がり、MT4のデータフォルダが表示されるので、「MQL4」フォルダをダブルクリックして開きます。
次に「Scripts」フォルダを開きます。
先ほどダウンロードしてきた「period_converter_ALL.mq4」を 「Scripts」フォルダの中にコピーしてください。
次にMT4を操作します。
ナビゲーターウィンドウの「スクリプト」を展開しておき、「スクリプト」の上で右クリックし、「更新」をクリック
すると、「スクリプト」の下に「period_converter_ALL」が表示されます。
次にメニューバーの「ファイル」から「オフラインチャート」をクリックします。
一覧の中からヒストリカルデータを作成したい通貨ペア名,M1と表示されているものを探してクリック(ここではUSDJPY,M1)し、「開く」ボタンをクリックします。
USDJPY,M1(offline)と書かれたオフラインチャートが表示されますので、ナビゲーターウィンドウの「スクリプト」にある「period_converter_ALL」をこのオフラインチャートの上にドラッグ&ドロップします。もしくは「period_converter_ALL」を右クリック→「チャートで実行」をクリックします。
すると、自動的にすべての時間足のヒストリカルデータの作成が開始されます。
MT4の一番下に表示されているターミナルウィンドウの「エキスパート」タブをクリックしてみてください。
処理が正常に行われると上記画像中のメッセージが表示されます。
これで、すべての時間足のヒストリカルデータが生成されているはずです。
すべての時間足データが作成されているか確認してみましょう。
メニューバーの「ファイル」から「オフラインチャート」をクリックします。
上記画像のように、M1データ以外のすべての時間足(M5,M15,M30,H1,H4,Daily,Weekly,Monthly)のデータが表示されていれば成功です。
確認できたら「キャンセル」ボタンを押してください。
以上で、バックテスト用のヒストリカルデータの作成手順は終了です。
コメント
上記のようにしたのですが、ヒストリーデーターが全然取れなくなってしまいま
した。
どうしてでしょうか。
mt4もダメになってしまいました。
どうしたらいいのでしょうか。
よろしくお願いします。
以上
Satouさんへ
使用OSやご使用のMT4がどこの業者のものかわからないので何とも言えませんが
書いている方法としては問題ないはずです。
ヒストリーデータが全然取れないとはどういう意味でしょうか?
参考までにOS、どの業者のMT4なのか、MT4のビルドナンバー等を教えていただけますか?
MT4もダメとのことですが、起動しないということでしょうか?
どうしてもおかしいならMT4を一旦アンインストールして、再度MT4をインストールしなおしてみてください。
みっつん様、
貴兄のご案内に沿って必要なデータをインポート出来ました。有難うございました。
何分経験不足なもので、質問させてください。
1)ご指示の様に、当初Proxyのセットアップを致しました。以下の様に
記されています。
<<<サーバーに接続しないバックテスト専用のMT4環境を用意します。
トレード用(チャート監視用)と兼用するとややこしいことになるので、 トレード用とバックテスト用のMT4は別にしましょう。>>>
此れでバックテスト用のMT4環境は整ったとの事ですが、此れは別の
MT4を作ったと言う意味ですか?だとすると、その別のMT4は何処に
保存されていて、どの様に使うのですか?
2)Strategy Tester(バックテスト機能だと思いますが、、、)と利用する
時には、何処からその別のMT4ならびにStrategy Testerに入るのでしょう か?
宜しくお願い致します。
一哉さんへ
ご質問の件についてお答えします。
>>此れでバックテスト用のMT4環境は整ったとの事ですが、此れは別の
>>MT4を作ったと言う意味ですか?だとすると、その別のMT4は何処に
>>保存されていて、どの様に使うのですか?
「トレード用とバックテスト用のMT4は別にしましょう」の意味ですが、簡単に言うと2つのMT4をPCにインストールしましょうということです。
つまりトレード用MT4とバックテスト用MT4をそれぞれPCにインストールする必要があります。
この場合一番簡単なのはトレード用とバックテスト用で別業者のMT4を利用することです。
例えば、バックテストはFXDDのMT4、トレード用はOANDA JAPANのMT4といった感じです。
そうすれば、インストール先がかぶらないのでトラブルなく利用できます。
もし、同じ業者のMT4を利用したい場合は、2つ目のMT4をインストールする際、1つ目のインストール先とは別のインストール先フォルダを指定してしてインストールする必要があります。
別フォルダにインストールすることで、それぞれのインストール先のMT4を起動すれば、同じ業者のMT4でも複数起動することができるようになります。
2つ目の質問の件ですが、申し訳ありません。質問の意味がちょっとよくわかりませんでした。おそらく上の回答で2番目の質問もクリアできるのではないかと思いますが、もしまだわからないようでしたら再度コメントくださいませ。
初めまして
とても解り易い説明でメタトレーダーの設定から
ヒルトカルデータの取得、(ドル円)インポートまで問題無くできましたが
period_converter_ALLもダウンロードして
全て手順通りにした筈ですが
ドラッグ&ドロップしても
チャートで実行どちらでも以下のエラーメッセージが出て
他時間足が作られません
fxddのメタトレーダーです
お忙しい処、大変恐縮ですが
もし何か解りましたら
教えて頂けると助かります
宜しくお願い致します
2015.10.29 01:43:39.342 cannot open file ‘C:\Users\USER\AppData\Roaming\MetaQuotes\Terminal\DEF4C7E0C19F101EA5FCC8AFBF2C7854\MQL4\Scripts\period_converter_ALL.ex4’ [2]
めがねさんへ。
ご質問の件ですが、エラーをみると「period_converter_ALL.ex4」ファイルが開けないといっているので、まず、ファイルエクスプローラで「C:\Users\USER\AppData\Roaming\MetaQuotes\Terminal\DEF4C7E0C19F101EA5FCC8AFBF2C7854\MQL4\Scripts\」にアクセスして「period_converter_ALL.ex4」ファイルが存在しているかどうか確認してください。
「period_converter_ALL.mq4」ではなくて「period_converter_ALL.ex4」ファイルです。拡張子の違いに注意してください。
もしex4ファイルがあるなら、「period_converter_ALL.ex4」ファイルと「mqlcache.dat」ファイルを削除してMT4を再起動し再度手順を試してみてください。
「period_converter_ALL.ex4」ファイルが無い場合は、なんらかの原因で正常にコンパイルできていないと思われます。
通常MT4を再起動すると「period_converter_ALL.mq4」は自動的に「period_converter_ALL.ex4」にコンパイルされるはずですが、再起動してもex4ファイルが作られないのであれば、「メタエディター」から「period_converter_ALL.mq4」を直接コンパイルしてみて原因を探る必要があります。
川蝉さんへ
早速丁寧な解説ありがとうございます
まさか、こんな丁寧に しかもすぐに返信頂けるとは思ってませんでした
早速確認してみました
period_converter_ALL.ex4」有りました
ご説明通り
period_converter_ALL.ex4」「mqlcache.dat」を削除して再起動しましたつもり
でしたが今間違いに気付きました
私はperiod_converter_ALL.mq4を削除してました
その結果mqlcache.dat」ファイルだけ復元されてました
アホですね 今気付きました
そこで駄目元で一旦全て削除して もう一度Scripts」フォルダにperiod_converter_ALL.mq4を入れ直す事にしました
一旦全て削除して再起動すると何故か
period_converter_ALL.ex 4mqlcache.datだけ又復元されてました?
構わず再度period_converter_ALL.mq4を入れて
再起動して チャートで実行 なんの反応もないので 駄目だと思いましたが
ちゃんと1分、3分なんて変わり物から日足、月足まで出来てました
こちらの丁寧な解説が無いと
無理だったと思います
本当に有難う御座いました\(^▽^)/
めがねさんへ
無事解決したようで何よりです。
また何かありましたらお気軽にコメントしてくださいね。
川蝉さん こんばんわ
大変恐縮ですが
お言葉に甘えて
再度質問させて欲しいです
私はメタトレーダーを使いこなしたいのですが
その前にエクセルの勉強から始めてます
エクセルで単純な検証をしながら勉強中
もっと長いデータが欲しくて
過去データの取り方をこちらで教えて頂き
エクスポートして
ドル/円の日足をエクセルで開いて
まず曜日を振ってみたのですが
2005年~2015年で
土曜日が14日、日曜日が82日も有ります
私の理解では土日は完全に休んでる筈だったと
一番最近では2015年10月4日と10月18日です
過去データにはそもそも良く有る話なのか
分足からの変換ミスなのか
これ位の事は良く有る話なのでしょうか?
それとも私は何か勘違いしてるのでしょうか
どう考えるべきか困ってます
ご教授願えたら大変助かります
めがねさんへ
おそらくバッドデータが紛れ込んでるんだと思います。
間違ったデータなので省いても問題ないです。
FXDDのヒストリカルデータは、実は結構間違いというかおかしな点がたくさんあります。
https://www.autotrading-fx.com/fxcolumn/2272.html
の記事でも書きましたが、週末のデータがかなり欠落しており、直して欲しいと再三問い合わせしてるにもかかわらず3ヶ月経っても直らずじまいです。
週末金曜日の日足がデモ口座のものと変ってくるので、私のEAのバックテストにかなり影響しており私も困ってる次第です。
とりあえず現在はデモ口座のヒストリカルデータを毎月保存するようにしており、直近のデータはデモ口座のものに入れ替えて使うようにしています。
現在提供されているFXDDのヒストリカルデータはその程度のものだとお考えください。
>>現在提供されているFXDDのヒストリカルデータはその程度のものだとお考えください。
川蝉さんへ
そうなんですね( T_T)
簡単な検証さえも、中々簡単にはさせて貰えないんですね
アドバイスに従い土日の分は消します
これだけだと全体の2%程度ですが
他は大丈夫かと心配になりますね
それにしても回答が早くて本当ビックリです
お忙しい中ありがとうございます
エラーと思われる土日のデータは
7~8割方が初値 高値 安値 終値 全てが同じで
いかにもエラーっぽい価格でした
一応報告(誰に?)しておきます