Quant 应该学习哪些 Python 知识?
17 个回答
上知乎日报了,来更新点自己的Python知识体系,个人经验,欢迎拍砖。
-------------------------------------------------------------------------------------------------------------
谢青木资本龙哥邀!
答主更多应该算一个trader而不是quant(虽然对quant的一些知识也略懂),下面的答案可能更多是从一个交易员的角度来回答。
想在市场上赚钱,必须同时具备两样能力:
- 研究:做出正确的能够获利的决策,也就是寻找Alpha的能力
- 交易:基于研究的结果和交易信号,执行相应的下单风控等操作,也就是将Alpha落实到你账户盈利上的能力
研究方面
龙哥的答案已经覆盖了常用的库,这里就从研究的整体方向上来介绍下:
- 获取数据:可以选择使用TuShare、通联、万得等数据工具下载数据,并将原始的数据格式转化为你自己想用的数据格式(可以用Python脚本实现),以保存到数据库中
- 存储数据:几乎绝大部分常用的数据库都提供了Python接口,SQL/NoSQL/HDF5等等多种,最常用的应该是MySql和MongoDB,有兴趣学Q的也可以直接去用KDB+,数据库具体会应用的方向包括保存数据、读取数据、数据补全机制、数据变频(TICK变K线等)
- 数据回测:将数据读取到内存中后(以numpy数组或者pandas序列的形式),进行策略的回测,并对回测结果进行研究(matplotlib绘图),或者对参数进行优化(scipy等)
- 建模相关:对数据进行一些统计学检验(statsmodel)以及机器学习建模(scikit-learn)
- 集成开发环境:在有针对性的IDE中实现以上步骤会更加简便快捷(ipython/spyder)
交易方面
这部分是答主的主场了,主要分为两块:
1. 执行交易:对于绝大部分量化策略,都在一定程度上需要自动/半自动的下单功能。
- CTA策略突破入场(秒级延时)
- 期权做市实时挂撤单(毫秒级延时)
- 股指期货高频(微秒级延时)
- 分级基金套利(批量自动下单,延时没有以上几种重要)
- Alpha套利(篮子交易,一般要使用vwap等算法)
2. 策略风控:同样一般需要自动或者半自动的风控功能.
- 期权组合的希腊值风险实时监控对冲
- 分级基金套利的beta净敞口、行业暴露等实时监控对冲
- Alpha套利策略的因子监控
具体需要掌握的知识:
1. 模拟实盘交易的策略回测:将策略重新编写为可以基于数据回放(逐TICK/逐K线)的模式进行回测的程序,模拟实际交易情况,杜绝未来函数的可能性,实盘交易中使用完全相同的程序进行交易,保证实盘和回测的一致性。这块通常需要专门的框架或者程序,比如通联的优矿、掘金、vn.py框架中的vn.strategy等。
2. 实盘交易接口:将想要下的单子通过交易接口发送到经纪商柜台,目前可以实盘直接使用的应该包括掘金(期货)、vn.py中的vn.lts(证券、期权)和vn.ctp(期货)。如果要使用其他的柜台需要自己封装,如恒生、金证等。
3. 其他语言拓展:作为最有名的胶水语言之一,Python的拓展功能不用绝对是浪费。针对计算瓶颈可以使用cython拓展,针对API可以用boost.python和swig进行封装,调用matlab直接运行其中提供的特定算法,使用COM接口调用Excel自动生成每日交易记录和报表......
4. GUI程序的开发:相当数量的量化交易依旧需要交易员进行实时监控,除了在cmd中不断print一些数据外,更合理的方案是开发自己需要的GUI界面,重点推荐PyQt,比在C++中用Qt开发要来的快捷很多,底层运行的也是C++的代码,速度完全不用担心。一些有特别需求的人也可以考虑开发在浏览器中显示的界面,比如经常想用手机远程监控。
目前就想到这些,回头发现遗漏的再补充。
-----------------------------------------------------2015年8月6日更新----------------------------------------------
个人的Python知识体系:
研究方面
1. 期权目前国内的历史数据较少,所以整体上用万得的API就足以满足需求,做CTA策略研究会从MC导出csv格式的数据再读取到Python中,目前在研究通联的接口,原因无他:方便和性价比。
2. 数据储存主要用MongoDB,主要原因同样是方便,既可以用来存历史的行情数据(Tick,K线),也可以存交易系统的日志,甚至用来保存交易系统参数设置等等,存取数据如同使用Python字典一样方便(MySql试过用不惯)。
3. 数据回测,比较粗的回测一般就直接在Spyder里随手写测试脚本:读取原始数据,用矩阵的形式计算一些变量(技术指标、希腊值),然后用循环逐行跑回测,结果出来后用matplotlib绘图很方便。比较精细的回测会基于vn.py中模拟实盘交易的回测框架,在速度上会慢些,但是可以基本杜绝未来函数。
4. 建模相关:这块不是本人的主攻领域,偶尔有需求拿SciPy边看文档边写。
5. 集成开发环境:交互式开发写策略回测一般用Spyder,开发大型程序的时候用WingIDE(朋友友情支持的正版,不得不说非常给力),智能提示、自动完成可以大幅提高开发效率。
6. 交易接口:就是答主自己开发的vn.py框架了,期货方面是CTP接口,股票和期权方面是华宝的LTS接口,熟知大部分底层开发细节(为了封装接口,没办法)。然后针对不同的交易类型、交易策略,针对性的开发一些Python函数和算法,在其中实现特殊的简化下单功能(这些上层功能没放到框架中)。
7. Python语言拓展:必须掌握的是cython,提升python计算性能的神器;另外为了封装API用的boost.python,和swig比起来的主要好处是封装完全使用C++语言,同时答主也没有在java/perl中调用封装模块的需求。
8. GUI开发:PyQt,功能强大,文档也比较全;高性能的实时绘图:pyqtgraph,一些风控分析的图表可以用matplotlib(嵌入到PyQt中),生成的图表质量更高。
最后关于Python在量化交易领域的地位:
答主认为就像Javascript现在在web领域的地位一样,Python现在可以几乎覆盖整个量化交易业务链:从研究到写交易程序,一气呵成(可以叫做全栈Quant?)。其他的语言总会有这样那样的短板:
C++/C#/Java:适合写交易程序,不适合用来做策略开发
Matlab/R:适合做策略开发,但是在交易执行方面存在不少问题:速度、不稳定等等
Python:速度不如C++,策略开发不如Matlab,但其作为胶水语言,使用这样那样的小技巧后,在两个方面都能满足需求
最后也是很多人喜欢问的:Python确实不适合开发超高频/超低延时(追求的性能提升在微秒级)的交易策略,不过:
1. 在当前时间点,这个需求已经不那么迫切了;
2. 很多资金容量大能赚大钱(不一定是超高的回报率)的策略对延时的要求并没有那么高
so it's all up to you
往期高赞内容
量化方向文章:
量化方向回答:
- 如何学习盈透 api 的开发?
- 什么是隐含波动率 (Implied Volatility) ?
- 有哪些程序化交易方面的 GitHub 作者值得关注?
- Quant 是否是一个江河日下的职业?
- 有没有回测和实盘交易用同一份代码的量化交易框架?
- 如何搭建一个量化交易实验系统做教学用?
- 外汇收益真的有那么高吗?
- 你有哪些心中珍藏值得推荐的好书?
欢迎关注vn.py社区微信公众号:vnpy-community
对于Quant Researcher来说,编程和量化策略缺一不可。和Quant dev不同,Researcher需要的更多是一种量化策略的解读、实现、开发新策略的能力
就Quant Researcher的Python编程而言,最基础的是数据分析是必须的。一些参考资料分享给你
推荐一些量化投资学习资料(持续添加中...)推荐一些Python入门学习资料(持续添加中...)【资料分享】Python、研究报告、计量经济学、投资书籍、R语言等!(Book+Video)
【散沙】Python科学计算系列
初级Quant Researcher,斗胆总结分享一下自己的python学习路径
首先是python的基础知识:
python的基本知识一定要熟练掌握,尤其是python中非常好用的迭代器和解析
【量化投资利器Python】基本语法-数据类型1之列表【量化投资利器Python】基本语法-数据类型2之字典
【量化投资利器Python】基本语法-数据类型3之元组、集合
【量化投资利器Python】条件与循环-if、while、for【量化投资利器Python】神奇的迭代器和解析【量化投资利器Python】基本语法
-函数
接下来是常用的基本类库
时间库
常用的时间格式有三种,常用到其之间的互相转化
1)时间戳(timestamp)的方式:
通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。
2)格式化的时间字符串,比如"%Y-%m-%d %H:%M:%S"
3)元组(struct_time)方式
【量化投资利器Python】基本类库-时间
NumPy
NumPy系统是Python的一种开源的数值计算扩展。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。
NumPy — Numpy1. NumPy Basics: Arrays and Vectorized Computation可以参考书
Python科学计算之numpy
SciPy
SciPy是一款方便、易于使用、专为科学和工程设计的Python工具包。它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等。
SciPy.org — SciPy.org可以参考书
Python科学计算之scipy
Pandas
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 可以参考书《python for 数据分析》,也可以到这里下载
【资料分享】Python、研究报告、计量经济学、投资书籍、R语言等!(Book+Video)【量化投资利器Python】基本类库-Pandas入门1之数据结构
【量化投资利器Python】基本类库-Pandas入门2之数据处理
【量化投资利器Python】基本类库-Pandas进阶
学完以上三篇教程,pandas的大部分功能已经可以使用,更多功能可以到官网
pandas: powerful Python data analysis toolkitctrl+F搜索函数帮助
TA-LIB
TA-Lib 用中文可以称作技术分析库,是一种广泛用在程序化交易中进行金融市场数据的技术分析的函数库,提供了多种技术分析的函数,可以大大方便我们量化投资中编程工作。
Ta-Lib用法介绍!指标计算和形态识别的编程利器——TA-Lib
talib在量化投资中具体的使用例子
量化投资学习【TA-LIB】之MACD量化投资学习【TA-LIB】之Bollinger Bands量化投资学习【TA-LIB】之STOCH(KD指标)
量化投资学习【TA-LIB】之ATR
量化投资学习【TA-LIB】之RSI
Scikit-Learn
是基于python的机器学习模块,基于BSD开源许可证。scikit-learn的基本功能主要被分为六个部分,分类,回归,聚类,数据降维,模型选择,数据预处理。Scikit-Learn中的机器学习模型非常丰富,包括SVM,决策树,GBDT,KNN等等,可以根据问题的类型选择合适的模型。
在量化投资中具体的使用例子
【机器学习】时间序列波动率估计【机器学习】上证指数十年走势交易策略中的参数优化问题
【机器学习】缠论中的线性回归
【机器学习】非参数型聚类分析
深度学习简介
SVR预测股票开盘价
【机器学习方法研究】——思路整理、支持向量机
其他一些以上提到的几个库的具体量化策略研究应用。
【QLS】线性回归【QLS】线性相关分析【QLS】斯皮尔曼秩相关系数
【QLS-6】过拟合
【QLS7】参数估计的不稳定性
量化投资学习【QLS-8】之模型设定
【QLS9】回归模型假设的违背
【QLS10】回归分析
【QLS12】套利定价理论
【QLS15】最大似然法(MLE)
【QLS16】ARCH和GARCH
【QLS17】多空策略
【QLS19】动量交易策略
【QLS20】度量动量
配对交易策略
凸优化(Convex Optimization)介绍!
最后还是要说一句,python只是一种工具,重要的还是策略思想,前期可以通过阅读大量资料获取,然后自己实验、分析逐步总结。推荐一些经典书籍和研究报告,可到
【资料分享】Python、研究报告、计量经济学、投资书籍、R语言等!(Book+Video)获取
Quant Interview Books
- 150 Most Frequently Asked Questions on Quant Interviews
- [Mark Joshi]Quant Job Interview Questions And Answers
- [Xinfeng Zhou]A practical Guide to quantitative finance interviews
- Frequently-Asked-Questions-Quant-Interview
- Heard on the Street Quantitative Questions from Wall Street Job Interviews
- The 200 Investment Banking Interview Questions & Answers You Need to Know
投资阅读书籍
- algorithmic trading winning strategies and their rationale
- barra handbook US
- Encyclopedia of Trading Strategies(交易策略百科全书)
- Inside the Black Box -A Simple Guide to Quantitative and High Frequency Trading(2nd.Edition)
- NASSIM Taleb-Dynamic Hedging
- Options Futures and Other Derivatives 8th - John Hull
- Quantative Trading Strategies
- Quantitative Equity Portfolio Management:Modern Techniques and Applications
- Quantitative Trading How to Build Your Own Algorithmic Trading Business
- Quantitative Trading How to Build Your Own Algorithmic Trading Business
- 《New Trading Systems and Methods》 Perry J.Kaufman 4th Edition.pdf
- 《专业投机原理》 完整版 (美).维可多·斯波朗迪
- 保本投资法 不跌的股票(高清)
- 打开量化投资的黑箱
- 股市趋势技术分析(原书第9版-珍藏版)
- 海龟交易法则
- 解读量化投资:西蒙斯用公式打败市场的故事
- 解密对冲基金指数与策略
- 精明交易者 - 考夫曼
- 量化交易 如何建立自己的算法交易(高清)
- 量化交易策略—利用量化分析技术创造盈利交易程序
- 量化数据分析 通过社会研究检验想法
- 量化投资策略-如何实现超额收益alpha
- 量化投资策略与技术修订版
- 期权投资策略 第4版(高清)
- 数量化投资:体系与策略
- 通往金融王国自由之路
- 统计套利(中文版)
- 网格交易法 数学+传统智慧战胜华尔街
- 我是高频交易工程师:知乎董可人自选集 (知乎「盐」系列)
- 主动投资组合管理 创造高收益并控制风险的量化投资方法(原书第2版)(高清)
- 走出幻觉走向成熟金融帝国文集
计量经济学
- 金融计量学从初级 到 高级建模技术
- 哈佛教材 应用计量经济学 stata
- 高等计量经济学 李子奈等编着
- 蔡瑞胸-Analysis of Financial Time Series- Financial Econometrics(2002)金融时序分析
- Phoebus J. Dhrymes, Mathematics for Econometrics, 4e
- Osborne,Rubinstein-A Course in Game Theory
- Model Building in Mathematical Programming(5e)
- Hayashi - Econometrics
- Gujarati-Essentials of Econometrics计量精要
- Akira Takayama - Mathematical Economics
- A Handbook of Time-Series Analysis, Signal Processing, and Dynamics - 1999
- 2013年金融数学
- Angel de la Fuente 经济数学方法与模型(上财版2003)
- 《经济学的结构--数学分析的方法(清华版)》Eugene Silberberg, Wing Suen
- Kamien & Schwartz, Dynamic Optimization(2ed,1991)
- CSZ - An Introduction to Mathematical Analysis for Economic Theory and Econometrics(草稿版)
研究报告
- 国信证券金融工程
- 大券商2016年年度投资策略报告
- 光大证券
- 海通证券
- 申万大师系列
- 他山之石系列
- 中信证券
- 广发证券