WHAT' CHA GONNA DO FOR ME?

Python、統計、機械学習、R、ファイナンスとか

pandasで累積リターンを計算

前回は株価から直接累積リターンを計算したが、

実際によくあるのは、例えば日次や月次のリターンから、累積リターンを計算するケースだ。

いま、stock_retという変数に日次リターンが既に入っているとして、

stock_ret.plot()
Out[99]: <matplotlib.axes._subplots.AxesSubplot at 0x19ce3e30>

f:id:lofas:20150217162402p:plain

ここから累積リターンを計算するのは、次の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>


f:id:lofas:20150217162540p:plain

コード全体はこちら。

# -*- 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()