「ウォークフォワードテスト」の考え方をまとめる【システムトレーダーの重要スキル】
バックテストとは「システムの性能を測る作業」ではありません。「システムの性能を測るために使うデータを集める作業」であり、システムを無限に回し続けたときのパフォーマンスを一部切り取ったものです。
知りたいのは「バックテストのパフォーマンス」ではなく「システム本来の性能」です。これを把握したうえでバックテスト(ウォークフォワードテスト)を解説します。
なぜウォークフォワードテストを使うのか
まず通常のフォワードテストとウォークフォワードテストを比較して、ウォークフォワードテストを行うメリットを確認していきます。
フォワードテスト
通常のフォワードテストとはEAを最適化したあと適応するパラメータの値を決定し、その設定でどれくらいのパフォーマンスを出すか検証するバックテスト方法です。アウトオブサンプルテストとも言います。
「最適化した結果が良くてもフォワードテストの結果は悪い」というようなことは簡単に起こります。最適化した結果というのはEA本来のパフォーマンス以上の良い結果(過剰最適化またはオーバーフィッテイング)となるものも含まれるので、必ず最適化後のチェックが必要です。最適化を除いたフォワードテストの結果こそがEAを評価するためのサンプルデータとなります。
フォワードテストの欠点は最適化したデータの期間がリアルトレードするまでの期間と離れていることです。つまり、リアルトレードをするEAの設定値は古いヒストリカルデータに基づいて決定したものとなってしまうことです。
そこで最適化をより直近のデータで行ってその後に古いデータを呼び出してフォワードテストをする「逆転型フォワードテスト」というものが考えられました。この場合直近のヒストリカルデータに基づいてEAの設定値を決めたことになりますので、先ほどの問題点は解消されていますが、今度はフォワードテストを行う期間が古いデータを使うことになってしまいます。
ウォークフォワードテスト
ウォークフォワードテストは通常のフォワードテストを期間をずらしながら複数回行うバックテスト方法です。リアルトレードで適応するEAの設定値は直近のデータに基づいて決定し、フォワードテストが古い期間で行われることもないです。
単純に考えても各フォワードテストでそれぞれプラスの収益がでているのであればリアルトレードでもプラスの収益が期待できそうと思えるのではないでしょうか。
各フォワードテストでそれぞれプラスの収益がでているということは、それだけ安定性のあるEAだということを示しています。各フォワードテストの結果のバラツキ方はEAの評価をするうえで重要な情報となります。
アルファリスクについて
アルファリスクとは「優位性のないEAを高く評価してしまうこと」です。全く優位性のないEA、つまりスプレッドなどを考慮しないPFがちょうど1.0になるEAが
取引回数1000回のフォワードテスト
取引回数100回×10のウォークフォワードテスト
これをそれぞれ行ったとき、本来PF1.0にもかかわらず偶然PF1.2以上となるアルファリスクは次の表のようになります。
合計の取引回数が同じでもウォークフォワードテストの方がアルファリスクを低く抑えることができます。
最適化を正しく理解する
カーブフィッティングと対策
最適化をするとパラメータの組み合わせの数だけ、バックテスト結果が出力されることとなり、中にはEAが潜在的に持つ本来のパフォーマンスを超えるバックテスト結果(カーブフィッティングされたもの)もあります。
EAが潜在的に持つ本来のパフォーマンスを中心に結果がばらつくと考えられます。将来的にはこのパフォーマンスラインに結果が収束していくため、カーブフィッティングしているパラメータほど、最適化の結果とフォワードテストの結果に乖離が生じる可能性は高くなります。
できるだけ多くのデータを使って最適化すること
最適化するパラメータはできるだけ少なくすること
この2つはカーブフィッティングを発生させ難くする基本的な考え方なので覚えておいてください。
最適化する目的
最もEAが高いパフォーマンスを発揮するパラメータを見つける
EAの堅牢性を測る
最適化の目的「最もEAが高いパフォーマンスを発揮するパラメータを見つける」について、そのパラメータは最適化の結果の中で「最良結果」ではなく、「予測最適値」であると考えられます。しかし「予測最適値」の正確な位置を知ることはできませんが、「最良結果」の近辺にあることはイメージできるかと思います。
将来的にはこのパフォーマンスラインに結果が収束していくことを考えると
「最良結果」の近辺で
パフォーマンスラインより下にあるパラメータ
を採用することが最適化をうまくやるコツではないかと思います。
最適化のもう一つの目的「EAの堅牢性を測る」について、堅牢性があるEAとは、多少設定するパラメータの値や相場環境が変わっても結果が大きくぶれないようなEAをいいます。リアルトレードでも利益を上げるEAとは最適化のときの結果がほとんどプラスになることが多いです。
不安定なEA(優位性がないEA)を最適化するとプラスになる結果がわずかしかなかったり、すべてマイナスになったりする。
対して、堅牢なEAはほとんどの結果がプラスとなります。EAが堅牢であるほど将来のチャートで利益を出す可能性は高くなるので、最適化するときには堅牢性(多少パラメータがずれても利益が出せるか)を必ずチェックするべきです。
フォワードテストで失敗しないために
なぜフォワードテストなのにカーブフィッティングするの?
最適化が終わればフォワードテストに移るわけですが注意点をいくつか挙げると
フォワードテストの結果がいまいちだったからパラメータを変えてもう一度フォワードテストした
複数の通貨ペアでフォワードテストをして一番パフォーマンスの良かった通貨ペアで運用しようとした
複数の時間軸でフォワードテストして一番パフォーマンスの良かった時間軸で運用しようとした
こういったことはフォワードテストをしているようで最適化しているのと同じです。複数回フォワードテストして上ブレした条件(カーブフィッティングした条件)を採用してしまえばフォワードテストする意味がありません。
時間軸や通貨ペアは最適化するパラメータの一種だと思ってバックテストするのがいいかと思います。もちろん時間軸や通貨ペアも他のパラメータと同様に、最適化すればその後フォワードテストをします。
さらにもう一つフォワードテストなのにカーブフィッティングしてしまう厄介な状況があります。
EA開発自体を何度もやって没EAを量産している場合、何度もフォワードテストするうちに偶然、極端な上ブレを起こして実力以上のフォワードテスト結果を出すEAに巡り合うことがあります。
EA開発の試行回数が多いほどこのリスクが高くなるのですが、良いEAなんていうのは簡単には作れないため、没EAを量産するのは避けて通れないことでもあったりします。
ではどう対策するのか
フォワードテストのトレード回数を増やす(サンプルサイズを大きくする)
ウォークフォワードテストでフォワードテストを数回に分ける(サンプル数を確保する)
具体的にはウォークフォワードテスト内の各フォワードテストをそれぞれトレード100回くらいはほしい。どんなに少なくとも30回は統計をとるために必要です。
トレード回数は100回では少なすぎる?
ネット上ではしばしば「バックテストのトレード回数は1000は必要」とか「3000は必要」などの意見を見かけますが、バックテストのトレード回数は100回あれば十分だと思います。統計学ではサンプルサイズは30くらいあれば、ある程度は信頼性のあるデータとして扱われることが多いです。
もちろんバックテストのトレード回数(サンプルサイズ)は多いほどいいのですが、100以上に増やしても劇的に精度が上がるということはないのです。
トレード回数は100回くらいでいい、その代わり分けろ
バックテストのトレード回数を100より増やすことよりも、サンプル数を確保する(標本の数を増やす)ことが重要です。
トレード回数1000回×1と100回×10を比較してみましょう。
取引回数1000でプラス期待値である結果が出た
取引回数100を10回バックテストして、それぞれプラス期待値である結果が出た
この二つを比較すれば取引回数100を10回のほうが信頼できるバックテスト結果であるとイメージできると思います。さらに10回にバックテストを分けると、その結果のバラツキ方からEAの安定性を調べることもできます。
ウォークフォワードテストをルール化する
ルールのない裁量トレードは成功しないのと同じように、ウォークフォワードテストのやり方に規律がない人は必ず失敗すると断言してもいいくらい、ルール化は重要なことだと思います。
①各フォワードテストの期間を決める
各フォワードテストは上でも説明したようにトレード回数が100回くらいになるようにフォワードテストの期間を調整します。
例えば、1日に1回くらいのペースで取引するEAの場合、フォワードテストの期間は5ヵ月程度でトレード回数が100回くらいに調整されます。ウォークフォワードテストの中で最初のフォワードテストを期間の調整のために使うといいと思います。
②最適化の開始位置を決める
最適化の開始位置をずらしながらウォークフォワードテストするパターン
最適化シフト型のメリットはより近い時期のヒストリカルデータを最適化に反映させることができることです。相場の変化に柔軟に対応させるEAにはこのやり方が適していると思います。
最適化の開始位置固定してウォークフォワードテストするパターン
最適化の開始位置固定型のメリットは最適化をより大きなサンプルサイズで行うことができることです。たくさんのデータで最適化する方が統計的は良いと考えられます。相場の変化にかかわらず長く機能するEAを目指す場合にはこちらが適していると思います。
③全フォワードテストの何割が優秀な結果であればそのEAを採用するか
例えばウォークフォワードテストで10回のフォワードテストをしたとします。「10回中6回優秀な結果だったが、4回はダメな結果だった。」こんなときにそのEAを採用するかしないかで迷わないように、結果の何割が優秀だったら採用するというルールを作っておきましょう。
参考として優位性がないEAがPF1.2を超える確率(アルファリスク)を出した結果を載せておきます。
個人的にはフォワードテストの回数の70%~80%くらいが良いと思います。このルールが緩すぎるとアルファリスク(優位性のないEAを高く評価してしまうこと)が高くなり、堅すぎるとベータリスク(優位性のあるEAを低く評価してしまうこと)が高くなります。
④どの評価指標を使って最適化-フォワードテストをするか
バックテストの評価指標には純利益、PF(プロフィットファクター)、最大ドローダウンなどさまざまな評価指標がありますが、最適化からフォワードテストへ移行するとき「どの評価指標を参考にしてパラメータをきめるか」を明確にしておく必要があります。
純利益
リカバリファクター
シャープレシオ
悲観的リターンレシオ
私がウォークフォワードテストで使う有力な評価指標と考えているのはこの辺りです。
◆純利益は説明する必要もないほど単純なものですが、結局は最終的に「どれだけ稼ぐか」が重要であることを思えば、シンプルで良い指標です。
◆リカバリファクターは扱いが難しい評価指標ですがウォークフォワードテストで使うには相性がいいです。従属試行の度合いが強いEAほど重要になる評価指標です。最大ドローダウンを重視する人がいますが最適化-フォワードテストにおいては明らかにリカバリファクタ―の方が使いやすいと思います。
◆シャープレシオは損益のバラツキをシステムのリスクであると考えて使われる指標です。損益のバラツキが小さいほどEAの安定感は増します。独立試行の度合いが強いEAほど重要になる評価指標です。
◆悲観的リターンレシオは取引回数が多いほど高く評価するプロフィットファクターと言えます。取引回数が多いということはそれだけ統計的に信頼できるデータであるということなのでウォークフォワードテストではプロフィットファクターよりもメリットの大きい評価指標となります。
個人的には悲観的リターンレシオを使うことが一番多いです。ウォークフォワードテストのような同期間同システムの比較するときの評価指標として便利なものです。
⑤どのパラメータを採用するか
最適化をした結果の最良結果と予測最適値は別物であると解説しました。
予測最適値を正確に見つけることは難しいのですが、予測最適値を狙ったルールを作っておくことが良いアプローチだと思います。
[予測最適値を狙ったパラメータ決定ルールの例]
最良結果(パフォーマンスラインの頂点)がおよそ真ん中に来るように、最適化パラメータの範囲を設定する
最良結果を中心に1~5%の範囲を探す
この範囲内の最も低い結果を使う
ウォークフォワードテストはサンプル収集作業
ウォークフォワードテストで出した結果はその後の検証やシミュレーションの材料となります。ウォークフォワードテストの結果の精度が悪ければその後がすべて質の悪いデータとなるため、ウォークフォワードテストは慎重にできるだけ悲観的に行うようにするくらいでちょうどいいと思います。
一番初めにも言いましたが、ウォークフォワードテストおよびバックテストはヒストリカルデータでEAのトレード成績のサンプルを集める作業です。これだけではEAを運用するためのデータとして不十分で、集めたサンプルを使って「EAをシミュレーションする」、「将来の損益を推定する」、「EAの特性を調べる」、「ポジションサイジングルールを決める」などを行いEAの運用へとつなげていきます。