多因子选股模型根据什么选股(多因子模型选股的步骤)

股票多因子模型是一种选股模型,首先确定一个日期截面(通常我们会确定一个日期间隔,比如10天,或者每月第一天),在此日期上,通过每只股票在某个因子值的得分高低,选择相应的股票,这就是打分法因子模型。这个日期也被称为调仓日期,或调仓间隔、持仓周期,比如每月或每周的第一个交易日。

1.截面回归区分好坏股票

在此之前要进行单因子研究,通过某个因子值和每只股票收益率(一定要用上期因子值和上期到本期的收益率),做该日期截面线性回归,然后计算IC(秩相关信息系数)、ICIR(秩相关系数的信息比率)等各项评估指标,确认因子有效后,买入因子值较高(正向因子)或较低(反向因子)的股票,这就是回归法因子模型。由于股票数量动则达到几百上千个,截面上数据点足够多,线性回归得出的结论也会相对稳健,且如果设置每周调仓,每年也能有52个回归结果,可以得到对某个因子稳健的评估指标。

这里所说的股票多因子值,有基本面财务因子(一般在财报中,每季度更新),有舆情大数据因子(需要发挥编程实力通过nlp人工语言识别等方法处理成因子),还有传统的高效且高频的量价因子(如价格波动率、动量、高低区间、量价一致关系等,可参考WorldQuant挖掘并公布的101个因子)等。

常见的基本因子选股有:基本面分析(每股盈亏、营收增长率、净值、股本)、财务面分析(资产报酬率、股东收益报酬率、净利率、资产负债率、营业利润率)、市场面分析(个股涨幅、流通市值、成交量)。

如果从数学的角度看,因子选股模型仅仅是一个从因子到资金曲线的映射。实际上,不仅是股票多因子模型,期货时间序列模型也是一个将时间序列传入模型,导出资金曲线的函数。这也可以说是程序化交易的实质。

股票多因子模型的最终目标是在给定的样本空间范围内,稳定地预测股票未来收益率的排序,即把“好股票”和“坏股票”区分开来。构建模型最为核心的两个步骤是因子的挑选和不同因子之间权重的分配方式。

这一点和期货模型有显著区别,期货模型大部分是部署在单品种上的时间序列模型,虽然也考察了全市场情况和相关品种走势,但依然是以单序列方向性交易为主的。而股票模型侧重于全市场调仓选股、换股,毕竟股票市场有2000多个交易规则一致的标的,而期货市场只有不到30个活跃品种,且期货市场基本面差异极大。

这也决定了股票模型和期货模型的开发方式不同,期货模型更加侧重在单一时间序列上进行分析,进行择时等方向性交易,或者在两个事件序列构成的价差、比价序列上进行分析。而股票模型更关注全市场的情况,更关注全市场在某个日期截面上的表现、某个因子对股票收益率的描述程度(比如某一天,全市场3000只股票的换手率是一个可以用来评价个股活跃度的因子)。

2.建立多因子模型的大致步骤

单因子测试

首先计算出因子值,然后将本期因子值和股票下期收益率对应(比如上周五收盘时的因子值和上周五到本周五期间的价格收益率对应,因为我们假设上周五得到因子值后,按因子值选股,其要对未来一周的收益率负责),放入回归函数进行线性回归。比如在Python的Sklearn库中,提供了linear_model.LinearRegression.fit(X, Y)函数,输入X自变量(因子值),Y因变量(超额收益率),回归得到截距和斜率。斜率,即回归系数,在研报中被称作因子收益率。

接着计算因子的收益率序列t值,因子IC、ICIR等绩效。

每个调仓日期上的IC = Correlation(上期回归系数X1,本期股票收益率),也就是求相关系数或秩相关信息系数。

ICIR(IC值的信息比率)= IC.mean / IC.std,ICIR是IC的均值除以标准差,也就是IC值在回测时间段内的信息比率。

IC值有正有负,如果是正值,则正向影响股票价格;如果是负值,则负向影响股票价格,测试中加负号使用即可。当然,还可以分析全段IC大于0的比例(IC必须显著大于或小于0,以表明自己不是一个白噪声),全段IC绝对值大于0.02的比例(一般认为IC大于一定数量级,即拥有了对股票价格的显著影响能力),全段因子收益序列的假设检验t检验值,以分析这个因子是不是能够显著决定股票的收益率。在此提醒各位读者,测试得到的值仅仅是相关性,而非因果关系,这是在量化投资中需要反复思考的问题。

将股票池中的个股按因子值大小进行分组,比如分为5-10组,计算每组在一段时间内的收益情况。为了防止该因子和一些已知的因子存在较强的相关性,有时需要将收益率对已知变量做回归,然后对残差进行分组测试。也可以求出不同因子的收益率曲线的相关系数矩阵,从中去除相关性太高的因子,从而避免出现多因子回归的共线性问题。请大家自我测试自己写的因子,是否拥有超额收益率或非常强烈的IC秩相关信息系数。

分配多个因子权重

比如为了最大化超额收益,可以采取因子IC法。如若为了最大化夏普比率,可以计算各因子的收益率和协方差矩阵,然后采用优化的方法求解权重。

股票市场上有哪些类型的因子呢?要根据市场经验和经济逻辑选取。选择更多、更有效的因子能增强模型的信息捕捉能力,如一些基本面指标(PB、PE、EPS、增长率)、技术面指标(动量、换手率、波动、技术指标值),或其他指标(逾期收益增长、分析师一致预期变化、宏观经济变量)。

影响股价走势的主要因子包括

市场整体走势(市场因子、系统性风险)估值因子(市盈率、市净率、市销率、市现率、企业价值倍数、PEG等)成长因子(营业收入增长率、营业利润增长率、净利润增长率、每股收益增长率、净资产增长率、股东权益增长率、经营活动产生的现金流量金额增长率等)盈利能力因子(销售净利率、毛利率、净资产收益率、资产收益率、营业费用比例、财务费用比例、息税前利润与营业总收入比等)杠杆因子(负债权益比、资产负债率等)交易因子(前期动量幅度、前期涨跌幅、前期换手率、量比、股价振幅、日收益率标准差等)规模因子(流通市值、总市值、自由流通市值、流通股本、总股本等)红利因子(股息率、股息支付率)市场预期因子(预测净利润增长率、预测主营业务增长率、盈利预测调整等)

市场是不断变化的,市场参与者也会不断优化以适应这个市场的,自然一些因子也会失效。所以,除开发模型外,我们必须有能力寻找新的因子加入到因子库中。同时,各因子的权重设计也有进一步的改进空间,或随市场变化进行改进。千万不要以为因子模型构建出来就可以完美应对市场波动了,我们做量化投资绝对不是开发印钞机,毕竟模型是由数据验证得到的,我们拿出再强有力的逻辑证据,也无法避免模型的数据挖掘特性,所以一定要迭代和升级。


得到股价打分公式,买卖股票

进入到买卖交易规则方面,多因子模型的实质不是择时,而是选股。既然是选股,就是有一个统一的标准,这个标准是:

。贝塔0是线性回归截距,贝塔1是第一个因子的回归(训练或者说拟合)系数,贝塔2、贝塔3以此类推,贝塔k是第k个因子的回归系数。

该模型定义为:股价打分公式=截距+上期训练得到的因子系数矩阵*本期因子值矩阵。我们可以通过Python的Sklearn库中,提供了linear_model.LinearRegression.fit(X, Y)函数,将本期收益率Y和上期因子值X(一般是DataFrame多列因子值)放入回归函数,得到的截距,也就是股价打分公式的贝塔0项,因子1的回归系数X1是贝塔1,因子2、因子3等同理。

根据股价打分公式

,带入X,套用在每只股票上,即可得到个股得分。

买入的规则一般按照得分高低排序股票名单,优先买入得分最高的一类股票的一部分,比如前20只、前100只、前10%等标准。

多因子模型的优势

学习多因子模型之前要理解:股票投资的收益可以由收益中的非风险部分、受整个市场影响的部分(收益分解为阿尔法和贝塔),以及误差部分三者之和组成,通过资本资产定价模型CAPM可以计算出阿尔法和贝塔:

式中,y为某种金融商品预期收益;截取阿尔法为收益中非系统风险部分,是无风险的收益(股票个体带来的收益);斜率贝塔为系数,是系统风险部分;c为误差项,即残余收益(随机因素产生的剩余收益);x为整个市场的预期总体收益率。

多因子模型除风险评估模型外,另外一大应用是阿尔法策略,该策略有三大优势:

回避了择时难题,专注于股票波动率较单边买入持有策略要低在单边下跌的市场中也有可能盈利,阿尔法与市场的相关性理论为0

3.总结

市场上的对冲基金,其原理是通过做空股指期货,将贝塔系数降到接近于0,消除贝塔风险,当然也放弃了贝塔收益。但当我们持有这种基金时,将会享受到非常安全的净值增长,而且回撤小,意味着你在任何点位入场,都可以获得较好收益,这是大资金、特别是低风险偏好的保险资金、社保基金、企业年金等资金可以配置股市的重要基础。

投资市场交易中面临着系统性风险(贝塔风险)和非系统性风险(阿尔法风险),我们将通过对系统性风险进行度量并将其分离,从而获取超额收益(阿尔法收益)。获取阿尔法收益的策略包括选股、估值、固定收益策略等,它们都是利用衍生工具对冲掉贝塔风险。

阿尔法策略反映是择时之外的选股能力。当然学界也有研究认为阿尔法收益是不存在的,因为它太难以获取。Don M.Chance(2005)的研究认为,寻找阿尔法收益的过程是徒劳的,反而会损害投资组合的收益,增大波动性,且这些损失与交易成本无关。

但从投资的实践来看,阿尔法策略确实获得了成功,阿尔法收益显然是阶段性存在的。在中国股市这样高波动和高流动性的证券市场,存在着更多的阿尔法机会。