はじめに
pyfolioとは
ポートフォリオのパフォーマンスやリスクの分析に役立つPythonライブラリで、3年ほど前にQuantopian Incからリリースされました。
主な機能は様々なグラフを描画して、ポートフォリオを全体像を分析を助けます。
(個々の複数のグラフをまとめたものをtear sheetと呼びます。)
今回やること
上記のURLを参考にtear sheetの作成してみます。
内容は、一つの銘柄の日次リターンをから様々な図を描画してtear sheetを作成する感じです。(本記事ではgoogleの株価を取得しています。)
上記URLのコードをそのまま実行してもエラーを吐くので注意です。
原因は、pyfolioがgoogle financeからデータを取得していることです。google financeは過去に公式APIの提供を終了していて、非公式のものが出回っていましが、その非公式APIが廃止されたことが原因のようです。
tear sheetの作成
##環境
Google Colaboratory、Jupyter Notebookなど
ライブラリの準備
pyfolioのインストール
pip install pyfolio
必要なライブラリをインポート
import pandas as pd
import pyfolio as pf
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
import pandas_datareader.data as pdr
%matplotlib inline
はJupyter Notebookで、ノートブック上にグラフを描画する際に指定する記述です。
warnings
は実行結果対し特に影響のない警告の表示を消すためのライブラリです。臭いものには蓋をしましょう。
pandas_datareader
は株価を取得するときに使うライブラリです。株価だけでなく、インターネット上の様々なデータソースからデータの取得を行うことが可能です。
株価データの取得
###yahooo financeからgoogleの株価データを取得する
以下の一行でOKです
google = pdr.DataReader('GOOGL', 'yahoo', '2018/1/1', '2019/1/1')
DataReaderの引数は4つで、
・name: 銘柄(str型もしくはstr型のlist)
・data_source: 取り出したい元(str型)
・start: 取得開始日(datetime型)
・end: 取得終了日(datetime型)
(これがないと入力した日付まで取得することになります)
となっています。
データは以下のようなpandas.DataFrame型で取得されます。
head、tailを使ってはじめと終わりの5行を取り出しています。
google.head(5)
google.tail(5)
日次リターンの算出
リターンを計算するために終値を使います。
tear sheetを作成するpyfolioのメソッドに渡すリターンのデータはpanda.Series型である必要があります。
cp_google = google['Close']
# cp は colse price の略
続いて日次リターンの算出です。
日次リターンの計算式は以下のようになりますが、
(当日の終値 ÷ 全日の終値) - 1
pandasのメソッドを使って簡単に取得できます。
return_google = cp_google.pct_change().dropna()
#dropna() は1行目の欠損値処理
tear sheetの描画
pf.create_returns_tear_sheet(return_google)
と実行すると以下を出力します。
#今後の展望
pyfolioには他にも色々なtear sheetがあるのでそれらの使い方を調査していきたいです。
また、tear sheetを使った分析方法も勉強して、高いパフォーマンスを発揮できるアルゴリズムを作りたいと考えています。