pandas rolling对象的自定义聚合函数
计算标准差型的波动率剪刀差
利用自定义的聚合函数, 把它应用到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
原文地址:https://www.cnblogs.com/duan-qs/p/12116905.html
时间: 2024-11-09 09:55:51