作成日
:2022.12.01
2023.10.13 01:41
EA(エキスパートアドバイザー)の過剰最適化(オーバーフィッティング)は、自動売買トレーダーにとって悩ましい問題です。MetaTrader5(MT5)では、このオーバーフィッティングを避けるための機能として、フォワードテスト機能が搭載されました。
フォワードテストとは、「未来の検証」という意味です。過去データで検証するバックテストに対して、リアルタイムでのEAの稼働成績を指す言葉として使われる場合もありますが、MT5のフォワードテスト機能は、ある時点までの期間を「過去」、その後の期間を「未来」とみなして最適化とバックテストを行うことを指します。具体的には、「過去」の期間のデータでパラメータの最適化を行った後、「未来」の期間のデータでバックテストを行い、そのパラメータの成績を検証します。
購入したEAをただ運用するだけでなく、自分でEAを作成したり、パラメータの最適化を行う人も増えてきました。その際、単にバックテストや最適化を行うだけでなく、フォワードテストやウォークフォワードテストを行うと、より詳しくEAの性能を検証できます。
この記事では、MT5のフォワードテスト機能や、それを利用してウォークフォワードテストをする方法を詳しく解説します。
最適化は、過去のデータを基に成績のよいパラメータを見つけ出す作業なので、どうしても、その期間、その銘柄でしか通用しないパラメータになってしまうリスクがあります。そのため、過去のデータだけで好成績となるEAなのか、未来の相場でも同じパフォーマンスを発揮できるEAなのかを判断するためには、最適化のためにデータを使用した期間ではない「未来」の期間で検証を行うことが必要です。MT5のフォワードテスト機能は、この「未来」の検証を最適化と同時に行うことができるため、より正確に、最適化されたパラメータの評価を行うことができます。
さらに、このフォワードテスト機能で得られたデータを利用すれば、単純なフォワードテストよりも正確にEAの性能を検証できる「ウォークフォワードテスト」を行うこともできます。ウォークフォワードテストとは、少しずつ対象期間をずらして複数回フォワードテストを行い、その結果を平均してEAの成績がどの程度安定しているかを評価するものです。一度のフォワードテストだけでは、過去のデータを用いて最適化したパラメータがたまたま未来の相場でも好成績になったという可能性が残ります。しかし、複数回のフォワードテストの結果を平均することにより、その可能性を排除し、より安定的に好成績を残すEAを選ぶことができます。
フォワードテストの目的は、パラメータが過剰最適化(オーバーフィッティング)になっていないかを判断することです。オーバーフィッティングとは、EAの最適化を行う際にデータをサンプルにした期間(インサンプル期間)の成績は良いものの、それより後の期間(アウトオブサンプル期間)では極端に成績が下がる状態をいいます。
最適化とは、指定した範囲で少しずつEAのパラメータの数値を変えてバックテストを行い、成績の良いパラメータを見つける作業です。最適化自体が元々、過去のデータにパラメータを合わせていく作業であるため、必然的にデータを参考にしたインサンプル期間の成績は良くなりますが、「未知の相場」に対応できるかどうかは保証されていません。
フォワードテストでは、データを参考にしていないアウトオブサンプル期間の成績を確認することで、「未知の相場」でも通用するEAかどうかを確認します。MT5のフォワードテスト機能では、バックテスト期間を二つに分割し、前半を最適化を行うためのインサンプル期間、後半を成績の検証を行うアウトオブサンプル期間に分割することで、フォワードテストを行います。
最適化の性質を考慮すると、オーバーフィッティングが発生してしまうのは仕方がないことです。しかし、最適化で生じたパラメータの中からオーバーフィッティングになっているものを除外することができれば、未来の相場でも利益を上げられるEAを運用することができます。フォワードテストはこのために行います。
ここからは、MT5で最適化とフォワードテストを同時に行う手順を紹介します。MT5では、「フォワード最適化」というメニューが用意されていて、すぐに行うことができます。
メニューバーより「表示」をクリックし、「ストラテジーテスター」を選択します。
ストラテジーテスターのメニュー一覧より「フォワード最適化」を選択します。
ストラテジーテスターには複数のメニューがあり、通常の最適化を行う場合は「最適化を完了」メニューを、最適化とフォワードテストを同時に行う場合は「フォワード最適化」メニューを選択しますが、どちらを選んでも同じストラテジーテスターの設定タブに遷移します。メニューの違いは初期設定の違いで、「フォワード最適化」を選んだ場合は、フォワードテストを行う際に設定する必要がある項目が最初から設定されています。「最適化を完了」メニューを選択した場合でも、「フォワードテスト」の項目を手動で設定すれば、フォワードテストを行うことができます。なお、「最適化を完了」という日本語表記は誤訳で、英語ではもう一つの最適化メニューである「遺伝的最適化」との対比で、「完全最適化」という意味になります。
銘柄や時間足等、通常のバックテストで必要な項目を入力した後、フォワード最適化に必要な「フォワードテスト」と「オプティマイズ」の項目を入力・選択します。
番号 |
項目名 |
説明 |
---|---|---|
1 |
フォワードテスト |
フォワードテストに使用する期間を設定します。「1/2」に設定すると、バックテスト期間のうち前半1/2で最適化を行い、後半1/2をフォワードテストに使用します。カスタムを選択すると、任意の日付を指定することができ、その日付以降がフォワードテストに使用されます。 |
2 |
オプティマイズ |
最適化の方法を選択します。
・無効化:最適化を行わず、通常のバックテストのみ行います。
・完全アルゴリズム(遅い):パラメータタブで指定した入力変数の全ての組み合わせでバックテストを行います。
・遺伝的アルゴリズム(速い):遺伝的アルゴリズムに基づいて、パラメータタブで指定した入力変数の全ての組み合わせのうち一部でバックテストを行います。完全アルゴリズムよりも速く最適化が完了します。
・気配値表示で選択されたすべての銘柄:複数の銘柄で同時にバックテストを行います。
|
3 |
最適化基準 |
最適化結果を選別したり、並び替えたりする基準を選択します。
・残高最大:口座残高が大きい順。
・最大利益率:利益率が大きい順。
・最大予想ペイオフ:期待ペイオフが大きい順。
・最小ドローダウン:ドローダウンが小さい順。
・最大回復係数:リカバリーファクターが大きい順。
・最大シャープレシオ:シャープレシオが大きい順。
・カスタム最大:OnTester関数で指定した基準が大きい順。
・複雑な基準の最大値:複数の基準(取引数、ドローダウン、リカバリーファクター、期待ペイオフ、シャープレシオ)を用いた評価が大きい順。
|
「フォワード最適化」メニューを選択すると、「オプティマイズ」欄はデフォルトで「完全アルゴリズム(遅い)」が、最適化基準は「残高最大」が選択されますが、変更も可能です。フォワードテストは、全ての最適化結果について行われるわけではなく、成績が上位の最適化結果のみに行われ、最適化基準はフォワードテストが行われる最適化結果の絞り込みにも使用されます。
MT5の最適化では、最適化を行う方法を「完全アルゴリズム(遅い)」「遺伝的アルゴリズム(速い)」の2種類から選択することができます。完全アルゴリズムは、パラメータタブで指定した入力変数の全ての組み合わせでバックテストを行いますが、遺伝的アルゴリズムは、一定の基準に基づいてバックテストを行う入力変数の組み合わせを絞り込むものです。遺伝的アルゴリズムの方が最適化を完了するまでの時間が短縮されますが、一部の組み合わせについてはバックテストが行われないというデメリットがあります。このほか、「気配値表示で選択されたすべての銘柄」を選択すると、複数の銘柄での最適化を行うことができます。
「設定」タブの隣の「パラメータ」タブで、最適化するパラメータにチェックを入れ、「スタート」「ステップ」「ストップ」の値を入力します。設定が完了したら、「スタート」ボタンを押すと最適化が開始されます。
フォワードテストが完了したら、結果の一覧が表示される「先行結果」のタブを確認します。結果は、それぞれ番号(パス)を付けられ、「残高最大」等の最適化基準に従って表示されます。「先行結果」の一覧から、確認したい結果をダブルクリックすると、詳細が表示されます。
「先行結果」のタブで確認したい結果をダブルクリックすると、「バックテスト」、「フォワード」、「グラフ」のタブが表示されます。グラフタブでは、損益グラフに灰色の線が表示され、この線より前は最適化にデータを使用した期間(インサンプル期間)、この線より後はフォワードテスト期間(アウトオブサンプル期間)となります。アウトオブサンプル期間に成績が下がっていないことが、オーバーフィッティングかどうかを見分けるポイントになります。
「バックテスト」、「フォワード」タブでは、インサンプル期間とアウトオブサンプル期間の両方の成績を個別に確認することができます。
オーバーフィッティングかどうかを判断するためには、特にフォワードタブの成績を確認するようにしましょう。
単純なフォワードテストだけでも、オーバーフィッティングの可能性を判断する材料になりますが、MT5のフォワードテスト機能で得られる数値を使って、さらに「ウォークフォワードテスト」を行うこともできます。
ウォークフォワードテストとは、一定の期間内でフォワードテストを複数回に分けて行い、その成績を平均することです。
通常のフォワードテストは、インサンプル期間も一つ、アウトオブサンプル期間も一つなので、インサンプル期間でオーバーフィッティングされたパラメータが、アウトオブサンプル期間でたまたま通用してしまうという可能性も残ります。ウォークフォワードテストは、この可能性を排除するために、期間をずらして複数回フォワードテストを行います。
10年の期間を対象にウォークフォワードテストを行う場合、例えば、1~3年目をインサンプル期間、4年目をアウトオブサンプル期間として、1年ずつずらして10回行います。インサンプル期間とアウトオブサンプル期間の長さや分け方は、特に決まったルールはありません。あまり短すぎたり長すぎたりすると正確なデータが取れませんが、EAの年間取引回数などにもよりますので、EAに応じて適切な長さで設定しましょう。
複数回に分けたフォワードテストの結果が出たら、インサンプル期間の獲得利益の年間平均と、アウトオブサンプル期間の獲得利益の年間平均をそれぞれ計算します。フォワードテストでは、最適化の際に過去データを参照したインサンプル期間で成績が良いのは当然で、未来の相場、つまりアウトオブサンプル期間で成績が良いのが安定したEAだと考えます。そのため、インサンプル期間の利益に比べてアウトオブサンプル期間の利益がどの程度大きかったかで評価を行います。
具体的には、下記の式に当てはめて、「ウォークフォワード効率」を計算します。年間平均を使用するのは、インサンプル期間とアウトオブサンプル期間の年数が違う場合も計算ができるようにするためです。
ウォークフォワード効率 =
平均年間ウォークフォワード利益 ÷ 平均年間最適化利益 × 100
実際の数値で見てみましょう。
回数 | インサンプル期間の利益 | アウトオブサンプル期間の利益 |
---|---|---|
1 | 8万円 | 1万円 |
2 | 7万円 | 3万円 |
3 | 13万円 | 2万円 |
4 | 6万円 | 1万円 |
5 | 9万円 | 3万円 |
6 | 13万円 | 2万円 |
7 | 6万円 | 1万円 |
8 | 9万円 | 2万円 |
9 | 11万円 | 2万円 |
10 | 8万円 | 3万円 |
合計 | 90万円 | 20万円 |
インサンプル期間の利益
1回 | 8万円 |
2回 | 7万円 |
3回 | 13万円 |
4回 | 6万円 |
5回 | 9万円 |
6回 | 13万円 |
7回 | 6万円 |
8回 | 9万円 |
9回 | 11万円 |
10回 | 8万円 |
合計 | 90万円 |
アウトオブサンプル期間の利益
1回 | 1万円 |
2回 | 3万円 |
3回 | 2万円 |
4回 | 1万円 |
5回 | 3万円 |
6回 | 2万円 |
7回 | 1万円 |
8回 | 2万円 |
9回 | 2万円 |
10回 | 3万円 |
合計 | 20万円 |
10回分のフォワードテストでのインサンプル期間(3年)の利益とアウトオブサンプル期間(1年)の利益はこのようになりました。インサンプル期間の利益の合計は90万円で、年間平均にすると3万円です。これに対して、アウトオブサンプル期間の利益の合計は20万円で、年間平均は2万円です。
これを、ウォークフォワード効率の式に当てはめると、「2 ÷ 3 × 100」で67%となります。
ウォークフォワード効率が高ければ高いほど、未来の相場で利益を出せたことを意味するので、EAが安定した成績を出すことが期待できます。
オーバーフィッティングの可能性が低いと判断できるウォークフォワード効率の目安は、50%以上とされています。この数値を上回るEAであれば、実際に運用して利益を上げることが期待できるでしょう。逆に、ウォークフォワード効率が低い場合は、オーバーフィッティングの可能性が高いためロジックを見直す必要があります。
MT5のフォワードテスト機能は、1回分のフォワードテストが行えるものです。そのため、ウォークフォワードテストを行うには、自分で期間を区切って複数回フォワードテストを行い、ウォークフォワード効率を計算する必要があります。
実際にMT5でウォークフォワード効率を計算する方法を紹介します。今回は、2010~2016年の7年間を、4年ずつ4期間に区切り、最適化とフォワードテストを4回行います。4年のバックテスト期間のうち、1/4、つまり1年をフォワードテスト期間に指定します。
上記の手順(MT5でフォワードテストを行う手順)と同様に最適化とフォワードテストを行います。1回目は、バックテスト期間を「2010.01.01~2013.12.31」、フォワードテスト期間を「1/4」に設定しました。最適化設定は、デフォルトのまま「完全アルゴリズム(遅い)」、「残高最大」を使用しています。
パラメータタブで最適化したいパラメータの設定を行い、「スタート」をクリックします。この設定は、各回のフォワードテストで共通で使用します。
最適化とフォワードテストが完了したら、「先行結果」のタブに、結果のパラメータの一覧が表示されますので、この結果の中から、ウォークフォワードテストに使用するパラメータを一つ決定します。どのパラメータを使用するかは特に決まった基準はありませんが、今回は最適化された期間の口座残高が最大のものを使用します。「バックテスト」をクリックすると、口座残高が多い順番に並び替えができますので、一番上のパス(番号)3の行をダブルクリックします。
「先行結果」タブのパスをダブルクリックすると、「バックテスト」タブと「フォワード」タブが追加され、詳細な結果が表示されます。それぞれのタブの「総損益」の項目の数値がウォークフォワードの計算に必要になりますので、メモしておきます。今回は、バックテストの総損益が127,890円、フォワードテストの総損益が205,234円となりました。
手順1~3を、開始年を1年ずつずらして繰り返します。結果は下記のようになりました。
回数 | 開始年 | バックテスト総損益 (3年) |
フォワードテスト総損益(1年) |
---|---|---|---|
1回目 | 2010年1月1日 | 127,890円 | 205,234円 |
2回目 | 2011年1月1日 | 366,023円 | -183,076円 |
3回目 | 2012年1月1日 | 270,866円 | 8,704円 |
4回目 | 2013年1月1日 | 131,292円 | 123,109円 |
合計 | - | 896,071円 | 153,971円 |
1回目
開始年 | 2010年1月1日 |
バックテスト総損益(3年) | 127,890円 |
フォワードテスト総損益 (1年) |
205,234円 |
2回目
開始年 | 2011年1月1日 |
バックテスト総損益(3年) | 366,023円 |
フォワードテスト総損益 (1年) |
-183,076円 |
3回目
開始年 | 2012年1月1日 |
バックテスト総損益(3年) | 270,866円 |
フォワードテスト総損益 (1年) |
8,704円 |
4回目
開始年 | 2013年1月1日 |
バックテスト総損益(3年) | 131,292円 |
フォワードテスト総損益 (1年) |
123,109円 |
合計
開始年 | - |
バックテスト総損益(3年) | 896,071円 |
フォワードテスト総損益 (1年) |
153,971円 |
この数値を基に、ウォークフォワード効率を計算します。
ウォークフォワード効率 =
平均年間ウォークフォワード利益 ÷ 平均年間最適化利益 × 100
1回あたりのバックテスト期間は3年、フォワードテスト期間は1年のため、バックテストの総損益の合計を年間平均に換算すると「896,071 ÷ 12」で74,673円、フォワードテストの総損益の合計を年間平均に換算すると「153,971 ÷ 4」で38,493円になります。
これを式にあてはめると、「ウォークフォワード効率=38,493÷74,673×100=約52%」となります。
ウォークフォワード効率50%以上を満たしていますので、このEAはオーバーフィッティングの可能性が低いと判断できます。
実は、MT4でもフォワードテストやウォークフォワードテストを行うことはできました。ある期間を除外して最適化を行い、パラメータを決めた後、除外していた期間で通常のバックテストを行えば、フォワードテストになります。さらに、それを期間を分割して繰り返せばウォークフォワードテストもできます。しかし、分割してやるのはかなりの手間でした。
MT5では、この点が改善され、最適化を行うのと同時にフォワードテストも行うことができるようになりました。最適化を行うと多くのパラメータが生まれますが、そのうち未知の相場(アウトオブサンプル期間)でも成績が良いパラメータはどれかというのが一目で分かるのは、EA利用者にとってはありがたい機能です。
まだまだ自動売買ではMT4が主流ですが、MT5は多くの点でMT4より進化しています。MT5の機能を活用して、より利益を上げるEAを探していきましょう。
作成日
:2022.12.01
最終更新
:2023.10.13
ご覧いただきありがとうございます。Myforexでは、記事に関するご意見・ご感想をお待ちしています。
また、海外FX・仮想通貨の経験が豊富なライター様も随時募集しております。
お問い合わせ先 [email protected]
仮想通貨USUALの将来性は?RWA活用のステーブルコインプロトコルを解説
2024.11.20 20:00
Milton Marketsが2024年11月より最大100%分入金ボーナスを開催
2024.11.20 19:30
スマホ版MT4のやさしい使い方ガイド~iPhone&Androidの基本操作~
2024.11.20 19:00
ZoomexがクリプトバトルZを開催!毎週開催の取引大会で現物USDTやボーナスを獲得
2024.11.15 20:00
ゴールドラッシュXMは本当に儲かるのか?ほぼ破綻リスクゼロのEAの実力は
2024.11.14 20:30
Titan FXがブラックフライデーキャンペーンを開催!取引でキャッシュバックが付与
2024.11.14 20:00
免責事項:Disclaimer
当サイトの、各コンテンツに掲載の内容は、情報の提供のみを目的としており、投資に関する何らかの勧誘を意図するものではありません。
これらの情報は、当社が独自に収集し、可能な限り正確な情報を元に配信しておりますが、その内容および情報の正確性、完全性または適時性について、当社は保証を行うものでも責任を持つものでもありません。投資にあたっての最終判断は、お客様ご自身でなさるようお願いいたします。
本コンテンツは、当社が独自に制作し当サイトに掲載しているものであり、掲載内容の一部または、全部の無断転用は禁止しております。掲載記事を二次利用する場合は、必ず当社までご連絡ください。
Myforexでは、このウェブサイトの機能向上とお客様の利便性を高めるためにクッキー使用しています。本ウェブサイトでは、当社だけではなく、お客様のご利用状況を追跡する事を目的とした第三者(広告主・ログ解析業者等)によるクッキーも含まれる可能性があります。 クッキーポリシー