上下行波动率因子

因子的定义
上下行波动率是历史收益率低于平均收益率的下行波动率比上历史收益率高平均收益率的上行波动率的比率:

DUVOLi=log((nu?1)∑d(rit?rl?)2(nd?1)∑u(rit?rl?)2)
其中,nu为大于平均复合收益率的天数,nd为小于平均复合收益率的天数, rit为股票的日收益率,rl?为股票的60日平均收益率。这是一个衡量股价暴跌可能性的指标,学界通常认为DUVOL较高的股票有着更高的暴跌可能,因此也就有着期望更高的风险溢价。

from quartz_extensions import *
import numpy as np
import pandas as pd

start = ‘2016-01-01’ # 回测起始时间
end = ‘2016-12-01’ # 回测结束时间
benchmark = ‘HS300’ # 策略参考标准
universe = set_universe(‘A’) # 证券池,支持股票和基金
refresh_rate = ‘fri’ # 调仓频率,表示每周五结束之后生成调仓
delay_number = 5 # 信号最大衰减周期
quantile_number = 5 # 分位分组的组数
function_list = [“winsorize”, “neutralize”, “standardize”] # 信号处理函数列表,从前到后进行处理
industry_type = ‘SW1’ # 行业分类类型

自定义因子函数

def foo(data, dependencies=[‘closePrice’], max_window=121):
daily_return = data[‘closePrice’]/data[‘closePrice’].shift(1)-1
daily_return = daily_return.ix[1:, :]
three_month_mean = pd.rolling_mean(daily_return, 60)
up_vol_data = pd.Series()

temp1 = daily_return[60:]
temp2 = three_month_mean[60:]

I_i = temp1 > temp2
up_vol = (((temp1-temp2)*(temp1-temp2))[I_i]).mean()
up_vol = pd.DataFrame(up_vol).T
up_vol.index = [up_vol.index[-1]]


I_i = temp1 < temp2
down_vol = (((temp1-temp2)*(temp1-temp2))[I_i]).mean()
down_vol = pd.DataFrame(down_vol).T
down_vol.index = [down_vol.index[-1]]

factor = down_vol/up_vol
factor = factor.ix[0, :]
return np.log(factor)

注册因子名称

def initialize(account):
a = Signal(‘duvol’, foo)
account.signal_generator = SignalGenerator(a)

调用自定义因子分析函数

create_factor_tear_sheet(‘duvol’, start=start, end=end, benchmark=benchmark, universe=universe, refresh_rate=refresh_rate, delay_number=delay_number, quantile_number=quantile_number, function_list=function_list, industry_type=industry_type, initialize=initialize)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值