华泰单因子测试之换手率类因子
程序员文章站
2022-07-13 15:14:52
...
一、因子选择
二、 因子收益
1)绘制各分位数各周期的平均收益(收益数值不是重点,主要用于观察是否具有单调性)
#绘制各分位数各周期的平均收益(收益数值不是重点,主要用于观察是否具有单调性)
plot_quantile_returns_bar(by_group=False, demeaned=True, group_adjust=False)
2)绘制各分位数的累计收益(收益数值不是重点,看层次是否分明)
#绘制各分位数的累计收益(收益数值不是重点,看层次是否分明)
wgt_return_factor.plot_cumulative_returns_by_quantile(period=5, demeaned=False, group_adjust=False)
3)分维度获得因子收益和标准差
4)计算指定调仓周期的各分位数每日累积收益
5)指标计算
三、IC值
1)计算每日因子IC值
# 计算每日因子IC值
ic_date = wgt_return_factor.calc_factor_information_coefficient(group_adjust=1, by_group=0, method='rank')
2)打印信息比率(IC)相关表
'''
一般来说IC大于3%(因子反过来的时候就小于-3%),则认为因子比较有效。
IC.Std
IR=IC.Mean\IC.Std
p-value p值,判断IC的统计分布,一般要求小于5%或1%。在假设检验中,如果p>0.05,则接受原假设H0。如果p<0.05或p<0.01,则拒绝原假设H0,接受备择假设H1。
IC Skew 偏度
IC Kurtosis 峰度
'''
# 打印信息比率(IC)相关表
wgt_return_factor.plot_information_table(group_adjust=True, method='rank')
wgt_return_factor.plot_ic_hist(group_adjust=True, method='rank')
'''
IC Skew period_1 > 0 正偏态
period_10<0 负偏态
period_20<0 负偏态
IC Kurtosis period_1<3 廋尾
period_10<3 廋尾
period_20<3 廋尾
p-value(IC) <0.05 在显著性水平0.05下拒接原假设,即认为均值不为零
四、截面收益
def regression_test(clean_factor_data):
'''
用回归法进行截面 规律统计
a: 回归系数
b: 截距
t: t检验统计量
'''
factor = prepare.demean_forward_returns(clean_factor_data)
cols = utils.get_forward_returns_columns(factor.columns)
grouper = factor.index.get_level_values('date')
def aa(df):
s = pd.Series()
for i in utils.get_forward_returns_columns(factor.columns):
y = df[i]
x = df['factor']
x = sm.add_constant(x)
wls_model = sm.WLS(y,x) #暂且设置为等权重
results = wls_model.fit()
b,a =results.params
t = results.tvalues[1]
s = s.append(pd.Series([a,b,t],index=[i+'_a',i+'_b',i+'_t']))
return s
rt = factor.groupby(grouper)[cols.append(pd.Index(['factor']))].apply(aa)
return rt
rt = regression_test(wgt_return_factor._clean_factor_data)
rt.to_csv(path+'\\regression_test.csv')
推荐阅读