第七课 ALPHA 101(101个选股公式)-- 零基础量化投资小课堂
上节课我们讲了因子的定义和因子测试的方法。我明白这不是一节简单的课,需要的知识储备和经验积累非常的多,很高兴在这节课还能继续见到你。
下面我们讲一讲因子投资的圣经之一,世坤投资(WorldQuant)前些年公开的论文《101 Formulaic Alphas》。意思就是101个构造因子的公式,用现在的大师们的话说就是“教你101个选股公式”。
这些因子现在几乎都已失效或者不可交易,要不然人家也不会公开给我们看了,而且是针对美股的研究,美股是常年牛市,所以对A股可能会有些许的水土不服,比如他们的动量因子基本都很强,但在A股就差点意思。
但这并不影响我们的学习,我们可以从中感受一些因子构造方法,自己搞一套适合A股的赚钱策略。
下面我们开始实操,对于想要深入代码细节的朋友们来说,本节课对于python基础的要求极高,如有不适可以先补一下基础。
首先,我们的工程分为几个部分:数据下载的datas.py, 因子定义的alphas101.py和因子计算的alphas.py。另外还有程序运行的入口课件和用来存放数据的目录

数据的下载和因子的处理的工程部分就不多做赘述,直接调用即可,我们看一看alphas101里面的内容

这里用python构造了论文中的所有因子,并且把他们封装成了一个类,用的时候只需实现这个类即可,非常方便,并且每个因子的计算公式都详细的注释到了后面。 我们挑一个简单一点的因子进行说明,比如alpha012,他代表着“最近一天成交量上涨,同时收盘价大降;或者成交量下降,同时收盘价大涨的股票对应的因子值较大。”光看描述,我们知道这是描述价量分歧的因子。
其余的因子也可以自己分析或者去网上找现成的分析,我建议找现成的分析节约时间,挑有用的看。
下面我们开始下载数据:
首先导入相印的包并且运行下载程序,这里的程序高度封装,直接运行即可:

这一步会运行的非常之慢,不要怀疑你的电脑卡了,因为程序会下载90年代至今的所有股票的价量数据,看看你的文件夹里是不是多出来了一大堆文件。
(写到这里的时候我发现电脑确实卡了,似乎是因为jupyter对于多线程的支持不好,所以我们等一会看到文件夹里的文件不更新了,就可以手动点上面的方框终止程序,然后从下面的代码开始运行。(或者直接用命令行运行datas.py,这个不会卡)
接下来我们计算所有的因子供后面回测使用,这里为了节约时间,我们只计算2022年沪深300成分股的所有因子
list_assets,df_asserts = get_hs300_stocks(f'2022-01-01')
download_index_data("sh000300")
Alphas101.generate_alphas(2022, list_assets,"sh000300")
不要紧张这里不会卡,这一步是真的慢,当然你也可以把代码改造成只计算你想测试的单个因子,那样会快很多。
运行的过程中我们可以看jupyter notebook提供的窗口,他会显示我们每个因子计算的耗时,等到全部寄算完之后,会出现一个Dataframe的显示,并且notebook里也会显示运行结束了。

都计算完成之后,接下来就没有很慢的操作了,还记得我们上一节课讲的因子测试吗?我们这里就要用到因子测试的工具了。
这里的year指定我们的测试年份2022年,alpha_num指定我们想测试哪个因子,这里我们以第六个为例,所以指定他为6,这个可以随便改。
运行之后我们即可得到关于alphas6这个因子的全部测试报告啦,感兴趣的话你可以改一下代码,测试一下全部的因子,看看目前a股还有哪个是最有效的?

源码运行到最后可能会报错,可以忽略,想解决的网上搜一下报错,也挺好解决的。
写到这里这一节的正式内容就结束了,但是有没有想过,这里的因子测试并没有考虑费用等因素呢?我们日常交易是有很多限制的,比如涨跌停买卖限制,手续费,印花税等等,这个因子测试对于因子有效性的检查是足够了,但是要想成为一个策略,一定得经过回测的检验。
那么就要复习我们前几节课的内容了,使用backtrader进行回测。
这里代码太长,就不放了,运行封装的函数即可,结果图如下:

我们发现这个回测结果和我们的因子测试结果有一定的出入,你知道是为什么吗?
欢迎关注同名微信公众号【量化的韭菜】或知识星球获取更多内容