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. 三级及三级以下目录有可能部分临时变更