python多因子回测框架 多因子选股模型python_python 画竖线


好久没更,最近实在发生了太多的事情,人艰不拆。

很久之前我们聊到因子库的搭建与基本面因子的一些计算。这节主要讲基本面因子分析框架的搭建,为最后的决策的使用提供一个参考(为最后拍脑袋给权重提供一个依据)。

这里的分析主要还是针对基本面因子,技术因子的分析是另一个框架,因为技术因子的衰减比较快,分析的角度也会不一样。

1. 需要的数据

既然是分析基本面因子,我们分析的频率不需要那么高,可以放宽到月频。所以需要的数据大概如下:

  • 行情数据,分析因子收益的时候需要用到
  • 行业分类数据,现在用的比较多的是申万行业分类数据,但是这个数据在14年更新过一次,行业分类变多了,这样不能保证连续性,还得做回填的处理,比较麻烦,后面做风险模型使用申万的行业分类也会存在同样的问题,因此使用中信的会好一些。
  • 风险因子数据,用来分析因子与一些常见风险因子的相关性,如果有现成的Barra或者Axioma风险模型的数据可以直接拿来用,没有的话可能需要自己去计算

暂时想到那么多,后买如果还要分析其它的再补充。当然,如果看过我上一篇文章,这些取数据的接口都可以往里面加。

2. 结果的呈现方式

数据准备完之后,现在不管是知乎,还是各家量化平台也好,都有大量关于因子分析的内容,但是很多都是直接拿QuantOpian的Alphalens框架来用,或者改改就变成自家的框架了。这套东西已经讲烂了,但我们还是要保持自己独立的思考,比如使用别人的框架可靠性怎么保证,功能够不够全,衍生性好不好等等

那么,如果我们自己开发的话,给自己或者团队的其他小伙伴用,怎么应该怎样呈现结果?如果使用一些量化平台的框架,基本上就是

  • jupyter + matplotlib
  • jupyter + js插件

第一种有点类似Quantopian开发的Alphalens,在notebook里面调用相关函数,然后使用matplotlib或者是seaborn出图。但这种方法对于不使用Python的用户来说不友好,他必须得打开jupyter才能看到,这样他还得装个anaconda,而且图的交互性不是很好,基本上是静态的。

第二种方案通过一些前端的插件,这样在可以直接在notebook里面直接出动态交互的图,想Bloomberge的BQuant,还要BigQuant好像都是这种形式,WindQuant勉强也算是吧,但总归来说对不使用Python的人来说不是很友好。

我这里还是比较推荐最终的结果通过Excel的形式给出,Excel现在绘图的交互性也不错,领导打开,既能看到还能编辑分析计算的结果,甚至还能看中间的计算过程,而且Excel的图可以直接移植到PPT当中,用于对外的展示,是一个比较合理的方案。

所以我们借助xlsxwriter这个Python库来帮助我们把分析的结果写入excel当中。

3. 分析的内容

那么我们需要从哪些角度来分析一个基本面因子呢?

  • 因子的分布
  • ic,spread
  • ic衰减
  • 换手率
  • 5分位组表现
  • 10分位组表现
  • 月历效应
  • 与常见因子的相关性
  • 行业ic
  • 分组ic

我简单的列了个大概,其实内容还是不少的。不想再多说为什么要做这些分析了,本来想放个结果给大家看下,但是公司电脑屏幕有水印,所以还是算了。这篇帖子,如果有学生感兴趣,可以交流细节,最好可以自己动手用Python实现,算是一项基本的练习,也一定会为自己的简历增色。