株価の予測は当たりやすい時と当たりにくい時がある
stockedge.jpの株価予測に面白い性質があるので紹介する。
続きを読むRのrugarchで株価のボラティリティを予測する
クオンツ達の間では、株価の予測は難しいが株価のボラティリティ(値動きの激しさ)を予測することは比較的簡単だとよく言われている。
この記事では実際にRのrugarchパッケージを使って株価のボラティリティ予測を試してみる。
ボラティリティ予測に使うのはexponential GARCH(以下eGARCH)というモデル。以下13.2 Extensions of the GARCH Modelより引用(意訳してます)。
を平均0分散1の確率変数のiid系列として、一般的なexponential GARCHモデルは以下の数式で表される。*1
なぜこのeGARCHを使うのかというと、通常のGARCHでは株価のボラティリティをモデル化するのに問題があるため。EGARCHモデルについてより引用する。
株式市場では、株価が上がった日の翌日よりも下がった日の翌日の方がボラティリティがより上昇する傾向があることが古くから知られており,GARCHモデルではこうしたボラティリティ変動の非対称性 を捉えられない。
この点を改良したのがeGARCHモデルというわけである。
まずは、本当にGARCHよりeGARCHの方が良いのかどうか確かめるため、S&P500の日足データでAICを比較してみることにする。rugarchではugarchfit関数でパラメータの当てはめが、infocriteria関数で各種情報量基準の算出ができる。
実行結果を見ると、確かにeGARCHの方がAICが低くなっていることが確認できる。
それでは、このeGARCHモデルを使って実際にボラティリティの予測をやってみよう。ugarchroll関数を使うと一日先の予測を逐次的に行うことができる。
まず予測されたボラティリティをプロットしてみる。
そしてS&P500のリターン。
S&P500のリターンの幅が大きくなっている時期にボラティリティが大きくなると予測されているので、上手く予測できているようだ。
ボラティリティの予測でアルファが生み出せるか?
そもそもなぜボラティリティの予測をやろうと思ったかというと、Tony Cooperという人の「ボラティリティの予測でアルファ(市場平均を超えるリターン)を生み出せるぜ!」という論文を読んだのがきっかけ。
Alpha Generation and Risk Smoothing Using Managed Volatility by Tony Cooper :: SSRN
この論文で提案されているストラテジーをざっくり説明すると、株では信用取引でレバレッジが掛けられるわけなのだけれど、最適なレバレッジ比率kがc / σ^2(cは適当な定数)で求められるので、eGARCHでσ^2を予測しながらkを変えていく(レバレッジ比率がkになるように株を売買する)と市場平均を上回るリターンが得られる、というもの。しかもレバレッジを使ったのにリスクは上がらないらしい。Tony CooperはこのストラテジーをOptimal Volatility Strategy(以下OVS)と名付けている。ちなみにOVS以外にも複数のストラテジーが提案されているので興味がある方は論文を参照されたし。
しかしボラティリティの予測だけでアルファが生み出せるというのは不思議な感じがする。この論文によると、どうやらボラティリティとリターンに相関があるからアルファが生み出せるということらしい。
それでは、eGARCHで予測されたボラティリティを使って、OVSで実際にbuy&hold以上のリターンが出せるのか実験してみよう。
結果を見ると、S&P500の最後の500日間のデータに限っては、buy&holdよりもOVSの方が高いリターンとなることが確認できる。(ただし手数料は考慮に入れていない)
とはいえこの結果は偶々運が良かっただけの可能性もあるので、本当にOVSが有効なストラテジーかどうか確かめるにはもっと多くのデータセットに対して適用し、検証する必要があるだろう。
なお論文中にも書いてあることなのだが、このストラテジーは、やることは基本的にレバレッジの調整だけなので他のストラテジーと組み合わせやすいという利点がある。例えばどのタイミングで株を買うかはモメンタム戦略で決め、具体的なレバレッジ比率はOVSで決める、といった戦略が可能だ。
*1:訳注:ただしこの数式は分散の自己回帰の項を入れていないのであまりeGARCHの一般的な書き方ではない。
stockedge.jpのサイト公開以後の勝率を発表します
推奨銘柄無料公開ブログにて公開している予測情報の、サイト公開以後から2015年5月1日現在に至る期間の勝敗を集計する。
なお、サイト公開以後の予測だけを集計している(完全なフォワードテストとなっている)ので、この集計結果に後知恵バイアスが入る余地はない。
勝率 | 勝ち回数 | 負け回数 | 信頼度による条件 |
---|---|---|---|
54.19% | 2733 | 2310 | なし |
60.81% | 748 | 482 | 60以上 |
62.21% | 135 | 82 | 70以上 |
63.63% | 21 | 12 | 80以上 |
もし私の集計結果が信用ならない場合は、当サイトの予測情報をCSVファイルに変換するScalaスクリプトを公開しますのスクリプトなどを用いて予測情報をスクレイピングし、自分で集計してほしい。
自分で集計を行うという方のため、以下に勝率を計算する際の細々したことを書いておく。
予測日の定義
予測を公開した日のこと。ただし、寄り付きが行われる翌日の午前9時になるまでは前日に含める扱いとする。
例えば、この記事は2015年5月1日の午前7時4分に公開されている。
2015-04-30の株価予測 山加電業、四電工、日東富士製粉など 推奨銘柄無料公開ブログ
しかし、寄り付きが行われる午前9時より前に公開されているので、この記事に書かれている予測の予測日は2015年4月30日とする。
予測の勝敗判定方法
上昇予測の場合、もし 予測の終了日の終値 - 予測日の翌営業日の初値 > 0 であるなら勝ちとする。そうでないなら負けとする。
下降予測の場合、もし 予測の終了日の終値 - 予測日の翌営業日の初値 < 0 であるなら勝ちとする。そうでないなら負けとする。
なお、予測日の翌営業日に株に値がついていなかった場合、その日以降最初に値がついた日の初値で売買するものとする。
また、予測の終了日に株に値がついていなかった場合、その日以降最初に値がついた日の終値で売買するものとする。
引き分けの扱いについて
予測日の翌営業日の初値と予測の終了日の終値が同じ価格であった場合を引き分けと呼ぶ。
引き分けは負けとして扱いカウントする。なぜなら手数料の分は負けているため。