はじめに
EAを開発・修正していると、カーブフィッティング(過剰最適化)というフレーズを見たり聞いたりします。日本語に直訳すると「曲線あてはめ」でどういう事?って感じです。
では、カーブフィッティングとは何かについて私のEA開発経験を踏まえながら解説していきます。
カーブフィッティングとは
まず、カーブフィッティングとはEAをテストデータ(ヒストリカルデータ)にどんどん当てはめて過去データに対して成績を上げていくといった行為になります。
カーブフィッティングが駄目だと言われている理由は、
過去の値動きに合わせこみすぎることで今後(未来)の値動きに対応できなくなる
といった事象が発生するためです。過去の値動きに合わせこみすぎる?一体どういった事が考えられるでしょうか。
まず思いつくのは・・・
①根拠の無い過去の結果で最適化する
極端に言えば、2010年10月1日は上がっているからロングエントリーしかしないといったような最適化の仕方です。この例は非常に極端ですが、要は日付でロングやショートを組み替えたり、負けている月だから逆のエントリーにするといったような、過去の結果が既にあってそれに合わ込むようにトレード手法を構成しプロフィットファクターを良く見せるような形です。
自分用にEAを作っている方であればこんな最適化はしないと思います。日付や月単位でのピンポイント修正は、カーブフィッティングになりやすいという認識です。
例外
日付で最適化の例外として、私のEAは毎年12月24日は一切新規エントリーしないという処理を入れています。一見この処理も、先に挙げた例と同じ悪意のある合わせこみのようですが、私個人的には根拠があります。
根拠は、裁量トレード時代12月24日(クリスマス休暇)のトレードは相場の流動性が低く、全然勝てなかったからです。なので12月24日はEAでもトレードしないようにしています。
②一見根拠があるが実は根拠が無い手法で最適化する
この内容は、結構グレーゾーンだと思っています。根拠が無いというのは結果論であってもしかしたら自分でも気づいていない根拠が有る可能性があるからです。
例えば、
『移動平均線を63と156の組み合わせでゴールデンクロスとデッドクロスをエントリー トリガーに加えるとPFがめちゃくちゃ上がった!でもこの63と156っていう移動平均線の数値はテキトウ!』
『前回ロングで負けた場合、すぐショートエントリーしたらPFがめちゃくちゃ上がった!』
といったような一見根拠が無い事かもしれませんが、もしかしたらすごく期待値の高いトレードである可能性も0ではありません。
フォワードテストをせずに、カーブフィッティングかどうかを見抜く方法としては、テクニカルの数値等であれば、バックテストの最適化機能で確認していき上記の例であれば移動平均線を62や64にした途端マイナスになった!という場合、移動平均線の63はカーブフィッティングという可能性が高いという認識です。
カーブフィッティングを回避していくために
EAを開発・修正するにあたり、このカーブフィッティングになっていないか?と意識する事が大切だと思います。
それでも、自分で意図していなくてもカーブフィッティング寄りの処理や設定をEAに対して入れ込んでしまう事はあると思います。
そこで、カーブフィッティングにならないような対策を取っていく必要があります。
フォワードテストをする
一番確実で王道なのはフォワードテストをしっかりとして、ちゃんと思った通りに利益が出ていくかを確認しるのがBESTだと思います。
ただし、フォワードテストばかりに頼っていても利益が出ません。また、フォワードテスト中にEAを直したい部分が出てきて直したとします。しかも結構派手にがっつり直したとします。
この場合、正しいテストとしてはフォワードテストをまた1からやり直す必要があります。
ですので私の考えとしては、フォワードテストは動作確認のみでトレード内容についてはバックテスト側でできるだけ見てしまいたいという考えです。
※ただし、自作じゃない場合はフォワードテストが最重要だと思います!
バックテストする(できるだけ長い期間で)
バックテストの際、期間はできるだけ長くするのが良いと思います。期間が長いとそれだけテストパターンも多くなるのでカーブフィッティングになりにくくなります。
殆どのヒストリカルデータ(FXDD等)であれば、ドル円だと2005年1月10日からバックテストができるため、2005年1月10日~現在日まででテストするのが最も良いのではないかと思います。
※私はバックテストする際、常に2005年1月10日~現在日で行っています
バックテストする(色んな種類のヒストリカルデータで)
バックテストの際、ヒストリカルデータはできるだけ複数で見た方がいいと思います。
私の場合、FXDDだとプロフィットファクターは1.4、メタクオーツだと1.6、アルパリだと1.5、デューカスコピーだと1.4みたいな感じでわりとばらつきがありました。
各社ヒストリカルデータは微妙に異なるため、どこのヒストリカルデータでも利益が出るのはある意味カーブフィッティングになっていない面でプラス要素だと思います。
バックテストする(スプレッドを変えて)
これは割とお手軽な確認方法になります。
バックテストの際、スプレッドを普段利用しているものから極端に大きくしたり小さくしたりしてバックテストを行います。そうする事でAsk,Bid値に誤差が生じるので、極端なカーブフィッティングの場合は本来EAで稼げていた額からスプレッド差をはるかに超えるマイナスになったりします。
スプレッドを極端に大きくしたにも関わらず、スプレッドを広げた分プラスアルファぐらいのマイナスにしかならない場合はカーブフィッティングになっていない面でプラス要素だと思います。
バックテストする(ビジュアルモードで)
これはThe・チカラ業という感じですが、結構効果があると思います。
ビジュアルモードでの確認としては、自分のEAの動作をとにかく1トレード毎に確認していきます。そうすることで、何でここでエントリーしているんだろう・何でここで決済しているんだろうという謎トレードを発見する事ができるので、そのトレードについて調査及び必要であれば修正を行っていきます。
私の場合、15分足で動かすEAという事もあり直近2年分ぐらいのトレードは全てビジュアルモードで確認しています。※1分足とかだったら2年分も見るのめちゃくちゃ大変ですが・・・
あと、ビジュアルモードで確認するポイントとして一つ大切な事があります。
それは、
負けトレードを受け入れるのはカーブフィッティングをしない上で非常に重要だと思っています。どんなトレードでも勝ちトレードになってしまうような修正ではなく、『このトレードは客観的にみても負けて仕方ないな』と割り切る事も重要だと思います。
どんなトレードも勝ちトレードに結び付ける修正を行っていくと、それこそカーブフィッティングになってしまうと思いますので。
バックテストする(ナンピンはせずに)
ナンピンをするEAの場合、負けトレードであっても強引に引き分けや勝ちに持って行く事ができる場合があるため、本当に勝てているのかグラフに現れずらい状況になります。
ですので、たとえナンピンするEAであったとしても、ナンピンしない状態でバックテストできるのであれば、ナンピンしない設定でバックテストする方がカーブフィッティングかどうかは見えやすくなると思います。
※ナンピンする事で力を発揮するタイプのEAもあると思うので一概には言えませんが、ナンピン無しでも勝てるEAであれば文句無しですね!
さいごに
以上が、『カーブフィッティングについての考え方』となります。
カーブフィッティングは割と曖昧な定義だと思います。「あ、これカーブフィッティングだ」って中々分からないかもしれません。
私のEAもカーブフィッティングしていないか?と問われたら100%「していない」とは言えません。どこかでカーブフィッティングはしていると思います。
ただ、しっかりとバックテストを行い、できるだけ根拠のあるトレードを行うEAを開発し運用していくことで、リアルタイム相場に順応できるEAを作っていけたらと思っています。
※ EAのサンプルソースを一覧表にまとめました
※オンラインレッスンやってます
コメント