工作要求计算上证50过去三年历史波动率的变化,窗口为60个工作日,即计算一个波动率的值需要使用过去60个工作日,简单的计算了60 个工作日的标准差。
图片.png# encoding:utf-8
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
import matplotlib.pyplot as plt
data_class = Mongo_operation()
**** 这里是获取基本的数据 ****
# 可以使用tushare哦,我这里是使用了公司内部的数据,所以省去了获取数据的代码
df = DataFrame(ali_database.stock_index_hq.IDX000016.find({},{'_id':0,'tradeDate':1,'close':1,'preClose':1})).sort_values('tradeDate')
df['rt'] = df.apply(lambda x:((x['close'] - x['preClose'])/x['preClose']),axis = 1)
df = df.dropna()
df['std'] = df['rt'].rolling(60).std()
std = df[df['tradeDate'] >= '2016-01-01']['std'].tolist()
df_std = df[df['tradeDate'] >= '2016-01-01']
df___ = df_std[['tradeDate','std']]
df___ = df___.set_index(["tradeDate"])
df___.plot()
plt.title('最近三年000016波动率序列')
import pandas as pd
import numpy as np
print(' 均值:',df_std['std'].mean())
print('0.2分位数:',np.percentile(std, 20))
print('0.5分位数:',np.percentile(std, 50))
print('0.8分位数:',np.percentile(std, 80))
plt.grid()
plt.show()
图片.png
图片.png
网友评论