第一问答网

 找回密码
 立即注册
查看: 85|回复: 1

详解量化投资中的因子择时

[复制链接]

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-12-26 02:30:11 | 显示全部楼层 |阅读模式
本篇文章由我的合伙人撰写:

量化投资领域,一个严谨的私募量化基金从投研到交易的工作步骤一般如下:
1、获取各类数据并清洗数据;
2、特征工程生成因子;
3、选取模型进行预测;
4、预测结果策略化交易;
5、组合风险控制;
6、事后策略评估及总结。
在上述过程中,1和2往往是最基础,也是最重要的部分——获得的数据的质量,数据类型的广度,数据处理的深度决定了因子质量,而因子质量决定了总体绩效的上限——任何再优秀的模型算法也只是逼近这个上限,并不能在这个上限之外再度打开一片天。(很多初入量化的小朋友用各种各样的算法提高模型的成绩,都是本末倒置的徒劳做法!)



结局早已注定

对于数据选择特征工程来说,如果开发者没有像Two Sigma,Citadel,Pershing Square等那样拥有雄厚资本实力,能够在数据购买方面一掷千金,但想要一步步提高因子质量和PnL(收益率表现)的话,也是有一些文章还是可以做的。
书归正传,本文我们只说1和2的部分。我们以CTA中的因子挖掘为例,在单因子挖掘之后需要对单个因子进行测试,最终选择sharpe率总体排名靠前或者IC/rankIC值排名靠前的因子作为备选因子。
其中sharpe的计算公式为:

sharp =(annual_return - fixed_return) / annual_volatility
其中annual_return为因子/策略的年化收益,annual_volatility为因子/策略的年化波动率,而fixed_return为无风险利率,一般上采用10年期国债收益率作为基准。公式的分子收益率部分衡量了收益,分母部分则衡量了风险,这个公式综合地把风险和收益结合起来评价策略的优劣,是市场上最主要的策略评价指标。
夏普比率所代表的意义为:一段时间内(通常是1年)所获得的收益扣除掉无风险利率之后,和收益曲线波动率的商,代表了收益的稳定性。
IC值的计算方法为:

IC(FACTOR,R) = CORR(FACTOR(t-1), R(t))
其中FACTOR为因子的数值,可以是单因子,也可以是多因子构成的一个矩阵。R为我们所预测的target(投资标的)的return(收益率)。
那么IC的算法为:上一时刻的因子值和这一时刻的收益率之间的相关系数,IC值所代表的的意义为,上一个周期的因子对当前周期的收益率的解释能力,也就是预测能力。
为了避免因子之间的多重共线性,需要在不同的入选因子之间计算其相关性,对相关度过高的因子直接drop掉或者正交处理,以降低模型算法的稳定性。这一步之后,我们最终获得了输入模型的因子集群,把这些因喂进模型之后,fit并predict,然后可以对y_hat和y_test之间进行比较,以此输出绩效统计。
我们可以很明显地看到不同的因子的IC值是不一样的,通过seaborn画出热图之后,我们明显可以看到,不同因子在不同的阶段,他们对于return的解释能力和解释程度均存在一定的时空差异
——也就是说在不同的阶段不同的因子的能力是不一样的,那么如何使用到因子最优秀的部分,规避开因子的弱势部分,打开这扇门,会让你在量化投资的世界里更进一步。
图1:因子的IC值热图



因子的IC值热图

因子择时的方法和步骤:

第一步,我们对所有因子进行测试,若有100个因子,需要挑选出其中夏普比率/IC值在前50%的因子作为因子池:factor_prepare,这一步的目标是为了获得因子池中绩效较为优秀的部分,优等生入选策略
第二步,对factor_prepare进行多重共线性检查,取correlation(相关性) <= n 作为阈值,将factor_value.corr (相关性)> n的因子drop(剔除)掉,如果drop掉的因子中存在夏普比率/IC值排名在前20%的,可以把它们进行正交处理之后入选,获得factor_median集合,这一步的目标我们可以打个比方是要抄作业,因为一次期末考试要有语文数学外语物理化学生物等科目,不能只抄一门课学习成绩好的,需要分散开不同科目
第三步,针对factor_median因子集群,取T为时间范围,获得在T时间内的IC值,并对其进行排序,获得在T时间范围内表现最好的因子。
这一步的目标是获得在T这个实践阶段表现最好的因子,把它们作为我们要使用的目标因子输入模型进行训练并预测。下图为某个因子和return(收益率)之间的correlation(相关性),我们可以很清晰地看到,因子对行情的解释能力也在不断变化。



某量价因子T时间内的IC值

那么为了保持因子解释能力,我们取ic的均值以提高其稳定性(有时候因子的单日corr不稳定,我们用均值更合适,比如说他的20日均值),同时选择因子在70%分位上方时作为备选因子,当该因子的成绩在70%分位以下时,则暂时将其剔除出去。
第四步,使用上述择时后的多因子模型所输出的结果,和未经择时的模型输出结果进行比较,观察其提升程度,使用则是后模型进行预测,并辅助交易。
#Step_1:  
factor_select_step1 = sort(factor.sharpe | factor.IC, 50%)
# 对上述因子根据夏普比率或者IC值进行排序,选出排名在前50%的因子

#Step_2:  
factor_select_step2 = factor[corr(factor_select_step1) < n]
# 对第一步选定的因子进行多重共线性检测,相关性高于n的排除掉
if sort(factor.sharpe, 80%) == 1:
    orthogonal(factor)
# 但是对于夏普比率排名在前20%的因子,对齐正交处理

#Step_3:
factor_list = []
for j in factor_select_step2.columns:
    if factor_select_step2.loc[i:i+t,:] >= factor.sharpe.mean(m)*70% :
        factor_list.append(factor)
# 根据选定的factor_select_step2列表中的因子,以t为时间范围,对单因子
# 夏普比率的m周期均值处于70%分位以上的,入选最终的factor_list
# 后续可以针对性的对n,m等进行优化总结:因子择时属于“择时选优”,在对因子进行择优的基础上,再根据因子在不同时间的能力不同,优选其表现较好的阶段,自然是一种锦上添花的做法
<hr/>文章会同步更新到我的公众hao:

跟puppy玩量化

欢迎你的关注。

此外,想加入quant小群的朋友可以公众hao后台给我留言~
回复

使用道具 举报

6

主题

10

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2022-12-26 02:30:40 | 显示全部楼层
量化有一个最大的弊端,就是无法注入更多新鲜血液从而失去某些机会。量化的策略是以历史数据作为重要的参考指标,在人工智能不能为量化系统提供服务时,量化只适合在横盘之间套利,如果出现单边行情,不能及时调整量化策略,显然是很可悲的。如果标的数据跳出历史周期指标,量化如何继续?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|第一问答网

GMT+8, 2025-7-14 02:12 , Processed in 0.093851 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表