システム最適化と最小2乗回帰の共通点

前回、

「ロングとショートのトレードシステムのプログラムに反転(ドテン)する場合を加えた場合、システムのルールと制限の数の合計はそれらを単に合計することで正しいのか?」、

という疑問を出して終わった。

このシステムはわかりやすくすると

ロングのトレード
A & B または E で エントリー。C & Dでエグジット。

ショートのトレード
O & P または S で エントリー。Q & Rでエグジット。

と書くことができた。

問題となっているのは「または(or)」の部分をどう数えるか、ということだった。

ここでトレーディングシステムのロングとショートのトレードを別々のシステムとして考えてみる。
つまりロングのシステムとショートのシステムの計2つということになり、システムの過度の最適化の調査をそれぞれのシステムについて行えばよい。

さらにこの2つのシステムは次のように書きかえることができる。

ロングのトレード
1.A & B で エントリー。C & D または S でエグジット。ただしすでにEでエントリーしている場合はエントリーしない。
または
2.E で エントリー。C & D または S でエグジット。

ショートのトレード
3.O & P で エントリー。Q & R または E でエグジット。ただしすでにSでエントリーしている場合はエントリーしない。
または
4.S で エントリー。Q & R または E でエグジット。

みてわかるように、エントリーの条件に「または」が加わることで、システムは2つから4つへと2倍に増えた、と考えることができる。
よってこれら4つのシステムそれぞれの過度の最適化について調べればよい。

ではエグジットの条件にある「または」についてはどう考えるのか?

トレード回数を考えると、すべてのシステムのトレード回数の合計は、エントリーの条件に「または」をつけることで増えるが、エグジットの条件に「または」をつけてもトレード回数は増えない。
上記2.のロングのトレードで説明すると、すでに行ったトレードの結果をみて判断し2つに分けることができる。

2-1.Eでエントリーした後にC&Dのときにエグジット(ただしSがC&Dより先に成立した場合を除く)、

2-2.Eでエントリーした後にSのときにエグジット(ただしC&DがSより先に成立した場合を除く)。

この方法ではシステムのバックテストを行った後に各トレード結果をエグジットの仕方で2-1と2-2の2つに分け、それぞれを計算し、合計2つのパフォーマンスレポートを手作業で作ることになる。
しかしこれは現実的な方法ではないだろう。

そこで、2つに分ける前の条件

「S で エントリー。Q & R または E でエグジット。」

におけるルールと条件の数の合計は

「S で エントリー。Q & R でエグジット。」のときよりも大きく
「S で エントリー。 E でエグジット。」のときよりも小さい

と仮定すれば、これら合計値の平均を条件の数とすることで近似的に扱えるのではないだろうか。

つまり、

「S で エントリー。Q & R でエグジット。」 のルールと制限の数の合計値
=S,Q,R,パラメータ設定数の合計 A

「S で エントリー。 E でエグジット。」 のルールと制限の数の合計値
=S,E,パラメータ設定数の合計 B

合計の平均値=(A+B)÷2

となる。

以上、システムのルールと制限の数が多くなればなるほど過度の最適化の可能性が高まるだけでなく、今回の「自分のシステムが過度の最適化をしているのかを統計学的に調べる」方法での検討も複雑になる。

上記の例は特別なことではなく、例えば「利益確定のためのストップと損失限定のためのストップ」の2つをシステムの中にルールとして含めることはよくあるわけで、現実としてはこの方法が簡単にできるケースというのは少なそうである。