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