12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pyfolioを使ってみる

Last updated at Posted at 2019-06-25

はじめに

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)

スクリーンショット (57).png

google.tail(5)

スクリーンショット (58).png

日次リターンの算出

リターンを計算するために終値を使います。

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)

と実行すると以下を出力します。

スクリーンショット (66).png

image.png

#今後の展望
pyfolioには他にも色々なtear sheetがあるのでそれらの使い方を調査していきたいです。

また、tear sheetを使った分析方法も勉強して、高いパフォーマンスを発揮できるアルゴリズムを作りたいと考えています。

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?