カーブフィッティング(過剰最適化)とは、「過去の特定の期間の相場状況に合わせてコードやパラメータを最適化すること」をいいます。
過去の一部分の相場しか考慮されていないので、別の期間でテストしたり、フォワード(リアルタイム)テストしたりすると通常パフォーマンスが大きく損なわれてしまいます。
デパートの洋服売り場には試着するためのフィッティングルームがあります。
買いに行った当時の身体の線(カーブ)にピッタリ合わせて裁断してもらった洋服が、今では体形に合わなくなって着られなくなってしまったなんてことは誰でも一度や二度は体験するものです。
実はシステムトレードの世界でも、これとよく似たことが日常的に起こっています。
今の話をシステムトレードの場合に置き換えてみますと、
【買いに行った当時の体形】とはシステム開発の際に使った特定の期間のヒストリカルデータのことを意味します。
【ピッタリ合わせて裁断する】という行為はその過去の期間のヒストリカルデータの推移に基づいて、資産曲線が右肩上がりになるようにシステムを作っていくという行為になります。
そして【今では着られなくなった】という現象は「勝率99.9%」で「1日20回以上」トレードし、ドローダウンがほとんどない「きれいな右肩上がり」のバックテストの結果などを煽られ、つい高額のEAをポチってしまったが、実際にMT4に設定してみると全く役に立たないものだと気づかされるという残念な状況によく似ています。
それではカーブフィッティングの過程をもう少し具体的にみていきましょう。
ここで2本の異なる期間の単純移動平均線のゴールデン・クロスとデッド・クロスでドテン売買を繰り返す単純なシステムを想像してみてください。
特定の期間でこのシステムをいろいろとテストしているうちに2本の移動平均線の期間の組み合わせの違いによって次のことがわかりました。
- 5MAと13MAの組み合わせだと純益100万円。
- 21MAと40MAの組み合わせだと純益150万円。
- 50MAと200MAの組み合わせだと純益90万円。
皆さんが、開発者なら上記3つのうちどの組み合わせを選びますか?
恐らく最も多くの人が「150万円」という最高の純益を出した2番の組み合わせを選ばれるのではないでしょうか。
開発する立場では最高のパフォーマンスを出せる組み合わせの要素がわかっていれば、それを選ぶのは自然の成り行きです。
問題は過去の特定のヒストリカルデータに最適化されて設計されたシステムは、たとえその期間で理想的なパフォーマンスを出せたとしても、未来の相場で同様の成績が出せると保証されているわけではないということです。
たいていの場合、見るも無残な結果に終わります。
システムの脆弱性ともいわれますが、なぜそのようなことが起こるのでしょうか?
それは海外のトレードシステム開発者の間ではすでに常識とされているあるプロセスが、わが国のEA提供側に決定的に欠落しているのが原因と言えます。
ではそのあるプロセスとは具体的に何を指しているのでしょうか。一言でいうと先ほどの「脆弱性」と対をなすシステムの「堅牢性」の確保です。堅牢性(けんろうせい)とは英語に訳すとrobustness(ロバストネス)となり、それを更にWikipediaで調べると頑健性、頑強制となります。
要はトレードシステムがどのくらいしっかりしていて安定しているかという意味ですね。
ここで堅牢性を確保するために役立ち、且つ海外のEA開発者のあいだで人気のあるテスト方法をいくつかご紹介しましょう。
モンテカルロ検証
モンテカルロ検証とは、EAの前提となる条件が変わってもパフォーマンスのレベルが維持できているかどうかを検証します。
巷で有名なモナコのモンテカルロ地区のカジノが破産させられた数学的手法を思いつく方もいらっしゃるかもしれませんがこの検証法とは全く関係ありません。
最近ではMT4のEAのような自動取引システム自体をも自動的に作ってしまうようなソフトがいくつも出てきています。
その中でも高額な製品の一つには「レートにノイズを入れる」「注文にノイズを入れる」「ストラテジーにノイズを入れる」と、三つの分野で8項目に渡り前提条件を変えてパフォーマンスがどのくらい変化するかをシミュレーションする機能がついています。
この中で「ストラテジーにノイズを入れる」カテゴリにある「インジケータのパラメータをランダムに入れ替えてみる」と「バックテストの開始日時をランダムに設定してみる」という2つのオプションを選択して検証をした結果が右のチャートです。
堅牢性を意識せずに開発したEAだと一番上の曲線以外はすべて底辺に張り付くように描かれてしまいますが、半分以上のケースで資産曲線がプラスになっていれば堅牢性についてはいいレベルに達していると判断できます。
本体は結構高額ですが2週間ほど無料でお試しできるので、興味のある方は一度使ってみると「今までのEA選びは何だったんだ」と目からうろこが落ちるでしょう。
ウォークフォワード検証
ウォークフォワード検証も最近あちらこちらで耳にするようになりましたが、恐らく先物取引の世界選手権大会で自身の作ったトレーディングシステムで挑戦し3年連続で1位もしくは2位に入賞し続けたケビン・ダービー氏の紹介によるところが大きいと思われます。
EA販売においてカーブフィッティングさせたバックテスト結果を大々的に宣伝するのが当たり前になってしまったわが国のFX業界において、一石を投じる革新的なテスト法になるのではないかと思います。
今でも「バックテストでは十分に信じられないから、最低でも3年はフォワードテストの結果を見たい」という賢明なユーザーが少ないながらも存在します。
しかし、3年のフォワードテストの結果が見られるのはまさに3年先。
「EAの寿命が2年も持たない」と叫ばれる昨今、3年待ってフォワードテストに合格したとしてもそこで寿命が尽きてしまったら元も子もありません。
そこでウォークフォワード検証の方法をご説明しましょう。
まず、チャートの下に階段状に描かれている紫の水平線と緑の水平線がありますね。
一番左下の紫の線が2年超のイン・サンプル期間と呼ばれ、この期間のヒストリカルデータをサンプルとして使い最適化することによって、この期間で最高のパフォーマンスを発揮するパラメータの組み合わせを導き出します。
次にそのベストパラメータを続く緑の水平線の期間(1年間)で単純にバックテストします。
そして2段目は1段目を一年ずつ右にずらしています。
1段目の緑の期間(1年)を含めて1段目と同様に紫の期間で最適化したベストパラメータを緑の期間に適用し単純にバックテストを繰り返していきます。
最後まで行くと緑の期間でバックテストした結果が連続的に5年分揃うのがお分かりになるかと思います。
この期間はすべてアウト・オブ・サンプル期間と言って一切最適化を行わずフォワードテストと同じ状態をシミュレートしています。
ウォークフォワードテストは「短時間で実行可能」というバックテストの長所と「高い信頼性」というフォワードテストの長所を両立させているので、今後トレーディングシステムのテスト法としては主流になっていくのではないかと思われます。
マルチマーケット検証
マルチマーケット検証とは、一つの通貨のバックテストで良い結果が出たEAを他の通貨ではどのくらいのパフォーマンスが出るのかをチェックする検証です。
売買ロジックが普遍的でどの通貨で実行しても大きくロスにはならないというシステムは非常に堅牢性が高いと言えます。
そもそも特定の通貨だけで機能するように作られたEAなら仕方ありませんが。
下の図では出来上がったばかりのEAをこれでもかというほどいろいろな通貨でバックテストし、理想的な資産曲線を描けるかを視覚的に表現したグラフです。
たいていのEAは通貨を変えただけで期待外れの結果になり、同じ通貨であっても別の時間足でバックテストをするとまた大きく期待外れになってしまい、どこまで脆弱なのかと感じる結果になります。
しかし実はこれが普通なのです。
カーブフィッティングとは何か?から始まりカーブフィッティングが意味するシステムの脆弱性、そしてその対極に位置する堅牢なシステムを検証する方法にまで派生してお話してきました。
今後日本においてもEA開発者にシステムの堅牢性へ注意を払ってもらうだけでなく、EA購入者側も自らの財布を守るための知識を深めていただくことを切に願っています。
コメント