Python

【Python】ポートフォリオの利益率算出方法|ファイナンス理論の基礎

Python

はじめに

今回の記事では、ポートフォリオの利益率算出方法について解説したいと思います。

ポートフォリオとは、金融商品の組み合わせのことです。この組み合わせの結果のトータルのリターンの算出方法をpythonで解説したいと思います。

この記事のゴール

  • ポートフォリオの利益率を算出することができるようになること

ポートフォリオの利益率算出方法

開発環境

今回は、Jupyter Notebookで計算をしていきます。Jupyter Notebookのインストール方法等がわからない方は、こちらを参考にしてみてください。Anacondaをインストールすることで、Jupyter Notebookも合わせてインストールすることが可能です。

コード

ライブラリのインポート

pandas_datareaderだけは、Anacondaには含まれていないので、こちらは、別途インストールしてください。

インストール方法は、以下のコマンドを入力することで可能です。

  • Mac:ターミナル
  • Windows:コマンドプロンプト
pip install pandas_datareader

以下のライブラリをインポートします。

  • numpy
  • pandas
  • pandas_datareader
  • matplotlib
import numpy as np
import pandas as pd
from pandas_datareader import data as wb
import matplotlib.pyplot as plt

株価の取得

今回は、以下4社の株価を取得し、ポートフォリオを組んだ結果得られる年間のリターンを算出していきたいと思います。

  • P&G
  • Apple
  • Microsoft
  • General Electric 
tickers = ['PG', 'AAPL', 'MSFT', 'GE']
mydata = pd.DataFrame()
for t in tickers:
    mydata[t] = wb.DataReader(t, data_source='yahoo', start='1995-1-1')['Adj Close']

投資利益率の算出

投資利益率の算出方法の詳細は、以下の記事を参考にしてください。

returns = (mydata / mydata.shift(1)) - 1
returns.head()

対数利益率の場合は、以下のコードで算出可能です。詳細は、以下の記事を参考ください。

returns = np.log(mydata / mydata.shift(1))
returns.head()

年間リターンの算出

annual_returns = returns.mean() * 250

ポートフォリオのウエイト設定と算出

仮に銘柄を25%ずつ保有した場合のリターンを計算してみましょう。

weights = np.array([0.25, 0.25, 0.25, 0.25])
pfolio_1 = str(round(np.dot(annual_returns, weights), 5) * 100) + ' %'
print (pfolio_1)

np.dotはドット積を算出します。ドット積とは、以下です。

つまり、各年間リターンと保有ウエイトをかけ、総和を取ることでトータルリターンを算出しています。

2つのベクトル A = [A1A2, …, An] と B = [B1B2, …, Bn] のドット積は下記のように定義されます。

\mathbf{A}\cdot \mathbf{B} = \sum_{i=1}^n A_iB_i = A_1B_1 + A_2B_2 + \cdots + A_nB_n

また、以下の割合で保有した場合のリターンを計算して、比較してみましょう。

  • P&G:0.4
  • Apple:0.4
  • Microsoft:0.15
  • General Electric:0.05 
weights_2 = np.array([0.4, 0.4, 0.15, 0.05])
pfolio_2 = str(round(np.dot(annual_returns, weights_2), 5) * 100) + ' %'
print (pfolio_1)
print (pfolio_2)

計算結果は、以下です。

  • pfolio_1: 19.459 %
  • pfolio_2: 22.388 %

ポートフォリオ2の方が、トータルリターンが大きいことがわかります。

ポートフォリオ2の方がトータルリターンが大きい理由

(mydata / mydata.iloc[0] * 100).plot(figsize = (15, 6));
plt.show()

実行結果は、以下です。

何をしているかというと、1995年1月3日(一つ目)の各銘柄の株価を1として、プロットしたものです。

このグラフから、アップルの利益率が最も高いことがわかります。

つまり、アップルの保有割合が大きい方が、トータルのリターンは大きくなるということです。

なので、ポートフォリオ2の方がリターンが大きいのです。

まとめ

今回の記事では、ポートフォリオの利益率算出方法について解説しました。

各年間リターンと保有ウエイトをかけ、総和を取ることでトータルリターンを算出することができます。

pythonでは以下のように表します。

  • np.dot(annual_returns, weights)
  • annual_returns:年間リターン
  • weights:ポートフォリオの割合

Pythonをもっと勉強したいという方は、以下を参考にしてみてください。私が、勉強に使っている本や勉強方法などを解説しています。

ファイナンス理論に関しては、以下の記事を参照ください。

今回の記事は、以上です。

最後までお読みいただきありがとうございました。

コメント

  1. […] ポートフォリオの利益率算出方法 […]

タイトルとURLをコピーしました