pandasを使用して個別株の累積リターンと指数の累積リターンをチャートに描く
個別株の累積リターンと指数の累積リターンを同じグラフ描く。
特にコメントは無い。
#coding:utf-8 import pandas as pd import numpy as np import datetime as dt import pandas_datareader.data as pdd ######## Define Method ######## def getMultiStockData(tickerList, date_from, date_to): def getStockData(ticker): stockData = pdd.DataReader(ticker, 'yahoo', date_from, date_to) return stockData datas = map(getStockData, tickerList) return pd.concat(datas, keys=tickerList, names=['Ticker', 'Date']) ######### 処理 ######### # 期間設定 date_from = dt.date(2016, 1, 1) date_to = dt.date(2016, 12, 16) # 株価取得 tickerList = ['AAPL', 'GOOGL', '^GSPC'] multiStockData = getMultiStockData(tickerList, date_from, date_to) ######### 終値データの取得 ######### # 終値を取得 adjClosingPrice = multiStockData[['Adj Close']] adjClosingPrice = adjClosingPrice.reset_index() # pandas.DataFrameをpivotingして終値データをticker毎に纏める adjClosingPriceTable = adjClosingPrice.pivot( index='Date', columns='Ticker', values='Adj Close' ) ######### 累積リターンを求めて可視化する ######### # 日次リターンを求める daily_pct_change = adjClosingPriceTable.pct_change() # 日次リターンの計算 daily_pct_change.fillna(0, inplace=True) # Nanを0で埋める # 日次リターンの累積を求める cumprod_daily_pct_change = (1+daily_pct_change).cumprod() # 日次リターンの累積グラフ cumprod_daily_pct_change.plot()