计算上证50过去3年的历史波动率的变化(窗口用60个交易日)

工作要求计算上证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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 红海战略是在竞争已有的市场空间,打败竞争对手,开发现有需求,在价值和成本之间权衡取舍,按差异化或低成本的战略选择协...
    无门无派阅读 4,353评论 0 0
  • 原生家庭是最近一段时间很火的一个话题,无数人都在其中找到了自己曾经的影子,发出“原来是这样!”的感慨。“我经常控制...
    笑的样子阅读 3,698评论 3 2
  • 连续两天步数突破三万,腿像灌了铅似的。因为昨天没有完成任务,今天想要补上去,所以早早就出了门。温度最高的时候没多少...
    df7136f48961阅读 773评论 0 0