RQFactor因子投研工具 | 致力于成为alpha因子“挖掘机”

为了以更丰富的形态服务更广泛的用户,RQSDK 本地量化投研套件已经正式上线。欢迎点击此处或者扫描上方二维码,30秒即可完成试用申请。RQFactor 作为因子投研框架,是 RQSDK 本地量化投研套件的重要组成部分。RQFactor致力于因子开发,集成了量化多因子研究相关的各类投研工具,以便于快速、高效地进行因子编写和因子测试。

     
那么因子是什么?为什么进行因子投研?

因子投资-投资者的风险偏好与抉择

在股票投资中,我们经常使用某种指标或者多种指标来对股票池进行筛选,这些用于选股的指标一般被称为因子,它们能描述某类股票所共同拥有(或暴露)的某一方面的特征。如果一个投资组合是围绕某个相同特征构建起来的且能带来收益,那么该收益可能就是这个因子所带来的风险溢价。根据能否被用来解释收益,因子有alpha因子和系统因子。
▶  alpha因子是无法被定义、无法被解释的存在,往往能够带来超额收益。▶  系统因子是指无法用分散的方法来避免的一个系统特征,因本文中用来描述风险,所以是系统风险因子,所谓的“系统风险”指通过分散投资也无法消除的风险。系统风险因子通常被市场所熟知,可以用来解释系统部分带来的平均收益。当“未知的”alpha因子被市场上的人熟知之后,就变成了“可解释的”系统风险因子,所以系统风险因子的前身也是alpha因子。
以下梳理不同时期人们对Alpha与Beta的认识。

▶  只存在alpha

一开始,因子尚未被定义,所以只存在无法解释的alpha

▶  出现市场beta,存在市场beta和alpha

80年代,资本资产定价模型(Capital Asset Pricing Model 简称CAPM)出现了。CAPM选取某个指数作为基准,该指数被认为是整体市场的表现,并且假设投资者所持有的股票都会且只会受到市场整体供需的影响而呈现出同涨同跌的现象,风险来自于市场这个系统且不可分散,称为市场风险,与之对应的收益即为市场收益。CAPM提出用beta系数来衡量股票风险,通过计算过去的股票信息来估算股票或投资组合的预期收益率,比如市场收益每波动1%,资产就对应波动3%,此时的beta系数就是3,由此来反映投资组合与市场组合的联动性。由于CAPM假设了投资组合的全部风险都来源于市场,因此用来衡量风险大小、解释市场系统部分带来的收益的都是市场beta。在CAPM时期,“可解释的”市场beta与“不可解释的”alpha同时存在。

▶  出现国家beta(地区beta)、行业beta、风格beta,存在国家beta(地区beta)、行业beta、风格beta和alpha

CAPM用单因子解释系统收益,到了90年代,人们不再局限于市场这个单一因子,套利定价模型(APT,Arbitrage Pricing Theory )出现,该模型认为资本资产的收益率是多种因素综合作用的结果,于是根据其收益途径分成国家beta(地区beta)、行业beta和风格beta。国家beta(地区beta)和行业beta由市场beta细化而来,比如,同一个行业的股票涨跌幅比较接近,说明存在一个共同特征影响到了该行业内的股票收益,此时就用行业beta来概括这个属性,进而解释这部分收益,因为其属于市场系统特征,所以行业beta可通过市场指数获得。同样地,国家beta(地区beta)从GDP的增长、通货膨胀的水平等方面来解释收益,也可从市场指数获得。风格beta则用来解释风格风险,指剔除掉国家风险和行业风险后,股票所具有的强烈的风格特征,比如Size(市值),小市值股票短期内的成长空间可能大于大市值股票,投资价值更高,表现出更优的小市值风格。当一个因子被发现后,会被越来越多的投资者运用而被人们所熟知,其套利空间变小,进而变成系统风险因子。系统风险因子的增多,也意味着alpha因子占据的比例变小。

▶  出现策略beta,存在国家beta(地区beta)、行业beta、风格beta、策略beta和alpha

再后来,策略beta出现了,它是通过优化股票构成来降低投资组合波动率得到。策略beta的出现,意味着更多的alpha被发现成为beta,因此alpha占据的比例再度缩小。

由于投资组合收益中越来越多从alpha收益被划为beta收益,对应地,不能被系统解释的alpha部分就越来越少,导致alpha因子更加难被挖掘,需要投入的成本也更多。因此,有人只进行指数投资,主要收益来源是国家(地区)和行业的风险溢价。也有人采用Smart Beta,在跟随整体投资市场系统风险的基础上,更强调特定风格因子的暴露程度,重视优化选股、优化权重以及择时投资,获取高于传统指数的投资回报。但也存在“热衷于探索”的投资者痴迷于探究未知的世界,挖掘神秘的alpha因子,期望能通过alpha因子来预测股价趋势,获取超额收益。计算机可以帮助这类“猎奇”投资者提高开发alpha因子的效率,在投资组合中快速进行因子计算和有效性检验从而更好地选股,因此,量化投资在获取alpha收益上显示出了巨大的潜力

RQFactor——协助投资者挖掘alpha因子

因子挖掘是量化选股中的关键一环。米筐致力于提供高速有效的量化系统,为每一位量化交易参与者赋能,于是开发了因子投研工具RQFactor,将部分内置因子和自定义复杂因子的功能带给用户,内置的计算引擎可快速计算因子值,并对因子有效性进行检验,帮助投资者更高效地开发alpha因子、更准确地进行量化选股,从而获得alpha收益。根据因子有无依赖性将因子分为两类,分别是基础因子和复合因子。

01 RQFactor提供丰富的因子和工具函数,支持用户高效编写因子

RQFactor调取米筐提供的因子库,集成了丰富的基础因子,包括行情因子、财务因子和Alpha101因子等。编写前,用户通过  from rqfactor import *  导入米筐因子的相关信息,之后用简单的  Factor('factor_name')  来直接调用行情因子、财务因子和Alpha101因子等公共因子,如  Factor('open')  表示开盘价这个因子。

RQFactor提供多种工具函数,以供用户高效、快速地编写和验证因子。编辑因子的逻辑是创建自定义因子的核心部分。米筐支持使用四则运算、截面回归、均值方差等计算方法。为了进一步提高用户编写因子的效率,米筐提供了两类工具函数,分别为:

RQFactor支持自定义基础因子来解决材料问题,也支持自定义算子来解决自定义转换方法的问题。对一个或多个因子进行组合、变换,生成一个新的因子,这样的函数我们称为算子。一个算子封装的是一个对因子进行变换的函数,可以简单地理解为构成一个新因子的转换方法,这个函数由因子计算引擎在计算因子值时调用。通过算子对选定的因子原始值进行处理,即可得到因子值。

使用系统提供的基础因子和算子,已经可以写出很多因子,有时候所需的功能系统内置的算子不能实现,这时候可以自定义算子。详细的自定义方法请见说明文档

02 RQFactor支持多项参数设置,通过因子计算和检验,对因子进行全面分析

因子编写完毕后,准备好需要计算的股票列表、指定计算的时间范围后可以通过  execute_factor  调用因子计算引擎来计算因子值

execute_factor(factor, order_book_ids, start_date, end_date, universe=None):  返回 pd.DataFrame

▶  factor: 需要计算的因子
▶  order_book_ids: 需要计算的股票列表
▶ start_dateend_date: 指定计算的时间范围,支持字符串, datetime.date, datetime.datetime,  pd.Timestamp
▶  universe: 对于横截面因子,可以通过此参数指定参与计算的股票池;支持指数代码及 None,None 表示全市场。默认为 None。对于非横截面因子,此参数无意义。
因子值,是指通过给定的函数(算子)对给定的股票数据进行计算所得到的数值,为后续进行因子测试提供数据准备。
通过前面的步骤计算得到的因子值可通过  factor_analysis  对因子的有效性进行多方面检验。

在评估因子有效性之前,需要先矫正alpha,即对因子进行“提纯”,排除无关因素的影响,使得回测结果更加准确。这里主要讲离群值处理和行业中性化处理。离群值处理指的是调整因子值中的离群值至上下限,其中上下限由离群值判断的标准给出,RQFactor 提供了MAD(绝对值差中位数法)、3σ(标准差法)、百分位法三种判断标准对超出范围的因子值进行调整,使数值浮动在一个合理的范围内,以此减小离群值的影响力。此外,可以通过   INDUSTRY_NEUTRALIZE(X)   对X因子进行行业中性化处理,RQFactor行业分类采用申万一级行业分类标准,其中一种方法是通过计算每个时间横截面每个行业的因子均值,再用每个股票的因子值减去所在行业的行业均值,由此去除因子在行业上的偏好,防止选股结果高度集中在某个行业,消除了行业偏好。RQFactor提供的检验结果目前主要包括IC分析以及收益率分析这两个方面,分别就因子的 IC 值、以及因子的收益率方面进行多维度分析。

IC分析

IC(Information Coefficient)又称为信息系数,是因子值与股票下期收益率的截面相关系数。IC 值介于-1和1之间,反映的是因子对下期收益率的预测能力,IC 值越高,该因子在该期对股票收益的预测能力越强。我们算出特定时间段的本期平均因子值和对应的下期收益,假如有100个时间点,每个时间点都有因子值,每个因子值都有对应的下期收益,将这两个数列求一个相关系数,这个系数就是IC。若一个因子的IC值>0.3说明其具有较强的收益率预测能力。

RQFactor提供两种计算方式,用户在对因子检验之前可对IC的计算方式进行自主选择。▶  NormalIC:又称为皮尔逊相关系数,是指在某个时点上,给定股票池,股票池中所有股票的因子值与下一期因子回报的截面相关系数。

▶  RankIC:又称为斯皮尔曼相关系数,是指在某个时点上,给定股票池,股票池中所有股票的因子值排名与其下期回报排名的截面相关系数。

信息比率IR(information ration)是常用的业绩衡量指标,其数值由IC的均值除以IC的标准差来获得,用来评估IR预测能力的稳定性。数值浮动越小,IC的标准差越小,IR越大,说明IC值的预测能力越稳定。

收益率分析

收益率分析有两种,分别是因子分组累积收益率和换手率分析。

▶  因子分组累积收益率呈现了给定股票池及分组后,各组股票在测试期内的累积收益率的变化。比如,将净利润作为因子,把3000支股票按照净利润大小分成5组,分别是净利润最高、次高、中等、较低、低,每组600支股票,总共构建5个组合,等权重持有股票后,看一段时间内的价格走势,假设发现净利润高的那组累计收益率高于其他组,说明该因子与收益存在正相关关系,则认为因子有效。

▶  换手率分析呈现了给定股票池及分组后,各个分组在测试期内换手率的变化。换手率越高的组,说明越受市场关注,则认为因子有效。

通过以上步骤,因子编写和有效性检验已经完成。

自定义基础因子实例

我们自定义一个基础因子——股票的日内波动率,也就是计算每个交易日分钟线的收盘价的波动率。我们看一下代码:
UserDefinedLeafFactor 的原型如下。其中,参数 name  是因子名称, func  则是因子值的计算方法,其原型如上面代码中注释所示。
我们来使用一下这个因子:
这时候,f5作为一个自定义因子,已经可以如其他基础因子一样使用了。

以上是因子编写的一个简单例子,在实际应用中,用户可根据自身需求,在RQFactor中编写更复杂的函数进行因子开发。当我们计算一个因子并检验其有效性后,因子就开发完成了。在RQSDK本地量化投研套件中,RQFactor与RQAlpha Plus集成,支持将开发好的因子通过RQAlpha Plus进行回测,在实际策略中验证开发好的因子表现,同时对因子的结果进行更好的应用。我们期待RQFactor更多用户高效开发alpha因子。在未来,我们亦将关注用户需求,不断充盈更多因子挖掘功能,致力于为RQSDK本地量化投研套件提供更加强大的因子投研工具。


目前,RQSDK 已向金融机构开放免费试用,我们期待更多投资者的使用反馈。欢迎点击此处或者扫描下方二维码,30秒即可完成试用申请。

投资行为的盈亏依赖于您的独立思考和决策,本文所述观点并不构成投资或任何其他建议,Ricequant不提供或推荐任何投资品种。股市有风险,投资需谨慎。
原创文章除特别声明外,欢迎非商业转载,敬请注明出处。

发表评论

邮箱地址不会被公开。 必填项已用*标注