MetaTrader 4でEAをバックテストする方法

MT4でEA(エキスパートアドバイザー)をバックテストするには、History Center(F2)で価格履歴を読み込み、ストラテジーテスター(Ctrl+R)を開き、EA、通貨ペア、時間足、モデル、スプレッドを選んでStartを押し、Reportタブを確認します。ただし、よいレポートだけでは多くを証明できません。MT4のテスターは変動スプレッド、約定速度、スリッページを考慮しません。また、多くの設定を試した場合、最高の設定は単に最も運がよかっただけかもしれません。

以下ではテストの手順を順番に説明し、そのうえで本当に重要な疑問を取り上げます。なぜバックテストは良すぎるように見えることがあるのか、最適化に使っていないデータでどう確かめるのか、なぜリアル口座の実績のほうが重要なのか、という点です。ここに魔法の数字はありません。数値はすべて出典を示すか、当サイト独自の計算であることを明記しています。メニューや項目の名前は、スクリーンショットと同じくMT4の英語版画面の表記です。

ステップ1:価格履歴を読み込む

バックテストの質は、その元になる履歴データの質で決まります。MT4でTools → History Centerを開くかF2を押し、通貨ペアを選んでDownloadを押します。ターミナルはM1データを読み込み、そこから他の時間足を作成します。

通貨ペアの一覧が表示されたMetaTrader 4のHistory Centerウィンドウ

このデータについて知っておきたい点は3つです。

  • ご利用の業者のデータとは限りません。DownloadボタンはMetaTraderのヒストリーデータサーバーを使います。MT4のヘルプは、このデータが業者の取引サーバーの履歴と異なる場合があると注意しています。
  • 自分のデータをインポートできます。History CenterのImportボタンはCSV、PRN、TXT、HTM、HSTファイルに対応しており、たとえば業者の履歴データを取り込めます。
  • データがあるか確認してください。テスターは通貨ペアと時間足の履歴を見つけられないと、直近512本のバーしかダウンロードしません。結果を信頼する前に、テスト期間とバーの本数を確認しましょう。

ステップ2:ストラテジーテスターを設定する

EAはコンパイル済みで、ターミナルのExpertsフォルダに入っている必要があります。一覧に表示されない場合はMT4にEAをインストールして実行する方法をご覧ください。次にView → Strategy TesterまたはCtrl+Rでテスターを開き、Settingsタブで次の項目を設定します。

MT4ストラテジーテスターのSettingsタブ:Expert Advisor、Symbol、Model、Period、Spreadの各項目

  1. Expert Advisor:テストするEA。
  2. Symbol:通貨ペア。EAの対象ペアを使います。テスターはテスト対象の銘柄しか取引しないため、複数ペアを取引するEAをここで全体としてテストすることはできません。
  3. Model:テスターが値動きを再現する方法(下の表を参照)。
  4. Period:EAを動かす時間足。
  5. Spread:表の下の説明を参照。
  6. Use date:チェックを入れてFromとToの日付を設定します。さまざまな相場環境を含む期間を選び、後述のアウトオブサンプルテストに残す部分を決めておきます。
  7. Expert properties:Testingタブで初期証拠金とポジションの種類(Long、Short、または両方)を設定します。InputsタブではEAのパラメーターを設定します。Value列は1回のテストで使う値で、Start、Step、Stopの各列は最適化のときだけ使います。

Testing、Inputs、OptimizationタブがあるMT4のExpert propertiesウィンドウ

EAの資金管理機能はオフにし、固定ロットを使いましょう。ロットが残高とともに増えると、後の取引の比重が大きくなり、2つのテストを比べにくくなります。EUR/USDの0.10ロットなら1pipは1ドルなので、計算が簡単です(FXのpipとは?を参照)。

Startを押します。Visual modeをオンにするとチャート上でテストが再生され、EAが実際にどう取引するかを確認できます。テストが終わると、Results、Graph、Reportの各タブが表示されます。

どのモデルを選ぶか

モデル仕組み用途
Every tick利用可能な下位の時間足をすべて使い、足りない部分は補間で埋めるバーの途中で取引するEAの最終テスト
Control points最も近い下位の時間足を使う大まかな見積もりと最適化
Open prices only確定したバーだけで動作する新しいバーの始値でのみ動くEA

「Every tick」という名前は誤解を招きます。標準の履歴では、これらのティックは記録されたものではなく、1分足から生成されたものです。MetaQuotesは、下位の時間足がテスト期間全体をカバーしていない場合、結果が正確にならないとして、このモデルを勧めていません。

Spread欄について

MT4の履歴にはBid価格しかないため、テスターがスプレッドを加算します。そしてテスト全体に1つの値が適用されます。「Current」はStartを押した瞬間のスプレッドを使います。同じテストでも、静かな火曜日と金曜日の遅い時間帯とでは、結果が変わることがあります。代わりに数値をポイントで入力しましょう。5桁表示なら19ポイント = 1.9pipsです。ご利用の業者の標準的な値を使ってください。基礎から知りたい方は外国為替のスプレッド:その意味と計算方法をお読みください。

ステップ3:レポートを読む

以下は過去のEUR/USDテストのレポートと、MT4のヘルプに基づく主な項目の意味です。

MT4ストラテジーテスターのReportタブ:modelling quality 90%、34取引、プロフィットファクター1.51

項目今回の値意味
Modelling quality90.00%下位の時間足からティックをどれだけ正確に再現したか
SpreadCurrent (19)テスト全体で1つのスプレッド、1.9pips
Total trades34サンプルの大きさ
Profit factor1.51総利益 ÷ 総損失:746.77 ÷ 493.14。1は両者が等しいことを示す
Expected payoff7.461取引あたりの平均結果:253.63 ÷ 34
Absolute drawdown48.82初期証拠金を下回った最大の損失
Maximal drawdown256.58 (2.51%)エクイティの高値からその後の安値までの最大下落

Modelling qualityが示すのはティックの作られ方であり、EAの優秀さではありません。MetaQuotesが公開した計算式では、1分足から再現したバーの重みは0.9です。そのためM1履歴の上限は90%になります。「Open prices only」では欄にn/aと表示されますが、これは正常です。外部ツールでティックデータを読み込むトレーダーは最大99%の値を報告しています。バー内の値動きは改善するかもしれませんが、約定や過剰最適化の問題は何も変わりません。MT4のヘルプにはMismatched charts errorsの定義がありませんが、トレーダーは通常、0以外の値を履歴の不整合のサインとみなし、データをダウンロードし直します。

プロフィットファクターやドローダウンに万能の「合格ライン」はありません。ここで作り出すこともしません。プロフィットファクターはこのサンプルとテスターのコストで測った値で、最適化によって偶然高くなることがあります。Maximal drawdownはこのテストで起きた最悪の下落であり、起こり得る最悪の下落ではありません。ドローダウンが口座に与える影響についてはFXの資金管理をご覧ください。

数字から読み取れることは、サンプルの大きさで変わります。このレポートでは34取引中27取引が勝ちで、勝率は79%です。34取引の場合、勝率の95%信頼区間は約63%から90%です。340取引で同じ79%なら約75%から83%になります(当サイトの計算、Wilson区間)。テストが有効になる決まった取引回数はありませんが、取引が少ないほど、数字の解釈の幅は広がります。

MT4のテスターが再現しないもの

テスターはスワップ、必要証拠金、待機注文を再現しますが、リアル口座で起こることのすべてを再現するわけではありません。

  • 変動スプレッド。テスト全体で1つのスプレッドです。実際のスプレッドは指標発表時や日々のロールオーバー時に広がります。
  • 約定速度。MetaQuotesはテスターの取引処理に遅延がないと説明しており、Settingsタブにも遅延の設定項目はありません。
  • スリッページ。取引はスリッページなしで処理されるため、どの約定もリアル口座で期待できるより有利になります。

影響の大きさは、EAが1取引でいくら稼ぐかによります。簡単な例を示します(当サイトの計算で、実在のEAのデータではありません)。実取引で1取引あたり0.5~2pipsの追加コストがかかるとします。

1取引の追加コスト平均5pipsのEA平均50pipsのEA
0.5pip−10%−1%
1pip−20%−2%
2pips−40%−4%

つまり、スキャルパーのバックテストから分かることは、長期EAよりはるかに少ないのです。手軽なストレステストとして、Spread欄の値を上げてもう一度テストしてみましょう。結果が崩れるなら、そのEAには実際のコストを吸収する余裕がほとんどありません。

MT5はより実際に近づいています。テスターで「Every tick based on real ticks」を使え、固定およびランダムの約定遅延も設定できます(MT4とMT5の比較を参照)。それでもテストであり、リアル口座ではありません。

最高のバックテストが最も運のよかった結果にすぎない理由

多くのEAには期間、水準、フィルターなどのパラメーターがあります。テスターのOptimizationは、設定したStart、Step、Stopの範囲でEAを何度も実行し、結果を順位付けします。便利な機能ですが、落とし穴があります。最適化は見つけた最高の結果を返すだけで、実力と運を区別できません。

この落とし穴が過剰最適化(オーバーフィッティング、カーブフィッティング)です。繰り返すパターンではなく、過去のノイズに設定を合わせてしまうことを指します。テストが素晴らしく見えるのは、まさにその履歴の区間に合うように設定を選んだからです。

数学者のBailey、Borwein、López de Prado、ZhuはPseudo-Mathematics and Financial Charlatanism(Notices of the AMS, 2014)でこれを数値化しました。本当の優位性がない戦略を取り上げ、最良のものがテストでシャープレシオ(Sharpe ratio)1に達する一方、その後の期待シャープレシオは0になるまでに、独立した試行が何回必要かを調べています。シャープレシオはリターンをその変動の大きさと比べた指標です。MT4のレポートには表示されませんが、考え方は同じです。

データの期間運が実力に見えるまでの試行回数
2年7
5年45

多い回数ではありません。オン/オフの選択肢が7つあるだけで27 = 128通りになります。10個の値を持つパラメーターが3つあれば1,000パスです。これらのパスが独立だとすると、論文の式では、運による最高のシャープレシオを1に抑えるだけでも、128回の試行で約6.8年、1,000回で約10.6年のデータが必要です(当サイトが式3.2で計算。同じ式で7回なら1.9年、45回なら5.0年)。

これは限界値ではなく警告として読んでください。隣り合う設定は独立ではないので、最適化の実際の試行回数はパスの数より少なく、論文も独立の仮定はかなり保守的だと述べています。一方で、この最低期間より長いテストでも過剰最適化は起こり得るとも述べています。

著者の主な結論は単純です。試行回数を報告しないバックテストでは、過剰最適化のリスクを評価できません。見事なレポートを見せられたら、いくつの設定を試した結果なのかを尋ねましょう。

過剰最適化を見抜く3つのチェック

  1. 近い設定でも機能するか。各パラメーターを少し上下に動かします。周辺でも結果が保たれるなら、1つの幸運な値に頼っている可能性は低くなります。特定の値でしか機能しないなら要注意です。
  2. 未使用のデータでも通用するか。固定した設定を、選択に関わっていない期間でテストします。これが後述のアウトオブサンプルテストです。
  3. パラメーターは少なく、取引は多いか。パラメーターが多いほど、EAはノイズに合わせやすくなります。取引が多いほど、運だけで結果を説明するのは難しくなります。

MT4でのアウトオブサンプルテスト

MT4に専用モードはありませんが、Use dateがあれば十分です。

  1. 履歴を2つに分けます。古い部分がインサンプル、新しい部分がアウトオブサンプルです。結果を見る前に分け方を決めてください。
  2. Use dateを古い部分だけに設定して最適化を実行し、設定を選びます。
  3. Optimizationのチェックを外し、選んだ値をValue列に入力して、新しい部分で1回テストします。
  4. 1取引あたりの平均結果、ドローダウン、取引回数について2つのレポートを比べます。後半の期間で大きく悪化するのは、過剰最適化の典型的なサインです。

MT5のテスターはこの分割を自動で行います。Forwardモードでは期間の1/2、1/3、1/4または任意の部分を選べ、常に最新の部分をフォワードテストに使います。

アウトオブサンプル期間が使えるのは1回だけです。戻って設定を変え、同じ期間で再度テストすれば、もう未使用のデータではなく、試行が1回増えたことになります。論文もホールドアウトテストについて、それまでの試行回数を考慮しないと述べています。

EAを購入した場合、最適化を行ったのは別の人です。初期設定の裏にどれだけの試行があったかは通常分からないので、尋ねてみましょう。そのうえで、その設定をご利用の業者のデータでテストし、設定が公開された後の期間に特に注目してください。販売者にとって、その期間は調整に使えなかったはずです。

リアル口座の実績がより重要な理由

バックテストはEAを除外するには最も速い方法ですが、優秀さを確認する方法としては弱いものです。リアル口座は2つの大きな欠点を同時に補います。実際のスプレッド、遅延、スリッページで動き、設定を固定した後の毎日が、そのままアウトオブサンプルになります。

順序としては、バックテスト、アウトオブサンプルテスト、デモ、そして少額のリアル口座、または販売者の検証済みリアル実績の確認が妥当です。リアル実績を読むときも同じ考え方が当てはまります。

  • 第三者が検証しているか、デモではなくリアルマネーの口座か。
  • 運用期間はどれくらいか、取引回数はいくつか。数か月の好成績ではほとんど何も証明できません。
  • 設定はいつ固定されたか。それ以前の結果も過去に合わせたものかもしれません。
  • 口座はそれだけか。10口座のうち最良のものを見せるのは、10回のバックテストの最高結果を見せるのと同じ落とし穴です。

そのためForexStoreでは各ロボットのページからリアル口座を確認でき、FX自動売買ロボットのランキングもバックテストではなくリアル取引の結果に基づいています。リアル実績はより強い証拠ですが、約束ではありません。過去の実績は将来の結果を保証しません。

よくある質問

MT4のバックテストにはどのくらいのmodelling qualityが必要ですか?

万能の最低値はありません。M1履歴での上限は90%で、「Open prices only」ではn/aと表示されますが、確定したバーで取引するEAでは正常です。modelling qualityはティックの作られ方を示すだけで、過剰最適化や約定については何も語りません。高い値だけではテストの信頼性は保証されません。

バックテストのプロフィットファクターはどのくらいがよいですか?

万能の数値はありません。プロフィットファクターは総利益を総損失で割った値で、1を超えていればテスト上は利益が出たことを意味します。その値にどれだけ意味があるかは、取引回数、テストで使ったコスト、試した設定の数によって変わります。

バックテストの過剰最適化とは何ですか?

過剰最適化とは、繰り返すパターンではなく過去のノイズに設定を合わせてしまうことです。Baileyらの論文(Notices of the AMS, 2014)は、2年分のデータなら約7回の独立した試行で、最良のものがテストでシャープレシオ1に達し、その後の期待結果は0になることを示しています。5年分なら約45回です。

リアル口座の結果がバックテストと異なるのはなぜですか?

MT4のテスターはテスト全体で1つのスプレッドを使い、約定遅延もスリッページもありませんが、リアル口座ではこの3つすべてに直面します。さらに設定が過剰最適化されていれば、過去に合致したパターンが新しいデータには存在しないこともあります。

まとめ

  • バックテストに必要なのは、履歴(F2)、テスター(Ctrl+R)、適切なモデル、自分で設定したスプレッドです。
  • modelling qualityが示すのはティックであり、EAではありません。これもプロフィットファクターも合格基準にはしないでください。
  • MT4のテスターは変動スプレッド、約定速度、スリッページを考慮しないため、1取引の利益が小さいEAほどリアル取引で影響を受けます。
  • 多くの設定のうち最高のものは、最も運がよかっただけかもしれません。2年分のデータなら独立した試行は約7回、5年分なら約45回です。
  • 近い設定を確認し、未使用のデータでテストし、少ないパラメーターと多い取引を選び、試行回数を尋ねましょう。
  • 次にデモ、その次に検証済みのリアル実績です。

初めての方はFXの始め方ガイドからどうぞ。

出典:MetaTrader 4 Help, Strategy Testing、History Center、MetaTrader 5 Help, Testing、MetaQuotesの記事What the Numbers in the Expert Testing Report Mean、Testing Features and Limits in MetaTrader 4、MQL4 Reference, Testing、Bailey, Borwein, López de Prado, Zhu, Pseudo-Mathematics and Financial Charlatanism, Notices of the AMS, 2014.

この記事は学習目的の情報であり、投資助言ではありません。レバレッジ取引には損失のリスクがあります。