导语:每一位宽客都相信,影响股票涨跌的因素不胜枚举,而这些“因素”就是因子!本文做为一篇合格的入门教程,提供代码当作框架,各路宽客能够本身测试,查看收益率,亦可利用聚宽python平台自行构建代码。python
规范源码已更新!请你们克隆研究。 本文由JoinQuant量化课堂推出 。难度标签为进阶上,理解深度标签:level-0 JoinQuant免费提供数据获取、研究环境、策略回测、实盘链接、发送交易信号,学习交流等功能. 做者: 导数君 编辑: 宏观经济算命师
因子是什么?通俗来说。选股择时,咱们得有一个标准对不对?这些标准就叫作因子。好比,我认为营收增加率高的公司就是好公司!那我就把营收增加率大于30%的股票拉出来归入石榴裙下好了。这个营收增加率大于30%就是因子,完毕。算法
因子有选股的因子(股票好很差),有择时的因子(好股票何时买)。因为择时每每跟技术指标关系紧密,本篇中就介绍基本面类的因子吧,偏财务向。编程
最简单的方法,先物色一些本身喜欢的因子,好比增加率啦,市值啦,ROE啦,等等。而后一个个往里面加,看看效果如何,效果好了留下,效果差了删除,反复重复这个过程就能找到心仪的因子啦。框架
举个例子,小编先选两个因子,ROA和净利润/营业总收入(%)。ROA和利润率比较高的通常都是表现良好的公司,因此小编决定选取ROA和净利润/营业总收入前20名的股票买入,回测结果以下图所示:函数
表现比大盘略好一点,11年的收益有3.98倍。那换个因子试试?小编把净利润/营业总收入换成净利润环比增加率(%),回测结果以下图所示:post
而后发现收益率好了一点点,过去11年的收益有7.54倍。嗯,比刚才高了一些。若是咱们把这三个因子都加进去会怎样呢?学习
收益率为5.34倍,没有刚才那么好了,仍是刚才的ROA和净利润环比增加率(%)这两个因子比较好,那就保留两个吧。小编据说小市值股票收益好,若是把市值这个因子也加进去会怎么样呢?回测了一下,发现:测试
收益竟然有28倍!真的是太难以想象了。spa
因此话说回来,虽然这种试错法选因子是一种比较基础的选因子方式,但其实还挺有用。通过反复试错,小编发现小市值和ROE高的股票收益比较高,回测结果显示,收益能够达到42倍之多!code
是否是很惊艳!你能够直接编程构建代码,也能够用咱们的代码当作框架。总之,能够本身测试一下,看看收益会不会爆表。
做为一篇合格的教程,咱们接下来看看代码是如何实现的:
首先,财务面的数据有个问题,就是有些数据是不可得到的,这样的话对排序的影响比较大,所以涉及到一个清洗数据的步骤。一个很简单的办法就是用均值来填充,这个在Python的pandas库里面有个现成的函数,你们能够尝试使用里面的均值填充法。小编本身也写了一个填充均值的函数,你们也能够参考一下源码。
不过随着深刻的研究,可能会发现用均值填充并非一个完美的方法。这里小编再提供一个思路,你们感兴趣能够本身实现:若是某只股票这一期的某个财务数据空缺,可是上一期没有,咱们能够根据该股票这个数据与上一期的平均值比例来肯定。用公式说可能更清晰点:
空缺数值=本期该字段平均值*上期该字段数值/上期该字段平均值。
其次,咱们对因子的单位要作一个统一。由于有的因子绝对值好几十亿(好比市值),有的可能只有十几(收益率)甚至是负的,所以因子和因子之间很难直接赋予权重进行计算。所以,咱们能够考虑使用排名的方法,对这些因子进行排名。
Python自带有一个sort函数,不过为了练手起见,小编本身写了一个。用的是最简单的冒泡排序算法,高手也能够试一下堆排序或者归并排序以加快回测的速度。
最后,咱们将上述功能汇总成一个函数,集中取数据-清洗数据。
有了以上的几个子函数,写主函数就很方便了,各位宽粉们赶忙尝试吧!
咱们这篇文章主要介绍了如何经过财务数据来构建一个多因子的策略。因为是入门向,咱们构建多因子的方法比较简单,选取的因子依据是主观分析+排名。
若是想定量的分析,主流的方法是作回归分析,或者对各个因子进行打分,这些将会在进阶的量化课堂中有所介绍。若是还有其余的方法,固然也欢迎尝试。
本文由JoinQuant量化课堂推出,版权归JoinQuant全部,商业转载请联系咱们得到受权,非商业转载请注明出处。 文章更迭记录: v2.1,2016-07-25,修正文字,感谢 liuzehong 指出 v2.0,2016-07-16,更新为规范源码,添加“函数说明书” v1.1,2016-07-04,添加“导语” v1.0,2016-05-21,文章上线
策略代码与回测结果见:原文