MT4でバックテストのやり方を説明
Check
How To バックテスト
基本的なバックテストのやり方を説明します。
バックテストの前に
バックテストをする前にMT4の設定を少し変更します。
デフォルトの設定のままでは、バックテストできる期間は約1年5カ月程度です。バックテストをする際は長期間のテストを行うことが多いので、まずはそこの設定を変更します。
「ツール」→「オプション」→タブの「チャート」を選択します。
「ヒストリー内の最大バー数」と「チャート内の最大バー数」に入れれるだけ「9」を入力し、その後「OK」をクリックします。
確認のために再度「オプション」から「チャート」タブを選択して、ちゃんと設定が変更されているか確認してみてください。
画像のように、「ヒストリー内の最大バー数」および「チャート内の最大バー数」のどちらも「2147483647」になっていれば大丈夫です。
備考ですが、デフォルト設定ではこの最大バー数が「512000」になっています。つまりこれは、1分足512000本が最大ということです。で、この512000分を期間で表してみると、外国為替市場の年間取引可能日数は245日前後なので、512000 ÷ (245日 × 24時間 × 60分) = 1.45年 となり、デフォルト設定でのテスト可能な最大期間は約1年5カ月程度となります。
後に説明しますが、バックテストで使用するヒストリカルデータは1分足を使って各時間足を生成するので、デフォルト設定だと上記の計算から約1年5カ月となってしまうというわけです。
それでは、次の設定です。
「ツール」→「オプション」→タブの「エキスパートアドバイザ」を選択します。
下画像の赤枠の項目にチェックしてOKをクリックします。
これらは許可していなくてもバックテストできるEAの方が多いですが、EAによってはDLLやWebRequestを使用するものもあるので、私は初期設定のタイミングで事前にチェックを入れておく様にしています。
次に、MT4の左上のツールバーから「ストラテジーテスター」をクリックします。
そうすると、MT4の下段にテスターウィンドウが開きます。バックテストはこのテスターウィンドウ内で行います。
ちなみに、バックテストの際はターミナルウィンドウを一切使用しないので私は閉じています。
MT4でEAのバックテストをするための初期設定は以上です。
続いて、ヒストリカルデータを入手する方法と、それをMT4にインポートする方法に移ります。
ヒストリカルデータを入手する
長期のヒストリカルデータを無料で入手する方法はいくつかあります。
Googleで「mt4 hst ダウンロード」等で検索すると、ダウンロードの方法を丁寧に説明してくれているサイトがたくさん出てきます。
1分足のヒストリカルデータをサクッとダウンロードするにはFXDDがお勧めです。
以下のURLからダウンロードできます。
https://www.fxddtrading.com/bm/jp/resources/mt4-one-minute-data
ヒストリカルデータ(hstファイル)がダウンロードできたら、そのデータをMT4にインポートします。
ヒストリカルデータをインポート
今回は例としてUSD/JPYをインポートしていきます。
「ファイル」→「データフォルダを開く」をクリックします。
データフォルダが開くので、その開かれたフォルダ内の「history」フォルダ→「XMTrading-Real 25」フォルダを開きます。
※「XMTrading-Real 25」フォルダは、使用するブローカーによって異なり、アクセスしているブローカーのサーバーの名前になっています。
フォルダ内には既に「USDJPY○○.hst」というファイルがいくつかあります。この「○○」には時間足を表す数字が入ります。1分足なら1、1時間足なら60、日足なら1440、といった具合です。今回はUSD/JPYをインポートするので「USDJPY○○.hst」を全て削除します。
ここで一度MT4を再起動します。
再起動したら「ツール」→「ヒストリーセンター」をクリックします。
ヒストリーセンターウィンドウが開くので、そこから目的の「USDJPY」を探し、ツリーから「1分足(M1)」を選択してダブルクリックします。
このとき、赤枠で囲んだ「デー・ベース:○○レコード」の「○○」を確認します。この「○○」は、現在MT4内に何本のUSD/JPYの1分足データがインポートされているかを表示しています。なので、今回の場合だと「今は2048本ですよ」ということです。後ほど、インポートがちゃんとできたかどうかを確認する際に使います。現状の本数をざっくりでいいので覚えておきます。
続いて「インポート」をクリックします。
インポートウィンドウが開くので「参照」をクリックします。
ダウンロードした「USDJPY.hst」を選択し、「OK」をクリックします。
そうすると、先ほど確認した「デー・ベース:○○レコード」の「○○」の数が圧倒的に多くなっています。
こうなっていればインポート成功です。
「閉じる」をクリックしてヒストリーセンターウィンドウを閉じます。
スクリプトを使って各時間足を自動生成
次に、1分足データを基に各時間足を生成します。この項については、各時間足のヒストリカルデータがダウンロードできている様でしたらスキップしてください。
1分足データを基に各時間足を自動生成するスクリプト「period_converter_ALL.mq4」をダウンロードします。リンクをクリックするとperiod_converter_ALL.mq4がダウンロードされます。
そして「データフォルダ」→「MQL4」→「Scripts」のフォルダに、ダウンロードしたperiod_converter_ALL.mq4を入れます。
そして、ここでMT4を再起動します。
再起動したMT4の「ファイル」→「オフラインチャート」をクリックします。
するとオフラインチャートリストが開き、先ほどインポートしたUSD/JPYの1分足が「USDJPY,M1」と表示されているので、「USDJPY,M1」を選択して「開く」をクリックするか、ダブルクリックします。
MT4のウィンドウ内にインポートしたUSD/JPY 1分足のオフラインチャートが開きます。
そのオフラインチャートに左のツリーから「period_converter_ALL」をドラッグ&ドロップ、もしくはダブルクリックします。
チャートの左上に、下記画像の様な、いかにも「時間足を計算してます」って感じの表示がされていれば各時間足を生成中です。
画像は15分足を生成中のタイミングをキャプチャしたものです。5分足から順番に月足まで生成されていくので、この表示が消えるまでしばらく待ちます。
チャート左上の生成中っぽい表示が消えたら、先ほどのオフラインチャートリストを表示すると、先ほどは「USDJPY,M1」しか表示されていませんでしたが、「USDJPY,Monthly」までの時間足が生成されていることが確認できます。
お疲れ様でした。
これで、MT4でEAをバックテストする前の準備が整いました。
準備完了!いざバックテスト!
さて、ここから実際にEAをバックテストしてみます。
・・・の、前にテスターウィンドウを簡単に説明します。
バックテストは、テスターウィンドウ内で全ての操作を行います。
いろいろと設定できる項目はありますが、基本的によく使用する項目に※印を付けました。
①EAの選択※
②通貨ペアの選択※
③バックテストの精度を選択※
④バックテストを行う期間を指定※
⑤EAの動作を視覚的に確認
⑥バックテストする時間足を選択※
⑦バックテストするスプレッドを入力※
⑧EAのパラメータを設定※
⑨通貨ペアの詳細
⑩バックテスト後にEAの取引履歴を確認
⑪MetaEditarを起動
⑫最適化する場合にチェック
流れとしては、①でバックテストするEAを選択し、②で対象の通貨ペアを選択、④でバックテストする期間を指定します。
③モデルは基本的に全ティックを選択して正確にバックテストを行います。EAが始値で動くタイプのものであれば、「始値のみ」でも全ティックでテストした場合とほぼ同じ結果が得られ、テストも早く終了します。バックテストするEAのロジックが不明な場合は「全ティック」でテストします。コントロールポイントは正確性に欠けるため使用しません。
続いて、⑥で時間足を、⑦でスプレッドを指定します。
⑦のスプレッドはPoint単位になっているので、例えば「1.5pips」でテストしたい場合は「15」と直接入力します。「0.3pips」の場合は「3」と入力します。基本的に私がバックテストする場合は、より悪条件を想定してバックテストする様にしています。例えば、ブローカー発表の対象通貨ペアの平均スプレッドが「1.2pips」であれば、そのままの「12」でテストするのではなく、「25(2.5pips)」でバックテストします。
⑧エキスパート設定は、EAによって設定するパラメータは様々なので、そのEAを開発した方の取扱説明等を参考に適宜設定します。
補足として、通常MT4でバックテストできる基軸通貨は「USD、EUR、GBP、CHF」ですが、⑧エキスパート設定の「テスト設定」タブに直接「JPY」と入力すると日本円でバックテストすることが可能です。下画像は「初期証拠金100,000円」の設定となり、日本円のトレード結果が算出されます。
また、EAによっては通貨ペアや時間足によって最適化されたパラメータ値を登録した「セットファイル(○○○.set)」というファイルが用意されている場合があります。その場合は「パラメータの入力」タブの「読み込み」から、「データフォルダ」内の「Presets」からsetファイルを読み込ますことができます。
いざバックテスト!
さて、今回は例として、MT4にデフォルトで収録されているEA、Moving Average.ex4をUSD/JPYの1時間足で、スプレッドを2.5pipsと仮定し、2008年1月1日~2017年12月31日までの10年間のバックテストをしてみます。パラメータ設定はデフォルトのままです。
この辺のセッティングが整ったら「スタート」をクリックします。
「スタート」をクリックすると、グリーンの進捗バーが左から右へと動き始め、
グリーンのバーが右に到達し、ボタンが「ストップ」から「スタート」に戻ればバックテスト完了です。ちなみに、私はバックテスト完了は、MT4の鳴声?アヒル?の様な音で気付きます。笑
バックテストが完了したら、「レポート」タブを開き、「モデリング品質」と「不整合チャートエラー」の数値を確認します。
モデリング品質は「90%」(稀に89.9%となる場合もあり)で、不整合チャートエラーは「0」になっていれば、正常にバックテストされていることが確認できます。
※モデリング品質について、5分足以上のバックテスト結果は、正常にテストが完了すれば「90%」になりますが、1分足のバックテストの場合「25%」が上限になります。
※不整合チャートエラーについて、赤文字で0以外の数字が出た場合は、何らかの要因でヒストリカルデータをうまくインポートできていないか、あるいはMT4から取引口座にログインしたまま(オンライン状態)のまま作業を進めていて、ヒストリカルデータが現在のチャートに自動的に書き換えられてしまった可能性があります。この場合は、データフォルダからhstファイルを削除して、データのインポートからやり直す必要があります。
そして、バックテストの結果を「レポート結果」として保存することが出来ます。
「レポート」タブ上のどこでもいいので右クリックし、「レポートの保存」をクリックします。
レポート結果を保存すると、ブラウザが開きます。よく見かける、EAのバックテスト結果詳細としてEA開発者さんが掲載しているアレですね。
お疲れ様でした。
以上が、バックテストの基本的なやり方です。
この様に、画像を交えながら書いていくと、すごく長くてすごく面倒そうに見えますが、本当にすぐに慣れます^^
慣れてきたら、モデリング品質が99.9%になる様にバックテストする方法を試してみたり、パラメータを最適化してEAを自分好みに調整してみたり、他のブローカーで公開されているヒストリカルデータでのバックテストの結果の差異を見てみたりと、いろいろできます。
いやほんとお疲れ様でした^^;
では^^
あとがきという名のぼやき
今回の記事ですが、何文字あると思いますか?
ほんとは、レポート結果の見方まで書きたかったんですが、今日はもうヨシとします。笑
というわけで、近日中にレポート結果の見方、あと、そこから何を読むかなどを記事にしたいと思ってます^^
そうそう。文字数ですが、約5400文字でした。
原稿用紙7枚分?!
そう考えると凄い量ですね。この1記事で、私が学生時代に使用した原稿用紙の合計枚数を越えちゃったんじゃないでしょうか。笑