Syllabus
Table of Content
§ 因子投资与机器学习策略
课程大纲
大纲说明
## 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.2.4. Grid Search
### 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. 三级及三级以下目录有可能部分临时变更