オプティマイゼーション機能の功罪~最終回
5.カーブフィッティングの回避
前回の記事の続きです。
「オプティマイゼーション機能の功罪」の最終回です。今回は、さすがに私の独断が専行するかも知れませんが、何卒ご容赦ください。
(1)パラメーターの数の問題
一般によく言われることとして、カーブフィッティングに陥らないためには、システムのパラメーターの数を少なくすべきである、というのがあります。
しかし、私は、これについては疑問視しております。
たとえば、パラメーターが1つしかないシステムがあったとします。その1つのパラメーターも当然最適化をする以上、そこから既にカーブフィッティングへの傾倒が始まっているからです。つまり、カーブフィッティングの問題とパラメーターの数の問題とは、そもそも別次元の問題であって、後者が前者の本質的な回避策につながるとは言いがたいと考えています。
とくにフィルターについては、カーブフィッティングを回避するために極力設定しない方がよいとする見解が多いようです。しかし、たとえば、「毎週水曜日はトレードを休業する」とか「7の日はロット数を2倍にする」というような、パチンコ屋の広告みたいなロジックならば、設定しない方がいいでしょうが、たとえば、低ボラ対策としてATRによるフィルターを設定するというような、ある程度合理的なものであれば、積極的に設定するのもアリかなと思っています。
もっとも、カーブフィッティングに陥っていないシステムは、比較的にシンプルなものが多いのは事実で、シンプルなシステムは結果としてパラメーターが少ない、ということは言えるかも知れません。
(2)検証期間の問題
これも一般的によく言われることですが、カーブフィッティングに陥らないためには、バックテストの期間を長くとるべきである、というのがあります。
しかし、これも問題の本質からそれているように思います。
そもそもカーブフィッティングの問題は、「過去の値動きと未来の値動きは異なる」ということを前提としているわけで、過去の値動きを、10年、20年、…と長期に渡って調べ上げたからといって、この前提を覆せるわけではないと考えるからです。
同様に、検証のサンプル数についても、多いからといってカーブフィッティング回避につながるとは、私は考えておりません。
(3)フォワードテストについて
フォワードテスト自体については、終了した時点で再度最適化をするのであれば、それはただのバックテストに過ぎないことから、否定的にとらえる見解も多いようです。
しかし、カーブフィッティングによる失敗を事前に回避する手段としては、フォワードテストは非常に有効であると私は考えています。
あくまでも私の経験からですが、カーブフィッティングに陥っているシステムは、フォワードテスト開始直後からすぐに崩れ始めることが多いことから、私はフォワードテストを積極的に活用するようにしています。
(3)相関型システム
移動平均線やRSIのように、過去の一定期間のバーを使って、何らかの計算式を立ててシグナルを発生させる、いわゆるテクニカル指標を駆使したシステム(これを「テク指型システム」と呼ぶことにします)とは異なり、市場間もしくは銘柄間における相関関係に着目したシステム(これを「相関型システム」と呼ぶことにします)があります。
典型例は、アービトラージのようなサヤ取りです。FXの世界でサヤ取りは無意味だとする見解もありますが、指数先物などの世界で、たとえば、日経225先物とTOPIX先物との強い相関性に着目して利ザヤを狙う手法は有名です。また、NYダウとUSD/JPYとの相関性に着目したシステムの研究も多くなされています。このへんの研究については、前にも紹介させていただいたPhaiさんのブログで詳しく紹介されていますので、興味のある方はのぞいて見てください。
こういった相関型システムは、パラメーターのみに依存しないため、カーブフィッティングに陥る危険性は少ないと思います。
(4)スキュー型システム
相場に発生する何らかのスキュー(skew「歪み」)に着目したシステム(これを「スキュー型システム」と呼ぶことにします)もあります。
たとえば、月曜日の朝に発生する「窓開け」を狙うウップス手法や、日本時間の午前中の仲値の設定時間を狙う手法がそうです。
こういったスキュー型システムも、パラメーターのみに依存しないため、カーブフィッティングに陥る危険性は少ないと思います。
(5)システムのVL化やVST化
VL(Variable Length)化というのは、標準偏差やATRなどを用い、その時々の相場の状況に合わせて、指標の計算期間を自動変動式にする手法です。また、VST(Variable Stoploss Takeprofit)化というのは、同様のやり方で、(逆)指値の幅を自動変動式にする手法です。
こういった手法は、パラメーターの最適値を固定化せずに変動式にすることによってカーブフィッティングを回避しようとするアイディアで、「最適化」に対して「適応化」と呼ばれるそうですが、私のシステムにも採用されているものがあります。
システムのVL化やVST化についての記事は、別の機会に詳しくアップしたいと考えています。
(6)パラメーターの定期的変更
VL化やVST化を採用しない場合、最適化を定期的に行って、パラメーターを設定し直すというのもカーブフィッティングの回避につながるかも知れません。
ただし、前述のように、カーブフィッティングに陥ったシステムは、たいていは、フォワードテスト直後からすぐに崩れはじめることと、変更のタイミングをルール化するのが困難なことから、このようなアイディアは、今後の研究課題となりそうです。
パラメーターの定期的変更というアイディアについては、ぜひ、読者の皆様からご意見をいただけるとありがたいと思います。
(7)オプティマイゼーション機能の積極的活用
メタトレーダーなどのオプティマイゼーション機能を駆使すればするほど、カーブフィッティングに陥る危険性が高くなることは、前回の記事でも述べた通りです。しかし、オプティマイゼーション機能を積極的に活用することによって、逆に、カーブフィッティングを回避する方法もあります。
以下、少し詳しく解説します。
まず前提として、メタトレーダーのストラテジーテスターには、ちょっとだけ便利な機能があり、それを紹介します。
オプティマイゼーション機能を発動した場合、ストラテジーテスター画面下の「Optimization Results」や「Optimization Graph」には、通常、PF(プロフィットファクター)が1.0以上のパラメーター候補(これを「優良候補」と呼ぶことにします)のみが表示されます。
ところが、Expert properties→optimizationと入っていくと、ここで、優良候補の中でも、とくに口座残高やドローダウンが優秀なパラメーター候補(これを「最優良候補」と呼ぶことにします)のみを表示させるように設定することができます(これを「最優良候補の絞込み機能」と呼ぶことにします)。
この最優良候補の絞込み機能を使って、RSIを使用した逆張りシステムを最適化してみました。条件として、口座残高が検証期間で1.2倍以上になった候補のみをセレクトしました。ところが、残念ながら、最優良候補が一つもありませんでした。
そこで、最優良候補の絞込み機能を使わずに、通常の方法によって、最適化し直したところ、次のような結果になりました。
なんとか、かろうじて優良候補だけは拾うことができました。
次に、あるトレンドフォロー系のシステムを最優良候補の絞込み機能を使って最適化したところ、次のような結果になりました。
上記2つのOptimization Graphをよく見比べてください。
RSIの逆張りシステムでは、優良候補が非常に少なく、その数はわずか100にも満たないのに対して、トレンドフォロー系システムの場合は、最優良候補に絞っても、その数は優に3000を超えています。
これは一体何を意味しているのでしょうか。
RSIの逆張りシステムでは、たとえ、Optimization Graphで一番マシな赤丸の候補を選択したとしても、優良候補が少ないことから、パラメーターが少し変わっただけで利益を出せなくなってしまうのに対して、トレンドフォロー系システムの場合には、(最)優良候補が多いことから、多少パラメーターが変わってもきちんと利益を出せることを意味しています。つまり、言い換えれば、オプティマイゼーション機能を発動した際に、(最)優良候補の多いシステムは多少値動きの仕方が変わっても、それなりにうまく対応して利益を出せる可能性があるのに対して、(最)優良候補の少ないシステムは値動きの仕方がわずかに変化しただけで未来の相場にまったく対応できなくなってしまうということです。
したがって、オプティマイゼーション機能を発動させた場合に、(最)優良候補の数が多いシステムであれば、カーブフィッティングを避けられる可能性が高いのではないかと私は考えています。
ちなみに、このトレンドフォロー系のシステムの検証は以下の通りでした。
赤丸の部分で、バックテストからフォワードテストへ切り替えました。
なんとか、カーブフィッティングを避けることができたのではないでしょうか。
もう寝ます。
応援よろしくお願いします。
↓
にほんブログ村
前回の記事の続きです。
「オプティマイゼーション機能の功罪」の最終回です。今回は、さすがに私の独断が専行するかも知れませんが、何卒ご容赦ください。
(1)パラメーターの数の問題
一般によく言われることとして、カーブフィッティングに陥らないためには、システムのパラメーターの数を少なくすべきである、というのがあります。
しかし、私は、これについては疑問視しております。
たとえば、パラメーターが1つしかないシステムがあったとします。その1つのパラメーターも当然最適化をする以上、そこから既にカーブフィッティングへの傾倒が始まっているからです。つまり、カーブフィッティングの問題とパラメーターの数の問題とは、そもそも別次元の問題であって、後者が前者の本質的な回避策につながるとは言いがたいと考えています。
とくにフィルターについては、カーブフィッティングを回避するために極力設定しない方がよいとする見解が多いようです。しかし、たとえば、「毎週水曜日はトレードを休業する」とか「7の日はロット数を2倍にする」というような、パチンコ屋の広告みたいなロジックならば、設定しない方がいいでしょうが、たとえば、低ボラ対策としてATRによるフィルターを設定するというような、ある程度合理的なものであれば、積極的に設定するのもアリかなと思っています。
もっとも、カーブフィッティングに陥っていないシステムは、比較的にシンプルなものが多いのは事実で、シンプルなシステムは結果としてパラメーターが少ない、ということは言えるかも知れません。
(2)検証期間の問題
これも一般的によく言われることですが、カーブフィッティングに陥らないためには、バックテストの期間を長くとるべきである、というのがあります。
しかし、これも問題の本質からそれているように思います。
そもそもカーブフィッティングの問題は、「過去の値動きと未来の値動きは異なる」ということを前提としているわけで、過去の値動きを、10年、20年、…と長期に渡って調べ上げたからといって、この前提を覆せるわけではないと考えるからです。
同様に、検証のサンプル数についても、多いからといってカーブフィッティング回避につながるとは、私は考えておりません。
(3)フォワードテストについて
フォワードテスト自体については、終了した時点で再度最適化をするのであれば、それはただのバックテストに過ぎないことから、否定的にとらえる見解も多いようです。
しかし、カーブフィッティングによる失敗を事前に回避する手段としては、フォワードテストは非常に有効であると私は考えています。
あくまでも私の経験からですが、カーブフィッティングに陥っているシステムは、フォワードテスト開始直後からすぐに崩れ始めることが多いことから、私はフォワードテストを積極的に活用するようにしています。
(3)相関型システム
移動平均線やRSIのように、過去の一定期間のバーを使って、何らかの計算式を立ててシグナルを発生させる、いわゆるテクニカル指標を駆使したシステム(これを「テク指型システム」と呼ぶことにします)とは異なり、市場間もしくは銘柄間における相関関係に着目したシステム(これを「相関型システム」と呼ぶことにします)があります。
典型例は、アービトラージのようなサヤ取りです。FXの世界でサヤ取りは無意味だとする見解もありますが、指数先物などの世界で、たとえば、日経225先物とTOPIX先物との強い相関性に着目して利ザヤを狙う手法は有名です。また、NYダウとUSD/JPYとの相関性に着目したシステムの研究も多くなされています。このへんの研究については、前にも紹介させていただいたPhaiさんのブログで詳しく紹介されていますので、興味のある方はのぞいて見てください。
こういった相関型システムは、パラメーターのみに依存しないため、カーブフィッティングに陥る危険性は少ないと思います。
(4)スキュー型システム
相場に発生する何らかのスキュー(skew「歪み」)に着目したシステム(これを「スキュー型システム」と呼ぶことにします)もあります。
たとえば、月曜日の朝に発生する「窓開け」を狙うウップス手法や、日本時間の午前中の仲値の設定時間を狙う手法がそうです。
こういったスキュー型システムも、パラメーターのみに依存しないため、カーブフィッティングに陥る危険性は少ないと思います。
(5)システムのVL化やVST化
VL(Variable Length)化というのは、標準偏差やATRなどを用い、その時々の相場の状況に合わせて、指標の計算期間を自動変動式にする手法です。また、VST(Variable Stoploss Takeprofit)化というのは、同様のやり方で、(逆)指値の幅を自動変動式にする手法です。
こういった手法は、パラメーターの最適値を固定化せずに変動式にすることによってカーブフィッティングを回避しようとするアイディアで、「最適化」に対して「適応化」と呼ばれるそうですが、私のシステムにも採用されているものがあります。
システムのVL化やVST化についての記事は、別の機会に詳しくアップしたいと考えています。
(6)パラメーターの定期的変更
VL化やVST化を採用しない場合、最適化を定期的に行って、パラメーターを設定し直すというのもカーブフィッティングの回避につながるかも知れません。
ただし、前述のように、カーブフィッティングに陥ったシステムは、たいていは、フォワードテスト直後からすぐに崩れはじめることと、変更のタイミングをルール化するのが困難なことから、このようなアイディアは、今後の研究課題となりそうです。
パラメーターの定期的変更というアイディアについては、ぜひ、読者の皆様からご意見をいただけるとありがたいと思います。
(7)オプティマイゼーション機能の積極的活用
メタトレーダーなどのオプティマイゼーション機能を駆使すればするほど、カーブフィッティングに陥る危険性が高くなることは、前回の記事でも述べた通りです。しかし、オプティマイゼーション機能を積極的に活用することによって、逆に、カーブフィッティングを回避する方法もあります。
以下、少し詳しく解説します。
まず前提として、メタトレーダーのストラテジーテスターには、ちょっとだけ便利な機能があり、それを紹介します。
オプティマイゼーション機能を発動した場合、ストラテジーテスター画面下の「Optimization Results」や「Optimization Graph」には、通常、PF(プロフィットファクター)が1.0以上のパラメーター候補(これを「優良候補」と呼ぶことにします)のみが表示されます。
ところが、Expert properties→optimizationと入っていくと、ここで、優良候補の中でも、とくに口座残高やドローダウンが優秀なパラメーター候補(これを「最優良候補」と呼ぶことにします)のみを表示させるように設定することができます(これを「最優良候補の絞込み機能」と呼ぶことにします)。
この最優良候補の絞込み機能を使って、RSIを使用した逆張りシステムを最適化してみました。条件として、口座残高が検証期間で1.2倍以上になった候補のみをセレクトしました。ところが、残念ながら、最優良候補が一つもありませんでした。
そこで、最優良候補の絞込み機能を使わずに、通常の方法によって、最適化し直したところ、次のような結果になりました。
なんとか、かろうじて優良候補だけは拾うことができました。
次に、あるトレンドフォロー系のシステムを最優良候補の絞込み機能を使って最適化したところ、次のような結果になりました。
上記2つのOptimization Graphをよく見比べてください。
RSIの逆張りシステムでは、優良候補が非常に少なく、その数はわずか100にも満たないのに対して、トレンドフォロー系システムの場合は、最優良候補に絞っても、その数は優に3000を超えています。
これは一体何を意味しているのでしょうか。
RSIの逆張りシステムでは、たとえ、Optimization Graphで一番マシな赤丸の候補を選択したとしても、優良候補が少ないことから、パラメーターが少し変わっただけで利益を出せなくなってしまうのに対して、トレンドフォロー系システムの場合には、(最)優良候補が多いことから、多少パラメーターが変わってもきちんと利益を出せることを意味しています。つまり、言い換えれば、オプティマイゼーション機能を発動した際に、(最)優良候補の多いシステムは多少値動きの仕方が変わっても、それなりにうまく対応して利益を出せる可能性があるのに対して、(最)優良候補の少ないシステムは値動きの仕方がわずかに変化しただけで未来の相場にまったく対応できなくなってしまうということです。
したがって、オプティマイゼーション機能を発動させた場合に、(最)優良候補の数が多いシステムであれば、カーブフィッティングを避けられる可能性が高いのではないかと私は考えています。
ちなみに、このトレンドフォロー系のシステムの検証は以下の通りでした。
赤丸の部分で、バックテストからフォワードテストへ切り替えました。
なんとか、カーブフィッティングを避けることができたのではないでしょうか。
もう寝ます。
応援よろしくお願いします。
↓
にほんブログ村
by xchsshzo
| 2011-05-26 01:53
| 売買ロジック