JQData | A股投资指南-单因子选股的有效性验证
关于选股这个话题,相信每个投资者都有自己的一番心得。
技术派会提到均线、换手率等价格因子,而基本面派则更多会关注ROE、ROA等财务因子。
那么,在如此众多的因子中,什么因子真正有效呢?
本文试图构建一个通用的因子选股回测模型,来验证因子的有效性。
什么是有效因子
在构建因子选股回测模型之前,我们总结了一个有效因子的三个重要特征,它们是:
①超额收益:一个有效因子,应当能筛选出好的股票组合,创造出跑赢大盘的超额收益。
②持续性:一个有效因子,应当是在一个较长的时间段内持续有效,而不是仅仅在一个季度、一个年份有效。
③稳定性:一个有效因子,不仅是对一个市场有效,而是在所有市场都有效,能够跨市场通用的因子才是好因子。
针对以上三个特征,我们将回测周期设定在从2012-01-01至2019-01-31的时间段内,选取沪深300和中小板指代表两种不同风格的市场,通过因子选股的回测收益,来验证因子的有效性。
回测对象
1.股票池:通过聚宽数据出品的本地量化数据接口JQData,我们找到了获取任意指数成分股的方法:详见get_index_stocks()函数,在传入000300.XSHG和399005.XSHE两个指数代码后,我们获取了每一个交易日沪深300和中小板指数的股票池。
2.因子:紧接着,我们使用get_factor_values方法从聚宽因子库的数百个因子中选取了两个较常用的因子:operating_profit_ttm营业利润TTM(过去12个月营业利润之和)以及net_profit_growth_rate净利润增长率((今年净利润(TTM)/去年净利润(TTM))-1)。
Img
因子分层回测模型
为了验证每一个因子的有效性,我们构建了一个通用的因子选股回测模型,整体思路如下:
①每个交易日取出股票池中股票的因子值,按从小到大进行排序,将排序后的股票池等分成N个股票组合。(本文采用5等分股票池)
②等额买入每个等份的股票组合,月底重复①②两步并重新调仓,最后计算平均收益。(本文默认按月调仓)
③在总的时间区间上,每个调仓周期结束后进行一个复利的计算,最后将每组股票的累计收益绘制出来进行对比。
模型构建完毕后,我们传入回测区间和股票池,通过各个股票组合之间的收益对比以及和沪深300基准收益进行对比,我们能够清楚的找到能够带来超额收益Alpha的有效因子。
Img
可以看到,第0组~第4组之间总体分层较为明显,说明营业利润TTM在沪深300股票池中的表现是非常优秀的。它能够将沪深300中好的股票和差的股票在长达7年多的回测区间中大体区分开来。
Img
进一步的,沪深300中营业利润最高的组合在2012-01-01~2019-01-31的时间段内,收益高达【88.74%】,而同期沪深300的收益仅有【36.49%】,说明营业利润TTM因子的选股能力很强。
Img
可以看到,它的表现并不是那么乐观,五组分层结果也不是那么明显。说明营业利润TTM因子更加适用于白马蓝筹,而在小市值股票中的表现却很一般。