pandasを使用してヒストリカルボラティリティを計算する
これ、「Pythonでヒストリカルボラティリティの計算」にも書いたのとほぼ同じなので軽く流す。
shift関数使わずにpct_change関数使っている分だけ幾分簡潔になったかも。
#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 = ['1803', '8698'] multiStockData = getMultiStockData(tickerList, date_from, date_to) ######### Realized Volatility ######### # 終値を取得 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で埋める # ヒストリカルボラティリティを求める hv = pd.rolling_std(daily_pct_change, window=20, ddof=False) * np.sqrt(250) hv.plot()