カーブフィッティングを防ぐ方法とは?【大損しないための注意点】

システムトレード
くまさん

カーブフィッティングって何?

うしくん

カーブフィッティングを防ぐにはどうすればいい?

 

この記事では、上記のような疑問にお答えします。

 

本記事のポイント

・カーブフィッティングとは?
・カーブフィッティングの原因
・カーブフィッティングか判断する方法
・カーブフィッティングを防ぐ方法
・最適化の目的を理解することも重要

 

システムトレードで勝てない原因の一つにカーブフィッティングが挙げられます。

この記事では、カーブフィッティングとは何か?、カーブフィッティングを防ぐための方法、について解説しています。

また、カーブフィッティングは主にシステムトレードでの問題ではありますが、システムトレーダー以外の全トレーダーに共通する問題でもあります。

是非システムトレーダー以外も参考にしていただければと思います。

 

マンモス
マンモス

はじめまして!マンモスです。
投資歴15年です。
以前は負け続けていましたが、システムトレードの考え方を習得したことで、大きく資産を増やすことができました。

※2021年4月に資産3000万円を達成しました。
そんな私が、「カーブフィッティングを防ぐ方法とは?【大損しないための注意点】」を解説します。

 

この記事で解説している内容は、利益を保証するものではありません。
投資は自己責任でお願いします。

 

 

 

カーブフィッティングとは?

カーブフィッティングとは、売買ルールやテクニカル分析を過去の価格データにこじつけすぎることです。

 

マンモス
マンモス

過去のデータであれば、どうすれば利益を最大化できていたか、ということが簡単に分かります。
そのように”過去に特化した状態”をカーブフィッティングと言います。

 

カーブフィッティングは過剰最適化とも言われます。

 

カーブフィッティングが発生している場合、バックテストでの結果は素晴らしいものになります。

しかし、カーブフィッティングした売買ルールをリアルトレーディングに適用した場合、バックテストに比べ大幅に損益が悪化する可能性があり、注意が必要です。

 

また、カーブフィッティングはシステムトレーダーにだけ関係する問題ではありません。

システムトレーダー以外の投資家が、自覚なしにカーブフィッティングしている投資手法を使ってしまうこともあるため、注意が必要です。

 

 

カーブフィッティングの原因

カーブフィッティングの原因は大きく分けて3つあります。

①過去のデータに対する過剰な最適化
②複雑すぎる売買ルール
③利益を追求し過ぎる

 

原因① 過去のデータに対する過剰な最適化

最適化とは、より損益が高くなるように、売買ルールに使用しているパラメータを変更することです。

例えば、

高値のブレイクアウトで買う、という売買ルールの場合、高値計算期間を変更したりすることです。

また、移動平均線を使用したゴールデンクロスで買うという場合であれば、移動平均線の計算期間を変えることが最適化にあたります。

 

過剰な最適化とは、

・特定の銘柄に特化したパラメータ

・特定の期間に特化したパラメータ

このようなことが原因となります。

 

原因② 複雑すぎる売買ルール

平均損益、勝率などを高めるために、複雑すぎる売買ルールになってしまった場合、これもカーブフィッティングの原因となります。

複雑すぎる売買ルールに加え、さらに過剰に最適化し過ぎると、特定の状況に特化した売買ルールが誕生します。

しかし、特化し過ぎているがゆえに、再現性もなく極端に損益が悪化します。

このこともカーブフィッティングの原因となります。

 

原因③ 利益を追求し過ぎる

より多く利益を欲するのは、当然のことです。

しかし、その思いが強すぎると原因①、原因②のような間違いを犯しがちです。

バックテストの結果が市場平均のリターンよりはるかに優秀な場合、喜ぶのではなくカーブフィッティングしていないかを疑いましょう。

 

カーブフィッティングか判断する方法

判断方法はシンプルです。

①リアルトレーディングの結果を確認する
②バックテストで確認する

 

カーブフィッティングとはどういうものか、ということを知っていて、かつ、中立的な立場で売買ルールを確認するだけで、カーブフィッティングしているか判断できます。

 

リアルトレーディングの結果を確認する

リアルトレーディングの損益が、シュミレーションのときと”大幅”に違うかどうかで判断します。

”大幅”というところがポイントです。

というのも、売買シュミレーション結果(バックテスト結果)と将来の損益は、基本的に誤差があります。

 

くまさん
くまさん

過去の値動きと将来の値動きは違うから、しかたないね・・・

 

誤差が大きすぎる場合、カーブフィッティングが発生したと判断しましょう。

 

バックテストで確認する

バックテストで以下の条件に当てはまる場合には、カーブフィッティングが発生していると判断しましょう。

・売買ルールを構成する条件が多い
・バックテストが非常に良い結果だった
・バックテストでのトレード回数が少ない
・バックテストを特定期間でしかしていない
・バックテストを特定銘柄でしかしていない

 

カーブフィッティングを防ぐ方法

カーブフィッティングを防ぐ方法を5つ紹介します。

①シンプルな売買ルールにする
②最適化の損益曲線に注意する
③パラメータのオーバースキャンに注意する
④フォワードテストする
⑤他市場他期間バックテストを実施する

 

それぞれ詳しく解説していきます。

 

※カーブフィッティングが発生してしまう原因は、バックテストを誤った方法で実施してしまうことです。

以下の記事で、システムトレードの基本を学べる本を紹介しています。

なかでも、ロバート・パルド著「トレーディングシステムの開発と検証と最適化」はバックテスト方法に特化した本であり、おすすめです。

 

 

 

方法① シンプルな売買ルールにする

カーブフィッティングの一番の原因は、過去の価格データにたいして、売買ルールをこじつけることです。

シンプルな売買ルールではある程度の曖昧さがあり、将来的に状況が多少変化してもそれに対応できるだけの”遊び”があります。

たいして、売買ルールに様々なフィルター、条件を追加したものは”遊び”がありません。

”遊び”の重要性は次項の「最適化の損益曲線に注意する」でくわしく解説します。

 

株や為替、その他の金融商品において、ある条件がそろったとしても、過去の値動きと”全く同じ値動き”にならないのは誰もが経験的に分かっていることと思います。

複雑な売買ルールは、この変化に対応するだけの”遊び”がないのです。

そのため、損失が拡大することになります。

これがカーブフィッティングです。

いっぽうで、シンプルな売買ルールでは、”全く同じ値動き”にならなくても、それに対応するだけの余裕があります。

 

また、複雑な売買ルールの場合、上記のリアルトレーディングによる損益の問題以外に、バックテスト時に別の問題が発生します。

それは、シンプルな売買ルールに比べ、「同一バックテスト期間において、サンプル数が少なくなる」という問題です。

 

以下の例で解説します。

たとえば、バックテストを3年でするとします。

売買ルール数が1の場合、3年の間に50回の売買シュミレーションができるとしましょう。

これが売買ルール数2の場合、25回のシュミレーションに減り、売買ルール数が3なら、さらにシュミレーション数が減るという状況になります。

上記の数字はあくまで例えですが、同じ期間でバックテストしても、売買ルールが複雑であれば、その分のデータ数が減ります。

このデータ数が少なすぎる場合、バックテスト結果が良くても、たまたまうまくいった、という状況もありえるわけです。

バックテスト結果に信頼性を求めるためにも、同一バックテスト期間内でデータサンプル数は多いほうがいいでしょう。

 

以上のことから、売買ルールは極力シンプルにしましょう。

 

方法② 最適化の損益曲線に注意する

最適化したときの損益曲線の形には、カーブフィッティングしているかの重要なヒントが隠されています。

もし、損益の数字しか見ていないのであれば、グラフ化してみることをおすすめします。

なぜグラフ化が必要なのか?

その理由ですが、最適化にて売買ルールのパラメータを変更し、損益が緩やかに変化するか、急激に変化するかを見るためです。

もし、急激な変化をしている場合には注意が必要です。

これは、パラメータが少し変化するだけで、大幅に損益が悪化/良化することを意味します。

つまり、売買ルールをリアルトレーディングに適用したときに、バックテスト時と多少でも状況が違えば大きく損益が変化します。

これが前項にて触れた”遊び”の重要性です。

 

どのようなグラフが理想的かは以下をご覧ください。

 

理想的な損益の変化をは丘状

理想の損益曲線

出展:ロバート・パルド著 トレーディングシステムの開発と検証と最適化

 

パラメータによって激しく損益が変化するのはNG(“遊び”がない)

NGな損益曲線

出展:ロバート・パルド著 トレーディングシステムの開発と検証と最適化

 

方法③ パラメータのオーバースキャンに注意する

オーバースキャンとは最適化の際に、売買ルールに使っているパラメータを細かく調整しすぎることです。

移動平均線のゴールデンクロスを使ったバックテスト例で解説します。

 

ゴールデンクロスに必要なパラメータは、短期と長期の移動平均線2本分です。

1本目(短期)の計算期間を2日~10日として、2本目(長期)の計算期間を25日~90日にするとします。

この場合、1本目(短期)は1日刻みで変えて、損益の改善をしてみるのは妥当です。

しかし、2本目(長期)を1日刻みで変えて、損益を改善するというのは明らか”やりすぎ”です。

というのも、2本目は長期のトレンドをつかむためのもので、80日を81日に変えてみても、81日のデータは1/80日多くなるだけです。

この場合、長期のトレンドをつかむという目的にたいして、変化量が少なすぎるのです。

 

このように、刻みすぎたパラメータで損益が極端に変化する場合、カーブフィッティングが発生している可能性があります。

 

方法④ フォワードテストする

フォワードテストとは、バックテスト(最適化)の期間と、リアルトレーディング(アウトオブサンプル)と仮定した期間に分けてテストすることです。

※イメージ図はこんな感じ

この図は、フォワードテストを連続的に行うウォークフォワードテスト。

フォワードテストの図

くまさん
くまさん

最適化したあとに、「さあ、リアルトレーディング開始だ!」としないで、さらに検証するわけだ。

 

マンモス
マンモス

フォワードテストすることで、疑似的にリアルトレーディングしているんだよ!

 

ここで、フォワードテストしたときにカーブフィッティングしていないかの判断方法として、WFEというものがあります。

WFEはウォークフォワード効率といい、これを使うことで簡単にカーブフィッティングの評価ができます。

 

WFE(ウォークフォワード効率)の算出方法

WFE = 平均年次ウォークフォワード利益 / 平均年次最適化利益 

 

マンモス
マンモス

シンプルに考えれば、フォワードテスト結果が最適化結果の何割のパフォーマンスを出しているか、ということです。

 

WFEは100%に近づくほど、最適化のときのパフォーマンスを発揮していることになります。

「トレーディングシステムの開発と検証と最適化」の執筆者であるロバート・パルドいわく、50%以上であれば、そのモデルは良いモデルとのことです。

 

くまさん
くまさん
50%で良いって、最適化の半分のパフォーマンスがリアルトレーディングででているだけ、マシってこと?
マンモス
マンモス
そういうことだね。
リアルトレーディングで使う売買ルールは、そのパフォーマンスの悪化分を見込んで慎重に選んだほうがよさそうだね。

 

方法⑤ 他市場他期間バックテストを実施する

特定銘柄の特定期間だけでバックテストするのは、データが少なすぎて信頼性に欠けます。

上昇トレンド、下落トレンド、持ち合い相場など様々な状態を含んだ期間でバックテストしましょう。

また、特定銘柄だけでなく、様々な銘柄、市場でバックテストすることも、カーブフィッティングを防ぐことに役立ちます。

 

最適化の目的を理解することも重要

カーブフィッティングを防ぐための、「精神論」について解説します。

 

みなさんがバックテスト、最適化をする目的は、つきつめると「儲けたい」ではないでしょうか?

(純粋な知的好奇心や趣味でやっている人がいたらすいません)

つまり、リアルトレーディングで儲ければ良いわけです。

 

マンモス
マンモス

極端に考えるなら、バックテストも最適化結果も関係ないね!

 

何が言いたいかというと、バックテスト結果、最適化結果に”固執”しすぎは良くないということです。

あくまでリアルトレーディングで利益を出すためにしていることであって、バックテスト結果”だけ”良くするのに固執するのは避けたほうが賢明です。

固執しすぎると、複雑な売買ルールだったり、ただの願望で検証をおざなりに済ませてしまうということもあります。

よって、上記の精神的な部分も注意しましょう。

 

まとめ

「カーブフィッティングを防ぐ方法とは?【大損しないための注意点】」のまとめです。

 

・カーブフィッティングとは?
→過去のデータに売買ルールをこじつけ過ぎること
・カーブフィッティングの原因
①過去のデータに対する過剰な最適化
②複雑すぎる売買ルール
③利益を追求し過ぎる
・カーブフィッティングか判断する方法
→リアルトレーディングの結果を確認する
→バックテストで確認する
・カーブフィッティングを防ぐ方法
①シンプルな売買ルールにする
②最適化の損益曲線に注意する
③パラメータのオーバースキャンに注意する
④フォワードテストする
⑤他市場他期間バックテストを実施する
最適化の目的とは?
→リアルトレーディングで儲けること
→バックテスト結果だけを良くすることではない

 

タイトルとURLをコピーしました