历史波动率计算问题?

论坛 期权论坛 期权     
期权匿名问答   2022-1-4 08:09   15665   3
谢邀。
个人感觉目的不同,计算方法有差异。如果是做比较宏观低频的研究,当然使用一个月,大约二十二三个样本点,计算出一个波动率就好。如果需要用到波动率的日数据,恐怕只能滚动。
滚动有两个问题,一个是滚动窗口高度重叠带来的波动率高度自相关,而且窗口期越长,这一问题越严重;第二个是信息的更新问题,如果窗口期太长,包含了太长的历史信息,这是否有过度平滑,对评估当前的波动率是不是有意义,很值得讨论。但从统计上讲,样本越多,对波动率的无条件期望估计才越精确。
所以我觉得这个问题的答案取准于你用来干什么。如果是理论研究,选择稍长的窗口,再用时间序列方法消除自相关,或者使用GARCH之类的模型都可以。但如果实务问题,我倾向于使用短窗口。毕竟市场定价参数变化非常快。我想Wind的一周代表了业界的某种选择吧。当然,如果是定价问题,可比产品的隐含波动率也可以参考啊。
因为并没有业界经验,所以我只能给出猜测,不当之处敬请重重拍砖。其实这个问题已经邀了我好多天了,一直假装沉默期待业界大佬来回答的。。大佬一直没来,那,厄,我来消灭下零回复,虽然。。答案。。很。。丑陋。。
分享到 :
0 人收藏

3 个回复

倒序浏览
2#
期权匿名回答  16级独孤 | 2022-1-4 08:10:24 发帖IP地址来自 中国
谢邀。
个人感觉目的不同,计算方法有差异。如果是做比较宏观低频的研究,当然使用一个月,大约二十二三个样本点,计算出一个波动率就好。如果需要用到波动率的日数据,恐怕只能滚动。
滚动有两个问题,一个是滚动窗口高度重叠带来的波动率高度自相关,而且窗口期越长,这一问题越严重;第二个是信息的更新问题,如果窗口期太长,包含了太长的历史信息,这是否有过度平滑,对评估当前的波动率是不是有意义,很值得讨论。但从统计上讲,样本越多,对波动率的无条件期望估计才越精确。
所以我觉得这个问题的答案取准于你用来干什么。如果是理论研究,选择稍长的窗口,再用时间序列方法消除自相关,或者使用GARCH之类的模型都可以。但如果实务问题,我倾向于使用短窗口。毕竟市场定价参数变化非常快。我想Wind的一周代表了业界的某种选择吧。当然,如果是定价问题,可比产品的隐含波动率也可以参考啊。
因为并没有业界经验,所以我只能给出猜测,不当之处敬请重重拍砖。其实这个问题已经邀了我好多天了,一直假装沉默期待业界大佬来回答的。。大佬一直没来,那,厄,我来消灭下零回复,虽然。。答案。。很。。丑陋。。
3#
期权匿名回答  16级独孤 | 2022-1-4 08:10:32 发帖IP地址来自 中国
简单粗暴的话,直接用poboquant云量化平台


给定日期,可以取过去30条(自己可以设定是30、60还是90等等,也就是30天、60天、90天历史价格,使用K线计数会更加简洁,不用考虑用自然日时间段长度不一的问题)K线的收盘价(当然也可以换成均价、结算价,自己都可以定制)
然后就用这个历史价格数组计算历史波动率
CalOBJ = CreateCalcObj() #创建一个计算对象
        option = PBObj()
        yearstring=int(tradingtime.year)       #tradingtime是当前交易日
        monthstring=int(tradingtime.month)
        daystring=int(tradingtime.day)
        #准备计算50ETF的历史波动率
        option.EndDate=datetime.datetime(yearstring,monthstring,daystring)
        option.Count = 31 #获取过去31条K线
        klinedata0 = GetHisData(g.code0, BarType.Day, option)
        #print "len(klinedata) ",len(klinedata)
        klist = []
        i=0
        while i<len(klinedata0)-1:
            #print "previous trading day" +str(klinedata0.tradedate)
            #print "previous prices "+str(klinedata0.close)
            klist.append(klinedata0.close) #  
            i+=1
        if len(klist)>0:
            Kl = np.array(klist, dtype=np.double)
            HisVola=CalOBJ.GetVolatility(Kl) #得到历史波动率
        print "30D HisVola "+str(HisVola)

完整策略范例可见 qmhedging/poboquant

云量化平台 欢迎访问 https://quant.pobo.net.cn/quant/login#/

注册时 使用 邀请码 814685
4#
期权匿名回答  16级独孤 | 2022-1-4 08:10:50 发帖IP地址来自 中国
30天的收益率算一个标准差,年化乘以根号250,然后滚动计算
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP