pandas rolling对象的自定义聚合函数

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

相关推荐