pandasで累積リターンを計算
前回は株価から直接累積リターンを計算したが、
実際によくあるのは、例えば日次や月次のリターンから、累積リターンを計算するケースだ。
いま、stock_retという変数に日次リターンが既に入っているとして、
stock_ret.plot() Out[99]: <matplotlib.axes._subplots.AxesSubplot at 0x19ce3e30>
ここから累積リターンを計算するのは、次の1行でいける。
最初の行が欠けるため、始点として一律1を入れるのを忘れないようにする。
cum_ret_d=(1+stock_ret).cumprod() cum_ret_d.ix[0]=1 cum_ret_d.plot() Out[100]: <matplotlib.axes._subplots.AxesSubplot at 0x19da6ab0>
コード全体はこちら。
# -*- coding: utf-8 -*- import pandas.io.data as web import numpy as np import seaborn as sns import pandas as pd import pandas.io.data as web import datetime start = datetime.datetime(2000, 1, 1) end = datetime.datetime(2014, 12, 31) #データ取得 all_data = {} for ticker in ['AAPL', 'IBM', 'MSFT', 'YHOO']: all_data[ticker] = web.DataReader(ticker,'yahoo',start,end) #データ結合(concatでもOK) #stock_price=all_data['AAPL'].ix[:,['Adj Close']] #for ticker in ['IBM', 'MSFT', 'YHOO']: # stock_price = pd.concat((stock_price,all_data[ticker].ix[:,['Adj Close']]),axis=1) #データ結合 stock_price=all_data['AAPL'].ix[:,['Adj Close']] for ticker in ['IBM', 'MSFT', 'YHOO']: stock_price = pd.merge(stock_price,all_data[ticker].ix[:,['Adj Close']], left_index=True, right_index=True) #列名変更 stock_price.columns=['AAPL', 'IBM', 'MSFT', 'YHOO'] stock_price.plot() #リターンデータに変換 stock_ret=stock_price.pct_change() stock_ret.plot() #累積リターンに変換 cum_ret_d=(1+stock_ret).cumprod() cum_ret_d.ix[0]=1 cum_ret_d.plot()