「FinTech Advent Calendar 2018」の記事です。
Pythonのライブラリを使ってポートフォリオのリスクを分析してみます。
手っ取り早くデータを取りたいので、今回はQuandlを使います。
株価のデータは有料なものがほとんどで世知辛いので、先物のデータを使います。
!pip install quandl
import quandl
# 天然ガス(1限月)
ng_df = quandl.get("CHRIS/CME_NG1", start_date="1998-01-01", )
# E-Mini S&P 500(1限月)
es_df = quandl.get("CHRIS/CME_ES1", start_date="1998-01-01")
今後はデイリーのリターンを使うので事前に計算します。
ng_returns = ng_df["Settle"].pct_change()
es_returns = es_df["Settle"].pct_change()
import empyrical
empyrical.alpha(ng_returns, es_returns)
ベンチマークに対する相関
$$ \beta = \frac {\mathrm{Cov}(r_a,r_b)}{\mathrm{Var}(r_b)}, $$empyrical.beta(ng_returns, es_returns)
AlphaとBetaは算出時に共通する部分があるため、同時に算出する関数が用意されています。
empyrical.alpha_beta(ng_returns, es_returns)
最大ドローダウン
empyrical.max_drawdown(ng_returns)
年平均成長率
empyrical.annual_return(ng_returns)
年間変動率
empyrical.annual_volatility(ng_returns)
最大損失率に対する年間平均収益の比率
empyrical.calmar_ratio(ng_returns)
負のリターンに対する正のリターンの比率 $$ \Omega(r) = \frac{\int_{r}^\infty (1-F(x))\,dx}{\int_{-\infty}^r F(x)dx} $$
empyrical.omega_ratio(ng_returns)
標準偏差に対するリターンの比率 $$ S_a = \frac{E[R_a-R_b]}{\sigma_a} = \frac{E[R_a-R_b]}{\sqrt{\mathrm{var}[R_a-R_b]}}, $$
empyrical.sharpe_ratio(ng_returns)
下方リスクに対するリターンの比率 $$ S = \frac{R-T}{DR} $$
$$ DR = \sqrt{ \int_{-\infty}^T (T-r)^2f(r)\,dr } $$empyrical.sortino_ratio(ng_returns)
設定したしきい値(デフォルトは0)に対する下方リスク
empyrical.downside_risk(ng_returns)
対数収益を直線に回帰したときの決定係数
empyrical.stability_of_timeseries(ng_returns)
5パーセンタイル値と95パーセンタイル値の比率
empyrical.tail_ratio(ng_returns)
(CAGR)年平均成長率
empyrical.cagr(ng_returns)
%matplotlib inline
import pyfolio
pyfolio.create_returns_tear_sheet(ng_returns, benchmark_rets=es_returns)
plot_ほげほげという関数を使うと個別にグラフを出せます。
pyfolio.plot_monthly_returns_heatmap(ng_returns)
pyfolioはBayesian performance analysisやSector Mappingsなど、さまざまな機能があるのですが疲れ果てたのでここまでとします。
Copyright © 2020 driller
Powered by miyadaiku