Quant 对 python 的需求高吗

2024-05-04 12:59

1. Quant 对 python 的需求高吗

你好,很高兴为你解答:
1、需求高
2、还有:Python, Java, Matlab, R, Q和某些公司内部自有语言(如高盛的自有语言)但是我不希望敷衍了事,如果回答就展开了说,说说我心中最重要的五类语言。这不仅仅是对于一个Quant必须的,而是一个丰满的程序员所必备的。在艺术中,艺永远比术重要;在Quant相关知识中,intuition永远比纯technique更加重要。
两年前在Princeton,我和一位研究计算机语言的PhD两人吃饭聊天。他的主要研究方向就是新的计算机语言,及相关的逻辑学。大神如他一顿饭下来80%的时间处于放空状态,基本没在关注我,但我得到了我自以为深刻的理念:一种计算机语言是一种对应哲学的体现。
因此,在我看来,有五类语言构建了一个丰满的编程能力强的Quant的一切,它们分别是:效率类语言(C、C++、Java等)、胶水类语言(Python、Ruby等)、科学类语言(Matlab、R、S等)、Alpha演算类语言(Lisp、Clojure等)、查询类语言(SQL、Q等)。这是基于我理解浅薄的分类,完全与计算机科学的规范化分类(如面对对象语言、函数类语言)不相容。持不同意见者大可付之一笑。

1、效率类语言(C、C++、Java等):老派的Quant很多都是C++高手,特别是80年代涌入华尔街的那帮MIT的高能物理博士们。在那个年代,可以选择的语言不多。要么就Fortan,要么就C/C++了。所以在当时基本上这些语言同时充当着基础架构(infrastructure)和数值计算(比如Monte Carlo)的双重目的。但是现在各种胶水类语言、科学类语言多了起来,而且由于单机性能越发强悍,效率再也不是唯一的诉求了,因此目前C++、Java大量应用于金融系统级的开发,和对于效率要求极高的实时定价等领域。从一个Quant的角度来看,这类语言最大的特点是快,编程复杂度高,维护难,同时原生语言普遍不支持向量运算。
2、胶水类语言(Python、Ruby等):我必须承认,这些语言是新世代Quant的福音。在国内工作的时候我目睹并参与了一个将原有的C++框架全部用Python重写的项目,而现在JP Morgan这边利率类产品的定价软件也在从Java像Python转移。实现同样的代码,Python、Ruby的实现速度比效率类语言快很多,而且在机器速度越来越快的今天,差距已经不是不可接受。这些语言最大的特点是比较快,编程复杂度高,维护相对简单,同时大量的包(比如Numpy+Scipy)可以轻松实现向量运算。
3、科学类语言(Matlab、R、S等):一般而言,科学类语言最大的特点是支持向量运算,同时各种附加数学、统计包极其丰富,但运算速度无法与前两类相比。在一个具体的投资/交易策略、模型投入实际使用前,你需要快速的去实现(Implement)和验证(Back-testing)你的想法。这个时候,科学类语言就有绝对的优势。验证思路有效后,再用效率类语言或胶水类语言开发成系统级组件。你可以理解为科学类语言是用来造概念车的,而前两类语言是用来量产的。而在具体的职业角度,造概念车的这帮人一般是Pure Quant,而实现量产的很多是Quant Developer。当然也有两者合一的集大成者。
4、Alpha演算类语言(Lisp、Clojure等):我第一次对这类语言感兴趣,是12年冬天接触硅谷一家科技公司时(Prismatic,人工智能新闻App),发现他们在用Clojure,也极力向我推荐Clojure。Clojure是基于Java封装的语言,可以用Java虚拟机执行。但归根结底,Clojure是Lisp这类语言。之前我长期沉迷于过程编程与面对对象等概念之中,第一次接触Lisp很不习惯,但后面开始感叹于这类语言之美。我个人感觉目前Quant界用这种语言偏少,但是不排除以后流行的可能。
5、查询类语言(SQL、Q等):SQL就不必说了,金融公司很多时候都是使用Oracle等关系型数据库,SQL是基础。而我之前几次面试也遇到了SQL的问题。Q是Morgan Stanley为了应对金融中的海量数据而采用的一种非关系型查询语言,特点是极快,有SQL的基础可以很快掌握。
全面的说:如果你是做Pure Quant,整天与交易策略和模型睡觉,那么2、3是必须的;如果你是开发为主,或者是Quant Developer,那么1、2、5是必须的;如果你立志让编程不成为你做Quant的障碍,那么1-5全都是必须掌握或至少了解其思想的。
不管是作为Quant还是Coder,都不可拘泥于语言。语言只是其背后设计哲学的体现。这就等同一个数量金融从业者不可拘泥于产品一样。数量金融的根基永远是供给需求、金钱时间价值这些基本的经济学理论以及现金流的相关概率这些基本的统计学思想。如果拘泥于术而非艺,那路就会越走越窄。

Quant 对 python 的需求高吗

2. Quant 应该学习哪些 Python 知识

数据分析的python软件包不能算是严格的Python知识吧?严格来说,熟练使用那些软件包更多的还是依赖于金融市场,数理统计方面的知识,因为软件包的API通常都是这些领域知识的术语。

作为一个quant, 这个问题(一个这时候的quant应该学习哪些Python知识)的必要性在于,Python在这个领域真的是很火,一句不过分的话说“华尔街以前运行在Excel上,今后会运行在Python上” (当然技术上来讲,这并非事实,要说这个可能性的基础,从编程语言上来讲,还得是C/C++,这里的说法更多是体现在Python语言作为一种最接近用户层面的语言的流行度而来的, 同时即便从这个意义上来讲,现在流行的还有R, Matlab, Q(在一些知名银行很流行)等)。

以熟练掌握Python为目标,可以这样来关注Python:

Python是一门什么编程语言,它的显著优势和劣势分别是什么
Python编程环境的快速搭建(包括包管理(现在pip正在被标准化),编辑器,以及调试工具)
Python最被广泛认同的编码规范和最佳实践是什么 (e.g., ('a' + 'b') VS. ''.join(['a', 'b'], 这一点被很多初学者所忽略(“为什么不呢?反正我的代码运行正确了。”),但是如果学习者最初花多一点时间来回答这个问题(“虽然有多种选择,但是哪种选择在这个时候最合适”),或者说建立起来这样一种思考方式,你将很快的超越自己,成为别人眼中的专家。)
Python内建的主要的数据类型(int, long, str, tuple, list, dict, heapq, deque - 内建的标准库中并不包含像C++里面那样丰富的数据结构,Search Tree, Binary Search Tree, AVL/Splay/Red Black Tree, Graph等, 不过这些非线性的数据结构都可以在PyPI中找到),以及它们的常用API(这也正是Python的闪光点之一,即最初的编程效率的来源)。
Python的常用标准库(Python拥有非常易用和功能完备的标准库,使得Python在安装之后就能应付大量问题,如字符处理,文件系统,HTTP, 常见数据文件处理等。语言的维护者早期应该是希望赋予Python以明朗的模块组织结构,对于某类具体问题都存在一个明确的甚至是唯一的模块,但是随着这些年Python的流行,第三方包的大量增加,这种初衷现在面临不少挑战。直观的结果是,在Python 2.X的版本里,你会找到像urllib2这样命名的模块。现在的Python 3所作出的众多努力中就包括对这些模块组织上的歧义进行整理。总的来说,用户仍然还是可以迅速的回答“我该使用哪个模块”这个通常需要不少经验的问题。)
Python的面向对象范式怎么使用(如何在此理解上可靠的实现封装,重用,继承,覆盖)
Python在处理网络编程上的常见方案,常用标准包及第三方包(这本身是一个丰富的话题,同时也几乎不可避免,熟练掌握这个话题需要多年的经验,深层次的理解更需要系统的计算机科学知识,但是你可以从其中某一个具体的方案开始。Python内建标准包提供几乎所有层次的网络编程术语,你可以工作在从IP到应用的所有层面。)
Python在处理CPU密集型运算时候采用的流行解决方案,以及它们的工作原理大致是什么(这个理解可以帮助你以不变应万变的从众多第三方方案中选择合适的候选者。流行的方案一般是通过Python  C/C++/Fortran互操作,可能会使用一些元编程语言(比如Cython)来进行language translation/generation,也有可能直接从C/C++/Fortran编写的软件中来生成二进制编程界面或者应用编程界面(取决于生成的过程是利用二进制文件(.lib, .so)还是源文件),甚至更新的尝试会利用到一个多阶段的源代码处理管道,从Python源代码,中间C/C++代码,再到LLVM将Python代码(目前比较成功的方案似乎支持到Python的一个理想子集)实时生成对应的机器码。理解这一原理将帮助你克服Python在CPU密集运算时所遇到的瓶颈,同时我认为如果你将为你所在的部门构建一个基于Python的数据分析平台

3. Quant 应该学习哪些 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++的代码,速度完全不用担心。一些有特别需求的人也可以考虑开发在浏览器中显示的界面,比如经常想用手机远程监控。

Quant 应该学习哪些 Python 知识

4. Quant 应该学习哪些 Python 知识

1.说到量化交易,肯定会用到数学,统计知识,那numpy这个包就不可少,当然像scipy也是可以用到的,还有一些你接收的网上很多公司提供的接口数据喜欢用pandas包装,所以pandas你也需要去学习一下,最近又知道一个叫numba的包也不错。
2.刚刚提到说接收网上很多公司的接口,那如果自己想做一些数据保存,你可以存到excel 中,那这时 xlrd,xlwt就必不可少了,当然csv你也需要了解。有时公司又来个新的方案,比如新闻数据的分析什么的,他们都放在非关系型数据库里让你使用,此时你需要pymongo进行读取(我司是这么放的),当然你也可以把你每天的数据存入到mongodb中。
3.然后说了这么多还没到怎么写量化算法,说到算法包,我想你应该要记住一个牛逼的scikit-learn的包,各种碉堡的算法一应俱全,省的你再去造轮子。
4.说了这么多,想给老大交差,说你的这个策略回测结果咋咋牛逼。你总不能拿个数据库,excel表给老大看吧。所以此时你需要用上matplotlib这个可视化的包,当然了seaborn这个也不错,底层是matplotlib。

5. Quant 应该学习哪些 Python 知识

研究方面龙哥的答案已经覆盖了常用的库,这里就从研究的整体方向上来介绍下:
获取数据:可以选择使用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++的代码,速度完全不用担心。一些有特别需求的人也可以考虑开发在浏览器中显示的界面,比如经常想用手机远程监控。

Quant 应该学习哪些 Python 知识

6. Quant 应该学习哪些 Python 知识

Quant 应该学习哪些 Python 知识
Python是非常适合做quant类工作的语言,本身就是科学计算方面的统治级语言,现在加入了IPython,pandas等重量级神器,为Quant类工作量身定做,而且仍在飞速发展中,以后会越来越重要。  关于其他语言,首先介绍一下我自己最喜欢的一个比较小众的组合,Mathematica+Java/Scala。 
Mathematica的优点在于:本身提供函数式的编程语言,表达能力非常强大,比如Map/Reduce是标配,很多时候不需要去做烦人的for循环或下标控制,排版经常可以直接照数学公式原样输入,即直观又不容易写错;代码和输出混排的排版方式使得建模时的演算和推理过程非常流畅,甚至还可以直接生成动画,对于找直观理解非常有帮助(这几点分别被IPython和R偷师了一部分)。
Mathematica的缺点在于对金融类的时间序列数据没有很好的内建支持,使得存储和计算都会比较低效,因此需要用内嵌Java的方式来补足,对于数据格式或性能敏感的操作都可以用Java/Scala实现。这个组合在我心目中无出其右,不论是快速建模,还是建模转生产,都远远领先于其他选择。
但Mathematica的商用授权很贵,如果公司本身不认可的话很难得到支持,这是最致命的缺陷。另外随着Python系的逐渐成熟,领先优势在逐渐缩小,长远看Python的势头更好一些。  其他答案里也列举了不少其他语言,我自己既做Quant的工作,也做软件开发的工作,这里想从一个软件工程师的角度,说说我的理解。平时工作中会和一些偏Quant背景的人合作,很容易发现建模能力好的人往往在计算机方面基础比较薄弱(因为以前的训练重点不在这里)。

7. Quant 应该学习哪些 Python 知识

1. 如果还需要Deep Learning方面的东西的话,可以考虑Theano或者Keras。这两个东西可能会用在分析新闻数据方面。不过不是很推荐使用这类方法去做量化模型,因为计算量实在是太大,成本很高。
2. 交易框架方面,除了vn.py,还推荐PyAlgoTrade框架,github上可以搜到。私以为这个框架比vn.py牛逼太多了,毕竟是一个在金融IT领域混迹近20年的老妖的作品,架构设计不是一般的优秀。
3. 国内的话,ricequant是个不错的选择,虽然使用的是Java,但是团队我见过,都是做金融IT出身的,基本上都有7、8年以上经验,底层功底非常扎实,做事情都很靠谱。现在他们也在考虑把SDK扩展到Python这边。
4. 国内的行情和交易接口,使用的是自己的协议(比如CTP接口使用的是FTD协议),而不是国际上广泛使用的FIX协议,并且都不开源。如果需要连接行情,还需要考虑将接口SDK为python封装一下。(修改:评论中有人提到很多券商也开放了FIX接口,不过似乎是在内网使用)
5. 有人谈到数据库了,这里我也说一下,对于高频tick级别的数据,其量级可以达到每天TB级别,普通的关系数据库是扛不住的。如果试图使用传统的关系数据库,比如Oracle之类的可以省省了。对付这种级别的数据,采用文件系统+内存索引会更好。不过这种场景,一般也就是机构里面能碰到了,个人quant可以不用考虑。

Quant 应该学习哪些 Python 知识

8. Quant 应该学习哪些 Python 知识

  Python是非常适合做quant类工作的语言,本身就是科学计算方面的统治级语言,现在加入了IPython,pandas等重量级神器,为Quant类工作量身定做,而且仍在飞速发展中,以后会越来越重要。  关于其他语言,首先介绍一下我自己最喜欢的一个比较小众的组合,Mathematica+Java/Scala。 Mathematica的优点在于:本身提供函数式的编程语言,表达能力非常强大,比如Map/Reduce是标配,很多时候不需要去做烦人的for循环或下标控制,排版经常可以直接照数学公式原样输入,即直观又不容易写错;代码和输出混排的排版方式使得建模时的演算和推理过程非常流畅,甚至还可以直接生成动画,对于找直观理解非常有帮助(这几点分别被IPython和R偷师了一部分)。
  Mathematica的缺点在于对金融类的时间序列数据没有很好的内建支持,使得存储和计算都会比较低效,因此需要用内嵌Java的方式来补足,对于数据格式或性能敏感的操作都可以用Java/Scala实现。这个组合在我心目中无出其右,不论是快速建模,还是建模转生产,都远远领先于其他选择。但Mathematica的商用授权很贵,如果公司本身不认可的话很难得到支持,这是最致命的缺陷。
  另外随着Python系的逐渐成熟,领先优势在逐渐缩小,长远看Python的势头更好一些。  其他答案里也列举了不少其他语言,我自己既做Quant的工作,也做软件开发的工作,这里想从一个软件工程师的角度,说说我的理解。
  平时工作中会和一些偏Quant背景的人合作,很容易发现建模能力好的人往往在计算机方面基础比较薄弱(因为以前的训练重点不在这里)。他们也可以快速学习掌握一种像C++,Java这样的语言,实现很多必要的功能。但是一方面这些语言陡峭的学习曲线和繁琐的开发步骤会给他们真正要做的工作增加不必要的负担,另一方面一旦涉及到性能敏感的情景,他们对计算机体系结构缺乏理解的缺点就容易暴露,比如说很可能他们没有计算复杂度,内存碎片,cache miss,甚至多线程等概念,导致写出的程序存在相当大的隐患。  即使是计算机功底扎实,如果每天的工作需要在C++,Python,R/Matlab,甚至一众脚本语言之前来回切换,思维负担也会非常重,人的精力是有限的,很难同时兼顾数学建模和底层代码调试这种差距巨大的工作。长期发展下去最可能的结果就是要么远离建模,专心做生产环境开发,要么远离生产环境,专心建模。这种局面显然不论对个人还是团队都是有很大弊端的。
  如果深入思考这个问题,相信不难得出结论,对于Quant来说,C++这种相当面向机器的语言肯定不是最佳选择。的确在历史上,它比更面向机器的C已经友好了很多,但是在计算机技术飞速发展的今天,如果还需要Quant大量使用C++做建模类的工作显然是很遗憾的事情。设想一下你拿到一份股票数据,不论你是想分析价格走势,成交量分布,还是波动性,第一件要做的事一定是画出图来看看,有一个直观认识。如果你的工具是C++,肯定有很多时间花在编译,调试,再编译的过程上,好容易能解析文件了,接下来怎么算移动平均?怎么算波动性?全都要自己写代码。再然后怎么画图?这整个工作流简直惨不忍睹,这些问题浪费掉你大部分精力,而他们全部和你真正感兴趣的工作毫无关系。所以如果你是一个数理金融等背景的新人打算开始Quant生涯,在决定是否要投资到这项重量级技术上时需要慎重,即便它目前的市场定价可能仍在峰值。相比之下我认为Python会是更理想的选择,即能很好的完成建模工作,也可以训练一定的编程技巧,使你在必要时也能胜任一些简单的C++工作。