任意の共分散行列に従う正規乱数の生成

概要

  • 任意の共分散行列に従う正規乱数の生成
  • 共分散行列の固有値と固有ベクトルから求められる
  • pythonで乱数が生成されることを確認する

数式

線形代数のおさらいという感じですが…(― ―)
各要素が実数の対称行列\( A\) (n行n列)は
$$
A = U \cdot \Sigma \cdot U^T
$$
と対角化可能(diasonalisable)である。ただし\(U\)は各列が固有ベクトル、\(\Sigma\)は対角行列で対角要素が固有値。
このとき\(R\)を、各要素がiid標準正規分布に従う1行n列のベクトルとした場合、
$$
R \cdot \Sigma^{1/2} \cdot U^T \sim N \left( 0, A \right)
$$
となる。

pythonで確認

データの用意

今回はSP500, EURO STOXX 50, FTSEの日次リターンの共分散行列を使用します。オリジナルデータはこんな感じ↓
original_data

元の共分散行列、相関行列はこんな感じ↓
original_cov

共分散行列に従うサンプルの生成

lo_returnという変数に日次変数が格納されていると仮定しています。

correlated_sampleという変数に、もとの共分散行列に従う(とされる)サンプルが格納されています。実際に確認したのが以下。どうやら近いっぽい。
sample_cov

ちなみに生成されたサンプルは以下のような感じ
sample_data

Time-series momentumに関するまとめ

概要

  • Time-series momentumおよびMomentum全般に関するまとめ
  • 前回作成したロングオンリー系列をもとにTime-series momentumのバックテストを行なう

1. CTA

Automated Hedge Funds Make Millions in January’s Market Selloff – WSJ
The Quants Are Taking Over Wall Street

ここ数年(?)ですが、コンピュータードリブンの投資意思決定を行なうファンドがにわかに注目を集めています。その中でも特にヘッドラインを占めるのが俗にCTA(Commodity Trading Advisers)と呼ばれるヘッジファンドのグループではないでしょうか。CTAは、名前にこそCommodityとありますが、投資対象をコモディティに限定しているわけではなく、流動性の高い資産であれば何でも取引の対象とします。(個別株式、株式指数先物、金利先物、国債先物、金利スワップ、CDS、為替(フォワード)、コモディティ先物、オプションなどなど)

そんなCTAが用いる投資手法は、大まかに言えば、コンピューターを用いて各マーケットのトレンドを検知し、それをもとにロング・ショートのポジションを構築するMomentumと呼ばれるものです。このような戦略は、トレンドが発生しているときに収益が期待できるため、株のセルオフ時など、通常の資産クラスが苦戦する環境で、特に大きな収益を上げる傾向にあります。最近の例では、上述のリンクにもあるように、2016年1月のセルオフですかね。このときもCTAは大きなプラスのリターンを上げることに成功しています。

今回の記事ではいつものようなチラシの裏に書いたような適当な内容ではなく、自分の頭を整理する意味も含めて、Momentum戦略、特にTime-series momentumと呼ばれる投資戦略についてまとめてみたいと思います。

2. Momentum

2.1. 基本的な考え方

先程のセクションでも少し触れましたが、Momentumの考え方は非常にシンプルで、「直近価格が上がっているものを買い、直近価格が下がっているものを売る」というものです。価格経路の継続性にベットしているので、モメンタム、というわけですね。したがって、この考え方は、「いかにしてそのトレンドを検知するか」という問題へと帰着します。そこは各職人の腕の見せ所です。

さて、仮にトレンドを検知できる方法が見つかっているとして、実際に投資へと落とし込む場合、大きく2つの方法があります。1つ目がCross section momentumと呼ばれる方法で、2つ目が本記事のお題でもあるTime-series momentumとなります。

2.2. Cross section momentum

Cross section momentumはファーマ・フレンチを代表とする、株式ポートフォリオの構築方法に着想を得たものです。つまり、よくあるやり方としては株式銘柄ユニバースを、トレンドをもとに10分割し、トップ10%をロングし、ボトム10%をショートして額面ニュートラルにするという感じでしょうか(ベータニュートラルや他の方法も考えられますがそれはまた別のお話)。

このやり方は株式に限った話ではなく、例えばコモディティ先物18銘柄に関して、トレンドをもとに3分割し、上位6銘柄をロングし、下位6銘柄をショートする、というような形で他の資産クラスにも適用されることがあります。

2.3. Time-series momentum

Cross section momentumが同一ユニバース間の相対的なトレンドを元にポジションを構築するのに対し、Time-series momentumは名前の通り、自分自身の時系列データをもとに当該銘柄のポジションを決定します。

例えばある株式指数先物のt時点でのポジションを決定する場合、t時点から見て過去m期間のトレンドを元に今後n期間のポジションを決定する、というような具合です。各投資対象のポジションが各々独立に決定されるため、仮に全てのマーケットがブル相場だった場合には全ての銘柄をロングし得ます。一方でCross section momentumはあくまで相対的なトレンドをベースに、常にロング・ショートを行なうため、あるt時点において必ず何かしらをロングし、何かしらをショートしています。

3. 既存研究

Time-series momentumはCTAで実務的に用いられているだけではなく、アカデミックの世界でも活発な研究対象として扱われています。Momentum研究の草分けとなったのはJegadeesh (1990)、Jegadeesh and Titman (1993)で、米国株式を対象に比較的長期間(12ヶ月)のスパンでのMomentum効果を報告しています。

Jegadeeshを始めとする初期の研究はCross section momentumが主流でしたが、その後Time-series momentumに関しても研究が行なわれるようになります。その中でも外せないのがMoskowitz et al. (2012), Asness et al. (2013)でしょうか(この両者は現在AQRと呼ばれるヘッジファンドで働いているため、存分にポジショントークが含まれているかとは思いますが)。彼らは様々な資産クラスの先物を対象に、Time-series momenutm効果の存在を報告しており、その要因として先物リターン系列に対する正の自己共分散(positive auto-covariance)を挙げています。

また、Moskowitz et al. (2012)はTime-series momentumに対するパフォーマンスを計測するだけではなく、そのリターンが「payoffs similar to an option straddle on the market」のような形になるということにも言及しています。前述しましたが、Momentumはマーケットにトレンドが発生している期間に、特に大きな収益が期待できるため、結果としてオプションのストラドル戦略のようなペイオフになるという考え方ですね。

近年では、そのTime-series momentumに対するリターンの分布特性にも注目が集まっており、例えばRichard (2013)ではMomentumの実装方法と、リターンの3次モーメント(歪度 or スキューネス)に関する関係性を見ています。この研究では、仮に資産価格のリターン分布が対象なiid過程であったとしても、Momentumにより正のスキューネスが獲得できるということを報告しています。Dao et al. (2016)では一般的なMomentum戦略に従うと、最終的なリターンは比較的長期のリターンに対するガンマロングのような形になると述べています(分散に対して正のエクスポージャーを持つ)。いずれの観点もMomentumがストラドルのようなポジションになるということをサポートしています。

正のリターンを獲得でき、かつストラドルロングの特性も兼ね備える美味しいとこどりのMomentumですが、なぜそもそもそんなに上手くいくのか、という点に疑問が残ります。良くある説明としては投資家の非合理性に着目するもので、例えば、何らかのニュースやイベントによりある資産のフェアバリューが変化した際に、投資家は瞬時に反応するわけではなく、徐々にそのフェアバリューの変化に適応していくため、その過程において価格に継続性が生じるというものです。Hamdan et al. (2016)では、リターンとスキューネスには負の関係があるべきだということを報告しており、その関係が成り立たないMomentum戦略はアノマリーであるということを述べています(資産価格にプライスされるリスクプレミアムではない)。一方で、Momentumは価格にプライスされているファクターであるという考えもあり、Liu and Zhang (2008)ではマクロ環境に対する正の感応度を要因として挙げています。

4. バックテスト

ここでは前回の記事で作成したロングオンリーのデータを元に、実際にTime-series momentumのパフォーマンスについて計測していみたいと思います。

ポジションの計算方法には様々な方法が考えられると思いますが、今回はBaz et al. (2015)にあるように簡単な指数加重平均を用いたものを採用します。

4.1. 個別銘柄

下図は各資産について同様のルールを適用して運用した場合のシャープレシオを計測しています。もともとのデータはQuandlから来ているため、資産によっては十分なサンプル数がありませんが、それを加味しても多くの資産、資産クラスでプラスのリターンを挙げています(債券はここ数十年ブル相場が続いているため、大きくサンプルバイアスが掛かってる点には注意すべきだと思いますが)。

tsmom1

4.2. ポートフォリオ

次に、上記の個別Time-series momentumをポートフォリオとして持った場合の結果を見てみます。各資産のウェイトに関してはボラティリティベースのリスクパリティで保有します。
Nick (2015)では、ボラティリティパリティではなく、リスク寄与度に基づくリスクパリティでポートフォリオを構築すべしという提案もありますが、それはまた別の機会ということで。

tsmom2

単純なS&P500との比較。下図からも分かるように、ドットコムバブル、金融危機、欧州危機、原油セルオフといった期間で特にリターンが良いことが分かります。

tsmom3

5. おわりに

だらだらと書きましたが、本記事では

  • Time-series momentumおよびMomentum全般に関するまとめ
  • Time-series momentumのバックテスト

を見てみました。

個人的にはこのMomentumは、非常によく効く運用方法の1つであるだけではなく、数学的なバックグラウンドからの関連性から議論できる点も興味深いなと感じています。今回使用した手法は指数加重平均を用いた簡単なモデルでしたが、基本的にMomentumは過去の価格情報を使ってポジションを構築するため、より複雑な機械学習を用いてトレンドを検知するなど発展性もまだまだあるかと思います。

参考文献

Asness et al. (2013): Value and Momentum Everywhere
http://pages.stern.nyu.edu/~lpederse/papers/ValMomEverywhere.pdf

Baz et al. (2015): Dissecting Investment Strategies in the Cross Section and Time Series
http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2695101

Dao et al. (2016): Tail Protection for Long Investors: Trend Convexity at Work
http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2777657

Hamdan et al. (2016): A Primer on Alternative Risk Premia
http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2766850

Jegadeesh (1990): Evidence of Predictable Behaviour of Stock Returns
http://finance.martinsewell.com/stylized-facts/dependence/Jegadeesh1990.pdf

Jegadeesh and Titman (1993): Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency
http://www.e-m-h.org/JeTi93.pdf

Liu and Zhang (2008): Momentum profits, factor pricing, and macroeconomic risk.
https://fisher.osu.edu/~zhang.1868/LiuZhang08RFS.pdf

Moskowitz et al. (2012): Time Series Momentum
http://docs.lhpedersen.com/TimeSeriesMomentum.pdf

NBIM Discussion Note: Momentum in Futures Market
https://www.nbim.no/globalassets/documents/dicussion-paper/2014/discussionnote_time_series_momentum_latest.pdf

Nick (2015): Trend-Following, Risk-Parity and the influence of Correlations.
http://papers.ssrn.com/sol3/Papers.cfm?abstract_id=2673124

Richard (2013): Risk and Reward in Momentum Trading
https://www.newton.ac.uk/files/seminar/20130328140014451-153538.pdf

Quandlを用いて先物ロングオンリーのパフォーマンスを計測する

概要

  • Quandlから主要な先物の各限月データが取得できるので、それを用いて先物ロングオンリーのパフォーマンスを計測する。(先物ロングオンリー = 期近の買い持ち)

データ概要

今回対象としたアセットクラスは

  • 株式指数先物
  • 国債先物
  • 金利先物
  • 為替先物
  • コモディティ先物

の合計82項目。あまりメジャーでないと思われる先物は省いています。またQuandlには全ての限月が掲載されているわけではなく、例えば日経平均先物は2013年12月限からしかデータがありません。

先物ロール方法

基本的にはDeliveryの3営業日前に期近から期先へとロールするようにしています。単純に各先物のパフォーマンスを見てみたいだけなので、取引コストは無視しています。

各統計量について

先物のリターンを計測しているので、パフォーマンスは無リスク金利に対する超過リターンベースとなっています。

結果

と言いつつjupyter notebookの直貼りです。

参考

Collections – Quandl
https://www.quandl.com/collections/futures

Kerasでお試しニューラルネットワーク

概要

  • NNやCNNが簡単に記述できるKerasパッケージのお試し
  • 簡単な2レイヤーのNNの実装

Jupyter notebook

詳細は下記ノートブックを見て下さいというわけですが。。。

メモ

学習済みのパラメータを外部ファイルに保存することもできるようなので、それを読みこませれば毎度毎度再学習させる必要もないとのこと。

今回は簡単なNNなので適当なハイパーパラメータでも十分に収束しているように見えるが、込み入ったNNやディ〜プなんちゃらをやる場合にはちゃんとお勉強する必要がありますな(― ―)

前述したようにパラメータを保存できるので、ハイパーパラメータをメタデータとしてArctic(Mongo DBのお手軽コネクタみたいなパッケージhttps://github.com/manahl/arctic)に保存しておけば後々のクロスバリデーションとかも簡単になるんじゃねーのと適当に妄想中。

参考

Keras Documentation
http://keras.io/

CS231n Convolutional Neural Networks for Visual Recognition
http://cs231n.github.io/

Jupyter notebookをWordPressに転載する

概要

・Jupyter notebookを手っ取り早くwordpressに転載する方法。

HTML

div#ipynb_test -> iframe#iframe_test
という構造を想定しています。Jupyterからnotebookをhtmlとして出力。それをwordpressと同一ドメイン上にアップロードしております。

JavaScript

というかJSをどうやって書くかを忘れてたので備忘録。notebookファイル自体には手を加えずにその外側で対応するようにしています。

最初はload関数を使って読み込もうと思ったのですが、レイアウトとCSSが大幅に崩れるようなのでiframeを使っています。
iframeのheightはnotebookのheightと同様になるようにsetIntervalで毎秒判定しています。
(もう少し良い方法があるような気がする)
また転載に伴い必要のないCSSの一部をオフにしています。

描画テスト