§ 因子投资与机器学习策略

课程大纲

大纲说明

1. 导论

1.1. 因子投资的起源

1.2. 寻找 Alpha

1.3. 从 CAPM 拓展到多因子

1.4. 从因子分析到因子投资

1.5. 从因子模型到交易策略

1.6. 关于课程编排

这门课面向的对象是专业的量化研究员、或者打算向这个方向转岗求职、或者尽管是其它职业,但决心以专业、严谨的态度探索量化研究的学习者。

学完这门课程并完全掌握其内容,你将具有熟练的因子分析能力、掌握领先的机器学习策略构建方法,成为有创新研究能力和比较竞争优势的量化研究员。

课程内容涵盖了因子挖掘、因子检验到构建机器学习模型的过程。如果要独立从事交易,还需要补充学习《量化 24 课》。


2. 因子预处理流程

2.1. 因子数据的来源

2.2. 因子生成

2.3. 因子预处理

2.3.1. 异常值处理

2.3.2. 缺失值处理

2.3.3. 分布调整

2.3.4. 标准化

2.3.5. 中性化

这一章及下一章是因子检验的基础。我们将结合大量的示例代码,介绍因子检验的基本原理与技术实现细节,为后面理解Alphalens因子分析框架打下坚实基础。


3. 因子检验方法

3.1. 回归法

3.2. IC 分析法

3.3. 分层回溯法

3.4. 因子检验的代码实现

3.4.1. 生成因子:进一步模块化

3.4.2. 因子预处理:接入真实的数据

3.4.3. 计算远期收益

3.4.4. 回归分析的实现

3.4.5. IC 分析法实现

3.4.6. 分层回溯法实现

3.5. 三种方法的区别与联系

本章介绍了回归法、IC法和分层回溯法的原理及实现代码。这一章完成后,你已经可以自己实现一个简单的因子分析框架了。这对理解Alphalens的实现非常有帮助。


4. 初识 Alphalens

4.1. 斜率因子:定义和实现

4.2. 如何为 Alphalens 计算因子和收集价格数据

4.3. Alphalens 如何实现数据预处理

4.4. 因子分析与报表生成

4.5. 参考文献

Alphalens将因子检验过程进行了高度的抽象,把我们在前面两章讲到的步骤封装成两个函数,而大量的定制则是通过参数来实现。我们将介绍Alphalens要求的输入数据格式、它是如何通过参数来控制分层、缺失值处理、远期回报计算等行为的。

通过这一章的学习,你将掌握Alphalens最基本的用法。


5. Alphalens 报表分析

5.1. 收益分析

5.1.1. Alpha 和 Beta

5.1.2. 分层收益均值图

5.1.3. 分层收益 Violin 图

5.1.4. 因子加权多空组合累计收益图

5.1.5. 收益的分层驱动

5.1.6. 多空组合收益的稳健性

5.2. 事件分析

5.3. IC 分析

5.4. 换手率分析

Alphalens的报告并非不言自明。比如,它没有告诉你Alpha和beta各是什么单位,bps单位又是多少;它更不会告诉你,什么样的Alpha是好的,什么样的Alpha则是好到不能相信;有一些报表,它的计算方式与你想像的、或者曾听说的不太一样。

为了准确地理解这些报告,我们使用了三种方式:1. 阅读、调试源码的方式。通过这种方式,我们发现bps是万分之一,定义在plotting.py这个文件中;2. 使用合成数据,这样我们理解了最好的因子理论上应该产生什么样的图表报告;3. 通过Github issues, Quantopian社区Archive的文档,从其它用户的问题中找到答案。

这将是现阶段全网惟一一个真正讲透了Alphalens的教程。


6. Alphalens 高级技巧(1)

6.1. 排除功能性错误

6.1.1. 过时的 Alphalens 版本

6.1.2. MaxLossExceedError

6.1.3. 时区问题

6.2. 因子的单调性

6.3. 再谈收集价格数据

6.4. 该如何分析日线以上级别的因子?

6.5. 深入因子分层

6.5.1. 有确定交易信号的因子

6.5.2. 离散值因子

这一章我们将介绍如何排除Alphalens在使用中可能遇到的错误,既有程序性的,也有逻辑性的。我们还介绍了如何进行日线以上级别的因子分析。很多网上教程甚至都没意识到这里会存在问题,因为他们从来没有做过这个级别的分析。

我们还深入探讨了Alphalens的分层机制,包括如何处理因子值是离散值的情况。


7. Alphalens 高级技巧(2)

7.1. 重构因子检验过程

7.2. 参数调优:拯救你的因子

7.2.1. 修正因子方向

7.2.2. 过滤非线性分层

7.2.3. 使用最佳分层方式

7.3. 过拟合检测方法

7.3.1. 样本外检测

7.3.2. 绘制参数高原

7.4. 关于多空组合的思考

使用Alphalens进行因子检验,就像做一场面试一样,你得尽可能暴露因子的潜能,然后才能评估它的好坏。这一章我们将介绍如何想尽办法把因子的潜能挖掘出来,同时,又不要受过拟合的欺骗。除了样本外检测之外,我们还会教你通过绘制参数高原来评估因子的过拟合程度。

可视化很重要。尤其是你的工作,需要与他人合作时。


8. Alpha101 因子介绍

8.1. Alpha101 因子中的数据和算子

8.2. Alpha101 因子解读

8.3. 如何实现 Alpha101 因子?

Alpha101因子库是World Quant发表于2015年的一个因子库。其中有80%的因子是在世坤正式使用(发布时间)的。我们将介绍如何读懂Alpha101因子的公式,实现它的算子。

整个因子库的实现已经有较好的开源库,我们也将介绍。这会成为你的兵器库中的宝贝之一。


9. Talib 技术因子

9.1. Ta-lib 函数分组

9.2. 冷启动期 (unstable periods)

9.2.1. RSI

9.2.2. ADX - 平均方向运动指数

9.2.3. APO - 绝对价格震荡指标

9.2.4. PPO - 百分比价格震荡指标

9.2.5. Aroon 振荡器

9.2.6. Money Flow Index

9.2.7. Balance of Power

9.2.8. William's R

9.2.9. Stochastic 随机振荡指标

9.3. 成交量指标

9.3.1. Chaikin A/D Line

9.3.2. OBV

9.4. 波动性指标

9.4.1. ATR 与 NATR - 平均真实波幅

9.5. 8 种移动平均线

9.6. Overlap 研究

9.6.1. 布林带

9.6.2. Hilbert 趋势线和 Sine Wave Indicator

9.6.3. Parabolic Sar

9.7. Momentum 指标

Alpha101因子多数是量价因子,由于可以想到的原因,它没有重复早已存在多年的经典技术因子,但这些因子仍然有它的Alpha存在。这一节我们会简单介绍下talib库,讲解技术指标的冷启动期 -- 可能是一个比较冷的知识,冷启动期不止是NaN,比如,RSI的冷启动期就比较长,是win参数的3倍。

Talib的技术指标很多,我们会每类介绍几个,重点介绍在新的技术条件下,如何翻新这些因子。以RSI为例,我们会讲intelli-RSI,Connor's RSI。这样你不仅得到了一些新因子,还提升了自己创新研究的能力。

即使是一些有经验的人,也可能是初次听说我们讲要介绍的一些因子。比如像Hilber Sine Wave,这可是在Trading View等平台上比较好卖的付费技术指标之一。


10. 其它因子

10.1. 黑天鹅因子

10.2. 策略评估类因子

10.2.1. 最大回撤

10.2.2. 波动率

10.2.3. 夏普率

10.2.4. 索提诺比率

10.2.5. Calmar 因子

10.3. 导数因子

10.3.1. 一阶导因子

10.3.2. 二阶导因子

10.4. 频域因子

10.5. TSFresh 因子库

10.6. 行为金融学因子

10.6.1. 整数关口因子

10.6.2. 压力/支撑因子

10.6.3. 缺口因子

10.6.4. 遗憾规避理论因子

有一些小概率因子很容易做出来。也许正因为是这样的原因,它们没有名字,也没有上论文的机会。但是它们的Alpha真实存在。比如指数单日最大跌幅、最大连续跌幅等等。其背后的原理是极端事件之后的概率回归。

总之,这是比较炫技和创新的一章。我们会介绍二阶导因子、频域因子、行为金融学因子。比如,频域因子是通过快速傅里叶变换或者小波变换,找出主力资金的操作周期来进行预测的因子。在其他人还停留在使用小波平滑噪声的阶段,我们已经开始使用它来探索主力资金的规律了!


11. 基本面因子和另类因子

11.1. Famma 五因子

11.1.1. 市场因子

11.1.2. 规模因子

11.1.3. 价值因子

11.1.4. 盈利因子

11.1.5. 投资因子

11.2. 另类因子

11.2.1. 社交媒体情绪因子

11.2.2. 网络流量因子

11.2.3. 卫星图像因子

11.2.4. 专利申请因子

11.3. 爬虫的技术路线

这一部分我们讲思路会比较多。因为另类因子要么去买,要么去爬。但我们不想讲爬虫。


12. 因子挖掘方法

12.1. 新因子从哪里来

12.2. 网络资源

12.3. 因子正交性检测

12.4. 谈谈因子动物园

这也是谈天谈地比较务虚的一章,但依然干货满满。我们会谈一些找资源的方法,比如怎么找论文、数据等。到现在为止,我们已经介绍了好几百个因子(不算参数和周期),所以,我们也需要看看究竟有多少因子是独立的。所以,我们会介绍正交性检测方法。


13. 机器学习概述

13.1. 机器学习分类

13.1.1. 机器学习、深度学习、强化学习

13.1.2. 监督无监督和强化学习

13.1.3. 回归与分类

13.2. 机器学习模型简介

13.3. 机器学习三要素

13.4. 机器学习基本流程

13.5. 机器学习应用场景

机器学习快速入门。世界是连续的,还是量子?这是一个古老的哲学问题,也决定了机器学习的基本模型 -- 回归还是分类?


14. 机器学习核心概念

14.1. 偏差、方差

14.2. 过拟合与正则化惩罚

14.3. 损失函数、目标函数和度量函数和距离函数

14.3.1. 损失函数和目标函数

14.3.2. 度量函数

14.3.3. 距离函数

这门课程是一门应用课程,不想涉及太多理论,但如果一点原理都不懂,就只能照搬照抄示例,无法进行任何拓展。因此,我们决定选择跟应用层密切相关的基本概念进行讲解 -- 只有了解了这些概念,我们才懂得如何选择目标函数,如何评估策略,如何防止过拟合等等。


15. SKLearn 通用工具包

15.1. 数据预处理:preprocessing

15.2. metrics

15.3. 模型解释与可视化

15.4. 内置数据集

sklearn 是一个非常强大的机器学习库,以丰富的模型和简单易用的接口赢得大家的喜爱。在这一章,我们先向大家介绍 sklearn 的通用工具包 -- 用来处理无论我们采用什么样的算法模型,都要遇到的那些共同问题,比如数据预处理、模型评估、模型解释与可视化和内置数据集。


16. 模型优化

16.1. 优化概述

16.2. k-fold cross validation

16.3. 参数搜索

16.3.1. 网格搜索

16.3.2. 随机搜索

16.3.3. 贝叶斯优化

16.4. Rolling Forecasting

量化领域的机器学习有它自己的特殊性,比如在交叉验证方面,我们实际上要使用的是一种称为 Rolling Forecasting(也称为 Walk-Forward Optimization 的方法)。


17. 聚类:寻找 Pair Trading 标的

17.1. 聚类算法概述

17.2. HDBSCAN 算法原理

17.3. 寻找 Pair Trading 标的

17.3.1. HDBSCAN 示例

17.3.2. 结果评估

17.3.3. 配对选择

在量化交易中,Pair Trading 是一类重要的套利策略,它的先决条件是找出能够配对的两个标的。这一章我们将介绍先进的 HDBSCAN 聚类方法,演示如何通过它来实现聚类,然后通过 statsmodels 中的相关方法来执行协整对检验,找到能够配对的标的。最后,我们还将演示如何将这一切组成一个完整的交易策略。

这将是你学会的第一个有效的机器学习策略。


18. 从决策树到 XGBoost

18.1. 决策树

18.1.1. 决策树分类

18.1.2. 决策树回归

18.2. XGBoost

18.2.1. 熟悉训练数据

18.2.2. 构建第一个分类器

18.2.3. 可视化特征重要性

18.2.4. 查看模型树

18.2.5. 交叉验证

18.2.6. 调优

受限于金融数据的高噪声,现阶段端到端的交易策略还不太可行;又受限于标注数据的大小,深度学习等人工智能模型也不适用于交易策略的构建。在机器学习模型当中,目前最优秀的模型就是梯度提升决策树模型。代表实现是XGBoost和LightGBM。

这一章将完整地介绍XGBoost模型,并且通过示例来演示如何使用、如何inspect和visualize生成的模型,如何执行交叉验证和参数调优。


19. 基于 XGBoost 回归模型的价格预测

19.1. 策略原理

19.2. 策略实现

19.3. 策略优化思路

资产定价是量化研究的核心问题之一,如果能够给出资产的合理定价,那么就能给出交易信号。

定价是个回归问题。尽管很难实现端到端的价格预测模型,我们还是以巧妙的构思,做出来一个可以预测未来价格的回归模型(理论上能自洽)。

我们不能保证这个模型总是有效的,有许多改进方案我们还没来得及探索,但是,以此为出发点,你在机器学习交易模型构建上,已经占据了领先优势。


20. 基于 XGBoost 分类模型的交易策略

20.1. 策略原理

20.2. 策略实现

20.2.1. 数据标注工具

20.2.2. 模型实现代码

20.2.3. 模型评估与优化

在这一章,我们将构建一个基于XGBoost分类模型的交易模型。换句话说,它不负责预测价格,但能告诉你应该买入、还是卖出信号。学完这一章,你一定会认同,模型肯定就该这么构建,剩下的都是工作量而已:你需要构建系统、标注数据、构建特征,然后训练模型。


21. XGBoost 再思考

21.1. 更好的 XGBoost: LightGBM?

21.2. 如何构建组合?

21.3. 资产定价模型还是交易模型?

21.4. 为什么是 XGBoost,而不是神经网络?

XGBoost很好,但LightGBM可能在内存占用、某些场景下的训练速度上会更优。这一章将介绍LightGBM如何使用。我们会给一个完整的例子,但不会涉及太多细节。这就是你常常在其它课程中会看到的那种内容。


22. 结语与展望

22.1. CNN 网络识别 K 线模式

22.1.1. 如何获得免费 GPU 资源

22.1.2. 示例

22.1.3. CNN 模式识别的问题

22.1.3.1. 数据集增广
22.1.3.2. 错放的容错能力

22.2. Reinforcement Learning

22.2.1. 强化学习基础

22.2.2. 为什么强化学习适合量化交易?

22.2.3. 强化学习资源

22.3. 其它重要智能算法

22.3.1. kalman filter

22.3.2. Genentic Algo

前面讲过为什么深度学习还不太适合构建量化交易模型。这一章前面部分,我们会通过一个CNN识别k线模式的例子,来说明为什么。了解了这些局限之后,也许你能够发明一种新颖的模型,适合量化交易。这一部分没能教你可带走的工具和经验。但是如果你是研究型、创新型的人,你可能会觉得这一部分内容也非常有价值。

强化学习是我们比较看好的一个方向,特别是用在商品期货和加密货币交易中。我们会介绍一些入门知识和学习资源。

还有两个重要的智能算法,既不是机器学习,也不是深度学习或者强化学习,但在量化中确实也比较常用,就是kalman filter和genetic algo。我们会介绍一些入门知识和它们的应用场景,把更多的探索空间留给你。


说明

1. 本大纲并非课程教材目录,比如,许多章节有《延伸阅读》或者《参考文献》小节,均未在此显示。

2. 课程内容还包括习题,未在此显示

3. 课程内容还包括补充材料,比如完整的 Alpha101因子实现代码(从数据获取、因子提取、因子检验到回测)及其它示例代码,未在此显示

4. 三级及三级以下目录有可能部分临时变更

  1. 导论
  1. 因子预处理流程

2.3. 因子预处理

  1. 因子检验方法

3.4. 因子检验的代码实现

  1. 初识 Alphalens
  1. Alphalens 报表分析

5.1. 收益分析

  1. Alphalens 高级技巧(1)

6.1. 排除功能性错误

6.5. 深入因子分层

  1. Alphalens 高级技巧(2)

7.2. 参数调优:拯救你的因子

7.3. 过拟合检测方法

  1. Alpha101 因子介绍
  1. Talib 技术因子

9.2. 冷启动期 (unstable periods)

9.3. 成交量指标

9.4. 波动性指标

9.6. Overlap 研究

  1. 其它因子

10.2. 策略评估类因子

10.3. 导数因子

10.6. 行为金融学因子

  1. 基本面因子和另类因子

11.1. Famma 五因子

11.2. 另类因子

  1. 因子挖掘方法
  1. 机器学习概述

13.1. 机器学习分类

  1. 机器学习核心概念

14.3. 损失函数、目标函数和度量函数和距离函数

  1. SKLearn 通用工具包
  1. 模型优化

16.3. 参数搜索

  1. 聚类:寻找 Pair Trading 标的

17.3. 寻找 Pair Trading 标的

  1. 从决策树到 XGBoost

18.1. 决策树

18.2. XGBoost

  1. 基于 XGBoost 回归模型的价格预测
  1. 基于 XGBoost 分类模型的交易策略

20.2. 策略实现

  1. XGBoost 再思考
  1. 结语与展望

22.1. CNN 网络识别 K 线模式

22.2. Reinforcement Learning

22.3. 其它重要智能算法