量化选股入门篇
初期的量化选股其实是很直观的,最简单的为单因子选股,例如投资者用PE因子选股,步骤是:
(1)选择使用哪一个指标(因子)。在下面的例子中使用静态PE来选择股票,PE越低,则打分越高。PE在一定条件下可能是负数(也就是公司发生了亏损),为了单调性,我们使用PE的倒数EP,EP越高,则该项得分越高,这样即使PE为负数,也是有经济意义的。
(2)选择要进行回测的时间和每次回测间隔的时间。如果是中低频的选股,一般来说设置为1个月,在月初或者月中进行调仓。下面的例子选用月度选股,假设在每个月最后一个交易日以当日收盘价来调仓。
(3)选择在哪一个股票池里选股。这个股票池可以是上市的所有A股,也可以是某个指数,例如沪深300或者中证500成分股,也可以是大家自定义的某一个选股池,一般称为“Universe”。如果是指数,值得注意的是,这个指数的成分股是随着时间变化的,例如沪深300每过半年就会重新调整成分股。在这种情况下,如果要在沪深300内选股,时间跨度是2010年年初至2017年年末,每月选股;使用2012年年初的沪深300成分股就不是准确的,因为没有考虑指数成分股调整的因素。在下面的例子中,以沪深300为选股的股票池。
(4)每只股票给予的权重。下面的例子使用的是平均权重法,因为选用了沪深300,所以最终结果是30只股票形成的股票池,每只股票的权重就是3.33%。
图7-1 简单的PE因子选股结果
资料来源:天软科技
(5)在每个时间节点,利用成分股每个因子值的大小进行排序。选择排名靠前(或者靠后)的10%的股票,取其下个月的收益平均值作为当月回测结果。然后滚动起来,回测时间段内每个月进行这样的测算。最后把每个月的收益进行滚乘,得到回测区间的总收益。
以上步骤完成后,测试结果如图7-1所示,直观感受是选股效果还可以,但波动比较大,而且在2010年选股效果不是很明显。
2012年12月31日的选股结果如表7-1所示,权重都是3.33%,所选的股票集中于银行、建筑、房地产等周期性行业。
表7-1 简单的PE因子选股结果
资料来源:天软科技
上述步骤往往是量化投资入门者最直接的想法,但其实细细一想,问题还是很多的:首先,怎么确定这种选股结果是好的呢?其次,选出来的股票偏重于某些板块或者风格,因为每只股票的权重是一样的,也就是“等权”,这和真实指数的权重分配差异是比较大的。除了道琼斯指数以外,大部分指数的编制实际上是流通市值加权或者总市值加权的。再次,在真实的交易过程中,是有交易费用的,但这样的回测,显然没有考虑交易费用。最后,在每月最后一个交易日以收盘价成交也不是严格的假设,下一个交易日(也就是下个月第一个交易日)的开盘价和上一个交易日的收盘价实际上还是有差异的,这个差异可能会达到0.1%~0.5%,长期累积下来也是一个不小的数目。
此外,在A股市场里经常出现停牌,也有可能股票开盘就涨停或者跌停,上述回测过程是否考虑了这几点呢?
如果假设每只股票的换仓成本为0.3%(包括买和卖,分别是0.15%),并且强制使选股出来的组合在每个行业的权重和指数的分布是一致的。
怎么使选股的组合和指数保持一致呢?这其实是一个比较复杂的问题。可以用一种比较直观的方法处理,就是在每一个行业里打分,取前三名平均分配其在指数里的权重。例如在钢铁行业里,假设用EP选出来甲、乙、丙三只股票,而钢铁行业的当期权重是4%,那么每只股票就分配1.33%的权重。
在沪深300里并不是每一个行业都有3只以上的股票,因此进一步假设某个行业中的股票数小于分组数,就不对这个行业进行分组,而是让每个组中都包含这个行业的股票;如果行业中样本个数大于分组数,就正常地对这个行业中的股票分组。假设沪深300在某行业只有2只股票,该行业权重为1%,那么每只股票的权重为0.5%。
图7-2 添加限制后的PE因子选股结果
资料来源:天软科技
其他限制条件不变,这样最后的选股结果如图7-2所示,和之前的回测结果有了较大差别,直观感觉就是收益降低了,一方面是因为做了一些行业中性的处理,另一方面是因为考虑了交易手续费,影响了收益。
以上就是因子模型的一个简单练习,非常直观,但大家深入思考,或者亲手做一遍(即使不会编程,也可以做3个月的简单回测),就会发现问题越来越多。这其实会驱动我们不断地修补模型,把不合理的假设放弃,或者修正到更贴近真实情况。
这时,更重要的一个环节是把单因子模型升级为多因子模型。
多因子模型是比单因子模型更加有力的一个选股手段。可以直观地想一下:用PE(或者EP)选股的本质意义是选择低市盈率的股票,可是有时会希望选择低市盈率、近期跌得多的股票,或者低市盈率、跌得多、有很好的毛利率的股票,或者低市盈率、跌得多、有很好的毛利率和ROE的股票……把选股的逻辑要素越拓越广,就形成了多因子模型。
多因子模型也有几种处理方法,最严谨的方式是类似于BARRA的选股方法:
方法1:在因子数不多的情况下,先用第一个因子,筛选出一个股票池;再用第二个因子,再次筛选;然后用第三个因子……这种方法适用于因子数不多,而且原始股票池足够大的情况。
方法2:利用因子打分的方法,先对股票的每个因子进行打分,再把多个因子的分数加起来,最终得分就是股票的多因子分数。例如某股票的EP因子分数为0.5(范围为0~1),动量因子分数为0.7,两个因子的权重分别为50%、50%(因子权重总和必须为1),那么最终因子得分为:0.5×50%+0.7×50%=0.6。
如何选择多因子是关键,问题在于选择什么样的因子,赋予多少权重。在这种选股模型下,并不是选股因子越多越好,尤其是同一个大类下的因子,太多容易产生很强的相关性。例如PE和PB,通常情况下PE低的,也是PB低的,所以同时给PE和PB因子权重,就类似于把这两个因子的权重加起来。表7-2列出了一些比较常用的因子,供大家参考。
表7-2 常见的多因子
续表
续表
资料来源:天软科技
注:因子方向栏为1,表示该因子数值越大越好;因子方向栏为0,表示该因子数值越小越好
大家如果要构建因子,可以先从简单的入手,例如市值、市盈率等。也可以继续加工,从而产生复杂一点的复合因子,例如市盈率在板块中的百分比位置。当然,在这种因子模型下,因子数目不宜过多,也不宜为了追求结果而改造出一些超级复杂的复合因子。经济学和金融学意义是构造因子的基础,失去了意义,那么再美妙的数学结果也无用。
根据前文所述,相信大家可以通过编程来构造一个简单的多因子模型,接下来就涉及如何评价多因子模型效果的问题。假设某多因子模型的结果如图7-3所示。
图7-3 某多因子模型的回测结果
资料来源:Wind
上述结果只体现了直观意义上因子得分最高的一组超越对标指数的收益。如果选股池和对标的指数一致(即指数样本内选股),那么说明这个因子的选股效果是比较好的。但仔细一想,我们在选股过程中是把股票按照打分来分为10组,潜在的假设是分数越高的,收益越好(或者正好相反,分数越低的,收益越好),说明用这种因子选股具备较好的单调性。但如果结果不是这样的,例如第5组的收益最高,或者第6组的收益最低,就要怀疑这种选股因子的有效性了。此外,有些选股因子的超额收益波动性是比较大的,怎么确定这种选股效果确实是有效的?对于多因子模型来说,每个因子具体的贡献是多少?可用以下几个检验来评价多因子模型:
(1)因子收益率检验:检验每组是否可以取得正的收益率?收益波动率如何?取得正的收益率概率有多大?分组之后,各组在各个时间区间的表现如何?组与组之间在同一个时间区间的区分度如何?
具体的检验方法是统计回测近一年、近三年、近五年或更久的时间段里,各组收益率均值、标准差、胜率等指标,其中胜率指该组战胜基准收益率的概率。
(2)因子显著性检验:每组是否可以取得正的超额收益率?取得正的超额收益率概率多大?
这是为了研究各组超越基准的情况,希望第一组明显超越基准,最后一组明显被基准超越。评价的具体指标有:
超额均值——各组收益率相对基准的超额收益率的均值,均值越大,说明该组超越基准越明显。(https://www.daowen.com)
跟踪误差——超额收益率的标准差,衡量各组偏离基准的程度,越小越好。
信息比率——风险收益率指标,超额收益率均值÷超额收益率标准差,结果越大,说明超越基准越明显。
T-Stat——T统计量,该值越大,说明超越基准越多。
P-Value——显著性概率,T-Stat对应的T累积分布函数的值,结果越大,说明该组超越基准越多。
超额概率——超基准收益率大于0的概率。
(3)因子区分度检验:第一组收益率是否显著大于最后一组?能否根据因子把表现好的股票和表现差的股票区分开来?
分组之后,我们总是希望第一组显著超越基准(说明分组可以选出好的股票),最后一组被基准超越(说明分组可以剔除差的股票),因此通常会考查第一组相对于最后一组的超额收益率,一般用月度收益率来衡量。具体的评价指标有:
平均收益——第一组相对于最后一组超额收益率的平均收益,越大越好,说明第一组的收益率显著大于最后一组。
标准差——第一组相对于最后一组超额收益率的标准差。第一组相对于最后一组超额收益率的波动越小越好。
胜率——第一组战胜最后一组的概率,越大越好,表示第一组的收益率显著大于最后一组。
夏普比率——超额收益的平均值÷超额收益的标准差,结果越大越好。
T-Stat——检验对象对应的T统计量,结果越大越好。
P-Value——T-Stat对应的T累积分布函数的值,是第一组超越最后一组的显著性概率,越大越好。
(4)因子延续性检验:由因子得到的分组能否在较长的一段时间保持比较好的方向性,即本期表现好的因子,下期是否也能取得好的收益率?
事实上,很难找到某个因子一直保持某个方向。例如“定向增发”可能在牛市时是一个利好消息,在熊市时却是一个利空消息。(因为按常理,人的心理变了,对同一事件的反应不同,最后反映到对股票的购买欲上)既然不能找出方向一直保持不变的因子,就只能希望找出延续性很好的因子,即在比较长的时间里保持方向不变的因子。因子延续性检验就是用来解决这个问题的。延续性检验里的重要考查指标是IC:
这个公式的含义是,t期末各股票的综合因子分数为序列X,t期到t+1期各股票的涨幅序列为序列Y,然后计算序列X和序列Y的相关系数。E(X)为序列X的平均值。
通过各期的IC值可以大致看出因子的延续性,在哪一段是正向的,哪一段是反向的。如图7-4所示,柱状代表对应日期的相关系数,曲线是IC均线。如果IC均线始终在横轴上方(或者下方),说明延续性很好。如果IC均线总是在横轴上下波动,说明因子的延续性很差。比如图7-4显示从2011年8月到2012年8月,所示因子都表现出比较好的反向延续性。
图7-4 某选股因子的IC时间序列
(5)因子贡献度检验:因子反映的信息是否有重叠?各个因子的分数对下期收益的贡献到底有多大?
这个检验是检验各个因子的分数对下期收益的贡献度,以此作为之后调整因子比例的依据。检验方法一般有两种:
第一种方法是做最小二乘参数估计(带常数项),即自变量通过某种线性变换去拟合因变量,寻找各个自变量与因变量的关系。更具体的展现形式是用每期的数据分别去做最小二乘参数估计,或者用所有期的数据去做最小二乘。
得到各个因子对应的回归系数、常数项,以及基于此计算的推荐的配置比例。其中,如果回归系数是负的,那么说明该系数对应的因子对下期收益的贡献是负的,在配置因子时应该把该因子的方向设置为跟原来相反;如果回归系数是正的,说明该系数对应的因子对下期收益的贡献是正的。回归系数的值越大,说明对应的因子对股票的区分度越好,下期收益高和下期收益低的股票被区分得很明显。对收益高的股票,建议配置较高的比例,比例的计算方法如下:
其中,ai是第i个因子对应的回归系数,N是回归系数的总个数,ωi是多因子框架计算的推荐比例。当结果ωi为负数时,建议因子方向调成跟原来的相反。
第二种方法是使用主成分分析法。在实际处理多因子时常遇到两个问题:一是因子的个数太多,可能彼此间存在一定的相关性,使观测到的数据在一定程度上反映的信息有所重叠;二是人们希望知道没有重叠的这些因子对下期收益的贡献如何。
在考虑因变量Y与p个自变量X1,X2…Xp的回归模型中,如果自变量间有较强的线性相关(多重共线性)时,利用最小二乘参数估计法,一般效果较差。采用主成分回归法,首先是计算这些因子的前m个主成分,达到降维的效果,这样既简化了回归方程的结构,又消除了变量间相关性带来的影响。但只有主成分分析的话,因为主成分是原始变量的线性组合,造成了解释上的困难,可以使用逆变换将其变成原始变量的回归方程。检验的指标主要是各因子对应的主成分回归系数、主成分回归常数项,以及基于此计算的推荐的比例配置。
关于具体的主成分分析的数学推导,请大家参考相关数学书籍。
至此,大家应该有种从浅入深,慢慢从直观上的因子概念过渡到偏数学的、系统的多因子模型中的感觉。细细想来,现有模型还有很多不科学、不系统的方面,需要不断修正。如果想更进一步,可能就要从一个新的起点出发了,这就是下文介绍BARRA模型体系的原因。但仅仅是BARRA模型的机理,就可以写成一本书了,所以下文不会面面俱到、写得非常深入。不可避免的是,其中涉及较多数学和金融学的理论和模型,对数学基础不强的人来说可能会有点难,可以跳过这一节,不影响对整本书的理解和把握。