前回のブログ更新から、既に2ヶ月が過ぎてしまいました。。。
「三日坊主には絶対にするまい」と思って始めたものの、なかなか実際に継続するのは難しいものですね。
単に個人的事情で言い訳になりませんが、急に仕事が忙しくなり、なかなかブログを更新する時間が取れなかった、というのが背景です。ですので今後もしばらくは週1ペース程度でしか更新できないと思いますが、たまにブログを覗きに来ていただければ有難いです。
というわけで、前回どこまでお話したかさえ忘れてしまっている状況でして…えーっと、そうでした!「パラメータを変えて再検証してみたところ、収益性が上がっているようだが、これは本当に収益性が上がったとみてよいのか、それとも単に誤差の範囲内なのか」ってお話をすることになっていたようです(苦笑)。
これを確かめるには、統計学でいうところの「仮説検定」という作業を行います。仮説検定の正確な定義は統計学の書籍をご覧いただくとして、ここでは例を挙げて考えてみることにしましょう。
折角ですので、これまでのブログで紹介してきたデータを使いたいと思います。
4月29日のブログで紹介した、
1. 5日移動平均と25日移動平均がゴールデンクロスしたら、翌日の寄り付きで買い
2. 5日移動平均と25日移動平均がデッドクロスしたら、翌日の寄り付きで売り
3. 買いポジションでザラ場中にデッドクロスが発生したら手仕舞い
4. 売りポジションでザラ場中にゴールデンクロスが発生したら手仕舞い
5. エントリ後25営業日が経過したら、その日の大引けで手仕舞い
という条件で得られた結果
【勝敗】 23,130戦 8,310勝 14,590敗 230分 → 勝率は36.3%
【勝トレード】 平均利益率 9.36%
【負トレード】 平均損失率 5.02%
→平均損益率 0.20%
【指標】 比率ベースのPF(プロフィットファクター) 1.06
というトレード結果に対して、その改善策として5月9日のブログで紹介した
6. 日経平均の25日移動平均の傾きがマイナス、かつ終値が25日移動平均よりも下の場合は、
翌日の買いエントリは行わない。
7. 日経平均の25日移動平均の傾きがプラス、かつ終値が25日移動平均よりも上の場合は、
翌日の売りエントリは行わない。
を条件に加えた場合の結果
【勝敗】 16,946戦 6,259勝 10,527敗 160分 → 勝率は37.3%
【勝ちトレード】 平均利益率 9.69%
【負けトレード】 平均損失率 5.03%
→平均損益率 0.45%
【指標】 比率ベースのPF(プロフィットファクター) 1.15
を例に、この改善が統計学的視点からも「改善した」と言えるかどうかを確認してみましょう。
今回設定する仮説は「日経平均の条件を追加することによって平均損益率が改善した」とします。
この平均損益率ですが、トレードによっては数10%の利益であったり、逆に数10%の損失であったりと、色々な値から構成されています。損益率の分布を取ってみると、下の図のように多くのトレードが平均損益率に近いところに存在し、平均損益率から離れていくにつれ、その発生確率も下がっていくのが分かります。(厳密には移動平均を使ったトレードの場合、極めて高い利益率を示すトレードが一定比率で存在するため、このような綺麗な分布図にはなりません)
このような分布を正規分布と呼び、統計学の根幹をなす考え方の一つです。(正規分布って言葉、高校生の頃に数学の授業で聞いた記憶ありませんか?というわけで、申し訳ありませんが正規分布の話はここでは割愛します)
以降では、平均損益率が正規分布に従うと仮定して話を進めたいと思います。(正規分布に従うとみなしてよいか、いけないかを判定する方法もあるのですが、その話は別の機会にしたいと思います)
仮説検定では、平均損益率以外に、標準偏差と呼ばれる、上図の分布の散らばり具合を示す値も使います。大雑把に言うと、分布がピーク値に集中しているほど標準偏差は小さくなります。標準偏差の計算方法も、申し訳ありませんがここでは割愛します。(割愛ばかりですいません…)
では条件を増やす前と後で、検証結果がどうなったか、見てみましょう。
■条件追加前
【トレード数】 N1 = 23,130 → 統計学的には「標本数(サンプリング数)」
【平均損益率】 E1 = 0.20
【標準偏差】 D1 = 9.61 → Excelの関数を使って計算可能です
■条件追加後
【トレード数】 N2 = 16,946
【平均損益率】 E2 = 0.45
【標準偏差】 D2 = 9.73
ここで検定の精度を95%(統計学用語では「有意水準5%」と呼びます)、つまりこれから出そうとする検定結果が正しい確率を95%とすると、Z = (E2 - E1)/sqrt(D1/N2) の値が 1.96より大きいことが必要となります。ちなみにsqrtとは平方根(Square Root)、つまり√のことで、1.96はここでは決まりきった値と考えてください。(興味のある方は統計学のt分布表、というものを参照してください)
実際に計算してみると Z = 10.50 となり、1,96を超えましたので、最初に仮説として立てた「日経平均の条件を追加することによって平均損益率が改善した」は95%以上の確率で正しい、と言えることになります。
念のため、逆の仮説「日経平均の条件を無くすことで平均損益率が悪くなった」を検証してみます。この場合は、Z = (E1 - E2)/sqrt(D2/N1) の値が -1.96より小さいことが必要となりますが、計算結果は Z = -12.19 ですので、こちらの仮説も正しいことが分かりました。
既にお気づきの方もいらっしゃるかも知れませんが、今回は標本数が非常に多いために Zの値が大きくなり、仮説の正当性が確認できた、ということになります。
例えばトレード数を1/100にすると、Zの値は1/10になりますので、先ほどの Z = 10.50 は Z = 1.05 になってしまい、95%の確率では改善したと言えなくなってしまうのです。
サンプル数が少なすぎるとシミュレーション結果の精度が落ちる、というのはここに理由があるわけです。
本日も最後までお付き合いくださり、ありがとうございました。今回は数式も出てきて眠くなってしまったのではないかと心配です。。。

