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

最小2乗回帰へのシステム最適化についての類推

初回となったこの「The Analogy of System Optimization to Least Squares Regression」、最初から少し(?)難しい統計学の話でさらに私の訳により難解な文章となったため、自分でも正確に理解できた自信がない。
そこで「何を作者が言いたいのか」、「実際には何をすればよいのか」ということを、ここにまとめた。

題名がまずどういった意味なのかよくわからない。
これは「システムを過剰に最適化しているかどうかを統計学の最小2乗回帰法にあてはめて検討する」という意味だろう。

そして本文では、他のトレーディングシステムの作成に関する本やウェブサイトに小さく載っている

自分のトレーディングシステムのルールの数、制限(フィルタ)の数の合計が多いほど、またバックテストでのトレードの回数が少ないほど、システムが過剰に最適化されている可能性が高まる。

ということについて、どうしてそうなのかを統計学をもって具体的に説明している。

さらに

「では、具体的にシステムのルールの数と制限の数の合計がトレード回数よりどれだけ多いと過剰な最適化となるのか?

という当然抱くであろう疑問についての回答を、はっきりと答えている。

この回答は、

数値でのシステムが過剰に最適化されているかどうかの検討の順番

であり、この工程は次の通りである。

1.システムによりバックテストを行う。期間は長ければ長いほど(言い換えるとトレード回数が多いほど)よい。

2.バックテストにより得られたパフォーマンスレポート(TradeStation Performance ReportのTrade Analysis)から、トレード回数(total number of trades)、平均トレード利益(Avg. Trade Net Profit)、標準偏差(1st Std. Deviation of Avg. Trade)の金額を調べる。

3.システムのルールの数、制限(フィルタ)の数を合計する。

4.スチューデントのt分布の値をEXCELのTINV関数を使って計算する。
TINV関数は、TINV(確率、自由度)であり、確率の値を2倍した数値を入れるセル、自由度の値を入れるセル、そしてTINV関数でこれら2つのセルを指定して計算結果を出すためのセルを設定してあげればよい。
そして最初の2つのセルにそれぞれの値を入力すれば、スチューデントのt分布の値が3つめのセルに表示される。
これらはEXCELの使い方なので、詳しくはEXCELにあるヘルプを参照にすることだ。

そして
確率=(100%-信頼度%)÷100% となる。

信頼度は自分で設定し、記事では95%と99%である。
片側検定(統計学専門用語)を使うため、セルにはこの確率の値を2倍した数値を入力する。

自由度=トレード回数 - システムのルールと制限の数の合計
だ。

5.信頼区間CIを計算する。
信頼区間は信頼できる最小の平均トレード利益の値である。
記事ではCI = t * SD/sqrt(N) と書かれてあり、これは

信頼区間CI = スチューデントのt分布の値 × 標準偏差の金額 ÷ トレード回数の平方根(√)

ということだ。

5で求まった計算結果の信頼区間の値がパフォーマンスレポートにある平均トレード利益の値より低ければ、「明らかにそのシステムは過剰に最適化されている」ということができる。

しかし注意しなければならないのは、信頼区間の値が平均トレード利益の値より高いからといって、「明らかにそのシステムは適度に最適化されている」とは言えないことだ。

そして記事の最後で、この評価方法が

「マーケットのプライスの動き方が昔も今も同じそして将来もずっと同じである」、と

いう前提で使われているため、そのようなことがありえないならば、

この評価方法自信の信頼性をあげるためにはいろいろなマーケットの状態(上昇、保合い、下降、そしてそれらのボラティリティが異なるもの)を含んだ長期でそしてなるべく多くのトレード回数のバックテストの結果を使って計算する必要がある、

と言って終わっている。

つまり、システムの「適切な最適化」についての検討は、このシステムの最適化についての評価基準

信頼区間 < 平均トレード

を満たした上で、さらなる検討が必要なのだ。これについては別の記事で紹介する予定である。

前回の「最小2乗回帰へのシステム最適化についての類推」があれば、原文を読まなくても比較的簡単に「自分のシステムが過度の最適化をしているのかを統計学的に調べる」ことができる。

といいたいのだが、
これは、半分はイエスで半分はノーである。

なぜか?

それは実際に自分でやってみればすぐにわかるのだが、工程でつまずくところがある。

「あなたのシステムのルールの数と制限の数の合計を調べる」というところだ。

その数え方でつまずきやすいのである。

原文では2つの異なる長さの移動平均線のクロスによるエントリーとエグジットについて例を挙げて説明している。
この例が手本となるのだが、しかし不足している。あらためて原文の例について見てみる。

短期移動平均線が長期移動平均を上抜いたときロングのエントリーを行い、下抜いたときはショートのエントリーを行うとする。

このときのシステムのロングのエントリーのルールと制限を、原文を基に書き出すと

1.短期移動平均線が長期移動平均線を上抜く
2.短期移動平均線に使われる期間
3.長期移動平均線に使われる期間
4.プライスパターン

となる。

1から3はわかる、しかし4が不明だ。
解釈には2つの可能性があると思う。

ひとつは

「トレンドが上昇している(上昇トレンド)中で今日の終値が昨日の終値より低いときに買う」

と原文にあるため、この「今日の終値が昨日の終値より低いとき」のこと。

もうひとつは

「1.短期移動平均線が長期移動平均線を上抜く」

が「どれだけの数値分上抜くか」ということ。

この後者についてはイージーランゲージで表現しようとすると出てくる疑問で、

if 短期移動平均線 cross above 長期移動平均線 then begin

と書く場合であれば考える必要はないが、そうではなく

if 短期移動平均線 > 長期移動平均線 then begin

と書く場合これは数式であり、次のように書くこともできる

if 短期移動平均線 > 長期移動平均線 + 0 then begin

この0の部分に他の数値を入れることができ、今は0を設定しているということであり、調整する数値である。

しかしおそらくは前者の「今日の終値が昨日の終値より低いとき」だと思う。
作者にはまだ確認をしていない。
不等号で表すよりもcross aboveまたはcross overの表現を使うだろう、と思うからだ。

さらに、この例ではロングとショートのエントリーとエグジットは、エントリーがエグジットとなり、エグジットはエントリーとなる反転システムのため、ルールの数と制限の数を数えるのがとても簡単である。

しかしあなたが自分のシステムを作った場合、エントリーとエグジットのルールと制限がロングとショートそれぞれにあり、さらに条件次第によってはロングからショート、ショートからロングへと反転する、といったケースもありえる。

原文の例ではつねにロングかショートのポジションを持っていることになるが、この例ではポジションをもっていない場合も出てくる。

この例のロングのトレードについて、エントリーの条件・制限をAとB、エグジットの条件をCとDとすると、

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

同様に

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

これだけなら簡単なのだが、さらに反転トレードのための条件があるとすると

ロングでエントリーしている間でもSが成り立てばロングはエグジットされショートでエントリーする。
ショートでエントリーしている間でもEが成り立てばショートはエグジットされロングでエントリーする。

これらは

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

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

と表現を変えることができる。「または」は「or」である。
こうなるとルールと条件の数はどう数えるのだろうか?単純な足し算でいいのだろうか?

ここまで読めば私のいいたい「疑問」についてわかってもらえたかと思う。
そしてこの疑問はどのようなシステムであるかによって簡単でもあり複雑でもある。

そのため文頭で

“「自分のシステムが過度の最適化をしているのかを統計学的に調べる」ことができる。
といいたいのだが、これは、半分はイエスで半分はノーである。“、

と書いたのだ。