jiahaohappy 2019-12-29
利用自定义的聚合函数, 把它应用到pandas的滚动窗长对象上,
可以求出 标准差型的波动率剪刀差
def volat_diff(roc1_rolling, center=-0.001, nSD=5): '''计算: 标准差型波动率剪刀差 参数: roc1_rolling: 滚动窗长里的roc1 center: roc1(1日波动率)的平均值 nSD: 求标准差时用的窗长 用法: 1. rolling.apply(volat_diff, (0, 8)) 2. rolling.apply(volat_diff, args=(0, 8)) 3. rolling.apply(volat_diff, kwargs={'center':0, 'nSD':8}) ''' up_lst=[] down_lst=[] for roc1 in roc1_rolling: if roc1 < center: #如果涨幅小于minret,将被用于计算“下行波动率” down_lst.append(roc1) else: up_lst.append(roc1) #反之,归入计算“上行波动率” upvar = sum([(r-center)**2 for r in up_lst]) /nSD #计算上行波动率 downvar= sum([(r-center)**2 for r in down_lst])/nSD #计算下行波动率 vd = upvar - downvar #计算二者差值 #vd_lst = [] #vd_lst.append(vd) return vd def mysum(rolling): s=0 for v in rolling: s +=v return s