pandasとscikits.statsmodelsを使用してリターンのOLSを求める
「pandasを使用して2つの銘柄の日次リターンの時系列相関を求める」の続きっぽいやつ。
「scikits.statsmodels」が必要だったので、importした。
特にコメントは無いw。
#coding:utf-8 import pandas as pd import numpy as np import datetime as dt import pandas_datareader.data as pdd import scikits.statsmodels ######## 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 = ['1803', '8698'] 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で埋める ######### OLS実行 ######## model = pd.ols( y=daily_pct_change['1803'], x={'8698': daily_pct_change['8698']}, window=20 ) model.beta['8698'].plot(figsize=(12, 8));