ポートフォリオのリターンを調べるのだ!の巻
年初来のパフォーマンスや今のポートフォリオをX年に組んでいたら、パフォーマンスはどれくらいだったのかが見れます。(途中の売買は考慮できていません。)
1.銘柄の指定
銘柄の指定パターンは、直接入力とCSVファイル入力の2つ用意しました。(CVS入力機能はコメントアウトされているので、コメントアウトを外して使用してください。)
銘柄指定パターン1
下記の様に、銘柄と保有株数を記入します。(ETFでも構いません。)
selected = ["MSFT","COST","ADBE","ZTS","CPRT","MSCI","DPZ","ORLY","TTC","SHOP"]
weight = ["10","20","30","10","20","30","5","10","10","5"]
銘柄指定パターン2
CSVファイルを使用する場合は、
下記のフォーマットで「port.csv」ファイルを用意します。
1行目に「Ticker,Number」を記載し、
2行目以降に銘柄と保有枚数を記載します。
蛇足ですが、CSVファイルを作成するのが面倒な人は、下記の用なコードでファイルを作成することもできます。
! echo Ticker,Number > port.csv
! echo AAPL,5 >> port.csv
! echo MSFT,10 >> port.csv
! echo VTI,10 >> port.csv
2.コードの実行
下記のコードを実行します。
期間、銘柄、ベンチマークは好きに変更してください。
CSVファイルを使う場合は、コメントアウトを外してください。
(上場間もない銘柄を含む場合は、期間を短くする必要があります。)
import datetime
import pandas as pd
import pandas_datareader.data as web
import matplotlib.pyplot as plt
from matplotlib import gridspec
%matplotlib inline
plt.style.use('seaborn-pastel')
######## 期間設定 #######
start = datetime.date(2020,8,1)
end = datetime.date.today()
######## 銘柄パターン1 ##########
selected = ["MSFT","COST","ADBE","ZTS","CPRT","MSCI","DPZ","ORLY","TTC","SHOP"]
weight = ["10","20","5","10","20","5","5","5","10","3"]
######## 銘柄パターン2 ##########
# port = pd.read_csv("port.csv")
# selected=port["Ticker"].values
# weight=port["Number"].values
######## ベンチマーク ##########
bench=["QQQ"]
###############################
data = web.DataReader(selected, 'stooq', start, end)["Close"]
data.sort_index(ascending=True,inplace=True)
data = data.reindex(columns=selected)
datab = web.DataReader(bench, 'stooq', start, end)["Close"]
datab.sort_index(ascending=True,inplace=True)
datab = datab.reindex(columns=bench)
data_weight=data
for i in range(len(weight)):
data_weight.iloc[:,i] = data_weight.iloc[:,i] * int(weight[i])
data_change=(1+data_weight.pct_change()).cumprod()/len(weight)
data_bench=(1+datab.pct_change()).cumprod()
fig, ax1 = plt.subplots(figsize=(8, 4.5),facecolor="white")
ax1.stackplot(data_change.index,data_change.values.T)
ax1.plot(data_bench,linewidth=2,alpha=1,color="red")
ax1.tick_params(axis='x', labelrotation= 45)
print("----Bench Mark-----")
print(round(data_bench.values[-1].sum(),3))
print("----My Portfolio----")
print(round(data_change.values[-1].sum(),3))
plt.show()
print("----My Portfolio--start--")
data_weight=data_weight.sort_values(by=data_weight.index[0], axis=1, ascending=True, inplace=False)
plt.pie(data_weight.iloc[0].tolist(), autopct="%1.1f%%",labels=data_weight.columns,startangle=90)
plt.show()
print("----My Portfolio--end--")
data_weight=data_weight.sort_values(by=data_weight.index[-1], axis=1, ascending=True, inplace=False)
plt.pie(data_weight.iloc[-1].tolist(), autopct="%1.1f%%",labels=data_weight.columns,startangle=90)
plt.show()
3.実行結果
下記の様に結果が出力されます。
1行目:ベンチマークのリターン
2行目:ポートフォリオのリターン
赤線:ベンチマーク
積み上げ:ポートフォリオの推移
上段パイチャート:開始時のポートフォリオ
下段パイチャート:終了時のポートフォリオ
自分のポートフォリオの年初来のパフォーマンスってどれくらいだったのか少し気になったので、作成してみました。
何かの参考になれば幸いです。
おつかれさん「缶コーヒー1杯ぐらい、ご馳走してあげよう」という太っ腹な方がいれば、よろしくお願いします!
参考になったら「ハートボタン、フォロー、リツイート」をお願いします。
読まれる可能性があがるので、次の記事を書くやる気が出ます。
では!
ここから先は
24字
¥ 100
この記事が気に入ったらサポートをしてみませんか?