仮定を変えると、必要なデータ年数はどう変わるか

記事⑫の表を、自分で置いた仮定で作り直すための計算器。押すボタンは無くて、初期設定のままでも下に答えが出ている。

出るのは必要なデータ年数の概算(合計)になる。 真のSharpeがずっと同じだと仮定して、最後に一度だけ判定するとき、 指定した確率で「効いている」と言えるだけの、データの長さだ。
読み違えやすいので、先に書いておく。

1. 必要な年数を出す ― この仮定なら、何年ぶん要るか

推定値ではなく、仮定する値。短い期間から測ったSharpeを真の値として入れない。決めかねるなら、0.2・0.5・1.0 を順に入れる。バックテストで出たSharpeが線を超えているかを見たいなら「2.」へ
正の整数。捨てた組み合わせ、見なかったことにした期間も数に入る。探索に使っていないデータで判定するなら、そこへ持ち込んだ候補の数(1本だけなら1)。数えていないなら、1 と 100 の両方で出して、答えの幅を見る
効いていないのに「効いている」と言ってしまう確率の上限。小さくするほど基準が厳しくなって、必要な年数が増える。片側というのは、稼ぐ方向にだけ効くかを見る形になる
本当に効いているとき、それを見つけられる確率。80%なら、効いていても5回に1回は見逃す。高くするほど必要な年数が増える

2. 判定の線 ― この長さのデータで、何を超えればよいか

試したパターン数は、上の「1.」の欄の値をそのまま使う

3. 表で見る ― 仮定と試した回数で、どう動くか

列は試したパターン数 k(通り)、行は真のSharpe。中の数字は「必要なデータ年数の概算(合計)(年)」で、整数へ丸めている。上の有意水準と検出力を変えると、この表も変わる。真のSharpeと試したパターン数は表の行と列そのものなので、入力欄の値では表は動かない。

使っている式

必要なSharpe = z(1 − α ÷ k) ÷ √年数

必要な年数   = ( ( z(1 − α ÷ k) + z(検出力) )
                 ÷ 真のSharpe )²

z は標準正規分布の累積分布関数の逆関数で、確率を渡すと、左側の面積がその確率になる位置を返す。α ÷ k がボンフェローニ補正で、k通り試したぶん基準を厳しくする部分になる。 試した全部をまとめて見たときに、どれか1つでもまちがって「効いている」と言ってしまう確率を、この補正が抑える。それは試したものが互いに独立でなくても成り立つ。 ただし互いに似た候補では、実際に必要な基準よりきつくなる。

Sharpeの標準誤差を 1÷√年数 で近似している。日次の損益から年率へ換算したSharpeを想定していて、月次や年次の損益から測ったSharpeでは、真のSharpeが大きいほど必要な年数が増える(iid正規なら標準誤差が √(1+S²÷(2m)) 倍になる。m は1年あたりの観測数。Lo 2002)。実際の損益は正規分布より裾が厚く、日どうしのつながりもあるので、 ずれる向きは一方向とは言えない。z の計算には Acklam の近似を使っている。