量化金融资源整理
量化金融资源整理
整理我量化金融一路走来的直路弯路,其中这些资源令我“相逢恨晚”。
1. 典型workflow
- 获取金融数据,数据来源有:
- 网上下载
- API数据接口/服务器(Python/R/MATLAB/Excel等)
- 本地数据库(SQL/HDF/CSV/KDB等,可通过Python读写)
- 爬虫(主要通过Python)
- 快速分析,对数据有个大概的印象和了解(excel或python/R等);
- 进行数据处理、分析、研究(python/R等,此时excel多无法胜任);
- 生成图表和结果(excel或python/R等);
- 撰写报告(word/markdown/jupyter notebook/PPT等);
2. 量化金融数据
后文所述Python大神器Pandas自带的金融数据接口(爬虫),可获取诸如Google Finance的股票数据、Morning Star的基金数据、世界银行、OECD的数据等。
万德金融数据库的量化接口,可以提取万德的所有数据。提供代码生成器,通过GUI直接生成所需的代码,复制粘贴即可使用。
(万德在国内金融数据提供商的地位就证明了它的重要性)
买不起万德的替代品,“穷人的WindPy “🤭,实际上是一个腾讯财经等网站的爬虫。
学术界常用,数据也十分齐全,相比万德性价比很高。
国外的金融数据接口。
量化金融软件
量化金融主要用到的软件是数据统计分析研究软件,其中最主要要用/学的是编程语言。
编程在量化金融中的作用主要是快速实现并测试你的想法。太过深入的Computer Science知识并非必要,能做到把自己的逻辑思维、数学过程用代码表达出来并成功运行即可。
所以出于研究的目的,你需要的编程语言和知识只要能满足你“快速迭代,便于进行数理统计”即可。
(进一步的需求如优化运算性能、对接其它API接口等则需要一定计算机知识。)
2.1 Python
由于其“胶水语言”的特性,虽然快速迭代不如excel和STATA、数理统计不如R和MATLAB、性能不如C和Fortran,但却绝对是量化金融领域应用最广泛的语言。
几乎所有的量化金融平台、几乎所有的金融数据接口、几乎所有的新兴研究领域(AI、ML等)都首选Python。
其自身代码易读、入门简单、包丰富、对接其他语言方便的优势也使其在金融数据爬虫、为高频交易优化性能、不同规模项目的支持、快速迭代开发算法等方面加分不少。
如果进入量化金融领域你只打算学一门语言,那就是Python了。
2.1.1 Python教程
个人认为中文互联网世界最好的python教程,简单清晰、易懂高效,无论是作为入门还是偶尔忘了回来温习都非常适合。
缺点是对量化金融来说不太适合,稍微偏向网页搭建而不是我们需要的数据分析,所以选择性的看即可,重点在于打下python的基础。
(个人认为看到面向对象编程就够了,当你出现优化性能、代码结构的需求时再补完后续的部分,图形界面之后的章节出于金融需求可全部忽略。)
社区氛围很好,推荐做完练习看看下面留言的各路大神的解答和小白们的问题,可以学习不同的语法,加深理解,也知道哪些坑不要踩。
非常经典的Zed Shaw的python教程,在基础知识上相较廖雪峰的版本更深入全面,得益于丰富的底层知识,这个教程对于你的编程思想、习惯、规范、甚至人生态度等都有点启迪,非常值得学习(手动滑稽)。
(同样不建议看完,基础部分掌握到Exercise 35即可,想学多点就读到Exercise 42,主要多了面向对象编程的知识。)
完成了Python基础学习后我最推荐的“编程-量化金融”承上启下书籍。
(建议不要花太多时间在编程学习上,一是因为量化金融的数据分析对编程要求并不高,二是因为我觉得一直学那些枯燥的东西很影响初学者的心情和成就感,先尝试用自己的方法取实现项目,即使自己的方法很笨。时间长了,你总有一天受不了自己的笨方法,再回头去按需学习,虽然看似浪费时间,但是一路上都很开心、很有动力。私以为比从头系统学习更佳。)
这本书不需要高深的编程技巧,但是建议一定细细读完,自己敲每一行代码。
作者Wes Mckinney是Python中著名的数据分析包pandas的作者,本身也是量化金融从业者,所以用的例子也都是金融经济相关的。(这点真的很加分!)
最重要的是这本深入浅出的高质量教程是一个非常好的量化金融入门,带你认识并掌握了今后你天天都要面对的numpy,pandas,matplotlib包🙂。
德国quant写的,非常全面,偏向金融衍生品,从数据库、数据读写、数学工具到相关金融研究不一而足,偏难,建议至少熟悉了基础的量化金融模型后再来读。
(有GitHub资源,py4fi - github,不想花钱可以只看GitHub,最近出了第二版)
很棒的资源整理,里面有书、网页、代码,每个链接每个项目都值得看一看、练一练。
非常高质量的量化金融博客,每一篇短小的文章都介绍一个非常干货的Python量化金融知识,涵盖许多很有用的包和用法,每个帖子都值得练练手。
非常薄的一本书,大概三小时就能读完,虽然例子是天文学,但用于一窥你能用Scipy和Numpy实现什么数学工具非常适合。
学习Python爬虫的入门书。
Python数据分析的大而全读物,更适合作为字典使用。
(但能啃完的话肯定对python在数学中的应用大有裨益。)
同上,建议用到再看,提升coding实力的好书。
深入浅出的HDF5学习书,HDF数据存储格式在量化金融领域至少在我看来还是很有用的。
不过使用HDF也可以不了解这么多底层知识,直接用pandas自带的HDFStore可以实现大部分需求。
Python官方的代码语法格式等规范,良好的语法格式习惯不只能提高代码可读性,还可以避免在未来有强迫症把你的代码从头到尾改一遍🙂。
2.1.2 Python工具库
应该毫无疑问是使用频率最高的Python量化金融工具。实现几乎所有关于数据表的操作。(表格读写、数据表操作、时间序列分析等)
Python自带模块,实现简单数学操作。(自然对数、求根等)
数据科学最重要的包,前述Pandas就是基于Numpy打造的,实现几乎所有关于数列、向量、矩阵、随机变量、随机分布的操作。(矩阵变换、向量运算、随机数、概率分布等)
整个Scipy模块对于金融来说太大了,其中最常用到的是stats模块,实现几乎所有关于统计分析、回归、拟合的操作。(OLS、t-test、凸优化等)
非常复杂但也好用的绘图包,几乎只会用到其中的pyplot模块,实现几乎所有有关绘图的操作。(折线图、柱状图、散点图等)
(matplotlib画出来的图不能显示中文和负号,我在另一篇文章里记录了如下的解决方法)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
plt.rcParams['axes.unicode_minus'] = False # 显示负号
曾经我羡慕R的ggplot绘图包画出来的图的颜值高,甚至一度成为我用R的理由之一,直到我遇见了seaborn🙂。
(基于matplotlib打造,故函数语法是通用的。)
由于金融数据多为时间序列数据,故对时间、日期的处理非常常见,datetime模块实现几乎所有关于时间、日期的操作。(当前时间、时区转换等)
但datetime在相对日期方面很难用,故特别推荐dateutil模块下的relativedelta包,实现相对日期的计算等操作。
用Python实现对你的电脑操作系统的操作。(获取工作路径、切换目录、删除文件等)
Python中较为主流的人工智能、机器学习模块,按照我认为的从易到难排列,其中Sklearn的Tutorial和Tensorflow的中文社区教程写得很好,可作为机器学习的入门教材。
在量化金融领域Sklearn应用较为广泛。
Python实现动态图表、可交互图表操作的利器。
Python实现爬虫的工具,前者难后者易。
实现Python对HDF5数据格式的操作。
由于部分包只支持Python2,而Python并不向后兼容,故有时需要用虚拟环境运行不同版本的Python。
可以查到几乎所有Python模块的地方,是个用来搜索你想要的模块的好地方。
2.2 R
学完了python之后再学R会觉得很简单,在嫌弃它不够优雅的语法的同时,你也会喜欢上它方便的数理统计功能。
实际工作中,若非必要我不会使用R,而尽可能全在Python中完成,除非遇到诸如单位根检验、ARIMA时序预测、GARCH等需求。
“R最大的优点是它是由统计学家设计的,最大的缺点是它是由统计学家设计的。”
2.2.1 R 教程
个人觉得R最好的教材(又是O'Reilly出版社),全本可在官网免费在线阅读。
侧重于介绍ggplot, tidyverse, dplyr等包。
(可能是因为相对专业,与Python少数几个“垄断”包的大一统不同,R有非常多“小”的包各成一派)
R的零基础教程,有点太详 (luo) 细 (suo)。
其实机器学习教材python的要多一些,但是R有关金融的好教材我接触的不多,所以依然推荐这两本。而且似乎金融领域的机器学习项目很多都是在R上完成研究的。
2.2.2 R 工具库
R 自带你需要的几乎所有数学分析工具,相当于自带了Python中的math、Numpy、Pandas、Scipy、Matplotlib模块,不需要任何第三方模块就可以实现前述的数据表、数理统计等操作。但仍有一些常用拓展,其中我觉得最常用的就是“Tidyverse宇宙”,包含以下package。
- Tidyr:数据清洗
- Tibble:数据表操作
- Dplyr:数据处理,很好用
- Purrr:函数与向量化操作
- Ggplot2:绘图包,颜值实力俱存,语法很优雅
- Tseries与Forecast:时序分析与预测
2.3 Jupyter Notebook
数据分析的特点使得传统的工作方式——代码、文字、图表分离——不太适合。于是有了这个专门为数据分析设计的大神器,将代码(Python,Ruby,Julia等)、文字(markdown)、图表全都展示在一个notebook里。(也就是“文学编程”)
安装Unofficial Jupyter Notebook Extensions后更可以将其武装成一个合格的IDE,包含变量观察窗、一键生成PPT等。
无论是自己做快速开发,还是分享给他人自己的思路成果,学界业界都十分常用.ipynb。
Jupyter还提供一个很好用的渲染器:nbviewer,可以把你的notebook用一个链接完整地分享给别人。
例如这篇在Jupyter中同时使用R和Python,也顺便安利这种用法,同时享受两个世界最好的部分。via 肖凯
Jupyter如此流行,以至于你在绝大多数量化平台的研究平台都能发现其实都是用Jupyter Notebook打包的,甚至微软也来插一脚:Azure Notebook,一个云端的Jupyter Notebook,让你不用在本地安装任何东西,只要一个浏览器和网络连接就能进行数据分析研究。
2.4 Excel (VBA)
Excel无法处理太大的数据、太复杂的操作,很容易卡顿甚至崩溃(神仙配置当我没说),扩展包也很不丰富。因此只适宜做简单、小规模的数据处理及分析。
但在它擅长的“超快速迭代、可视化、简单数据处理分析”方面是无可辩驳的神器。
会用基础运算、函数、作图即可,VBA也推荐掌握。
2.5 Stata,MATLAB,Eviews等
这一类都被我归为“老统计软件”的老家伙,都令人惊讶的好用,适合处理“用Excel太吃力,但用Python/R又太大动干戈”的任务。
其中MATLAB至今依然有非常活跃强大的扩展生态,用来完全取代Python和R也未尝不可。
2.6 Anaconda
数据科学大礼包,几乎所有上述你需要用到的东西都包含在Anaconda豪华套餐里🙂。
包括Python、R、Jupyter、RStudio、Spyder等,有GUI管理所有语言及其包——简而言之就是把你数据分析一路上的所有东西都装在里面了,懒人一键下载就可以了,其它都不用配置。
3. 其他工具
3.1 IDE (Integrated Development Environment,集成式开发环境)
- Spyder,风格很像MATLAB的Python IDE,支持Jupyter。(值得一提的是,这个软件本身就是用Python写的)
- Pycharm,个人认为最好的Python IDE,Jet Brain出品必属精品,对Git、Jupyter都支持的很好。
- RStudio,风格很像MATLAB的R IDE,R 首选。
- Visual Studio,“宇宙第一IDE”,提供专门的数据科学包,包括Python和R(和F😅),也很不错。
(不过其实私以为金融方向一般都不需要IDE,文本编辑器+终端就够了,IDE不仅太重,而且容易让人忽略底层知识。)
3.2 Text Editor(文本编辑器)
虽然就是一个编辑文本的工具,但别小看了,熟练使用一个文本编辑器不仅大大提升工作效率,同时也可能有超出你想象的长的学习曲线。
- Notepad++,轻
- Sublime Text,我认为在“轻量-功能”之间权衡的最好
- Atom,GitHub出品,我觉得颜值最高
- VSCode,我个人最喜欢的, “颜值-性能-功能-扩展性”之间权衡极佳
3.3 版本控制系统
毫无疑问是Git了。学习的话,如果求快参考廖雪峰的Git教程,求稳参考Pro Git。
4. 量化金融学习
- StackOverflow和CSDN,编程时遇到的99%的问题,都可以通过这两个网站以及英文搜索来解决🙂
- QuantEcon,非常高质量的网站,介绍经济学数理模型,有Python、Julia等的详细代码例子,很适合作为练手学习的教程
- Investopedia,我拿来当金融学名词解释字典😂
- Corporate Finance by Ross,公司金融,帮你了解量化研究中所用的金融财务指标的真实含义
- Investments by Bodie,投资学,了解基本金融学模型假设与原理
- Elements of Forecasting by Diebold,时序预测
- Introduction to Probability Models by Ross,随机过程,其课后题常见于量化面试题😂
- Active Equity Management 和Active Portfolio Management,量化界经典
- Empirical Asset Pricing,资产定价,我当作多因子参考教材
- Barra,从多因子到MSCI,应该算是量化金融的开山鼻祖模型了吧?国内研究的多数多因子模型也都由它演变而来。推荐精读,与其相关的多因子金工研报非常多,值得仔细研究
- Quantitative Trading Strategies,偏入门
- The Encyclopedia of Trading Strategies,大部头,适合当字典
- Successful Algorithmic Trading,Advanced Algorithmic Trading,Quantstart网站创办人的书,一本入门,一本拓展
- WindQuant College,万德的量化金融研究平台推出的课程,结合视频、Jupyter Notebook和练习题。个人觉得对于国内的量化金融学习属于必读的课程,学习内容非常精辟干货,着重在国内最主流的多因子/Barra模型 (使用Python教学)
5. 量化金融平台
这些网上的平台大多提供免费的数据接口API在线使用,可以快速验证你的思想,迅速构建策略、回测、在论坛交流研究等。较为常用的有以下几个,我个人比较起来米筐和万矿最好用。
- Ricequant,米筐
- Bigquant
- Joinquant,聚宽
- UQER,优矿
- Quantopian
- QuantStart,其创始人写的量化教程书也很不错