python
第一次完全自编的一段300etf从2013年到现在的历史波动率计算,虽然很简单,但对自己来说也是一个进步。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#读入数据300etf.csc
etf = pd.read_csv('g:/300etf.csv',index_col = 'date')
etf.index = pd.to_datetime(etf.index)
#计算每日对数收益率
lagetf = etf.shift(1)
l = np.log(etf/lagetf)
#分别计算IV
list = []
for i in range(1,1645):
list.append(l.iloc[i:i+21].std())
list = np.array(list)
iv22 = pd.DataFrame(list,index = l.index[21:])*16
list = []
for i in range(1,1623):
list.append(l.iloc[i:i+43].std())
list = np.array(list)
iv44 = pd.DataFrame(list,index = l.index[43:])*16
list = []
for i in range(1,1601):
list.append(l.iloc[i:i+65].std())
list = np.array(list)
iv66 = pd.DataFrame(list,index = l.index[65:])*16
list = []
for i in range(1,1534):
list.append(l.iloc[i:i+132].std())
list = np.array(list)
iv133 = pd.DataFrame(list,index = l.index[132:])*16
#绘图
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
ax.plot(iv22,label = '22days')
ax.plot(iv44,label = '44days')
ax.plot(iv66,label = '66days')
ax.plot(iv133,label = '133days')
ax.set_title('300etfHV')
plt.legend()