对 Quant 而言 Python 的需求高吗,除 C++ 外还有哪些流行的编程语言?

论坛 期权论坛 期权     
小皓子   2018-9-23 04:05   250738   7
分享到 :
0 人收藏

7 个回复

倒序浏览
2#
董可人  4级常客 | 2018-9-23 04:05:58 发帖IP地址来自
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++工作。

最后同意 @袁浩瀚,不要拘泥于语言,不论学习那一种,对其他的语言还是要抱有开放的心态。另外世界变化很快,你会发现单一的语言分类方式其实是没有意义的,每一门语言在发展过程中都会逐渐吸收其他语言的特性,比如Python本身就既有C/C++/Java那样命令式的特点,也有函数式的特点,像pandas甚至还提供类似SQL的使用方式,在其他语言或系统里也都或多或少包含了不同的特点,可以在学习过程里慢慢体会。
3#
袁浩瀚  3级会员 | 2018-9-23 04:05:59 发帖IP地址来自
谢邀。很抱歉这个问题我三天前有看到,当时欲答又止,因为我发现我可以两行答完这个问题:
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,都不可拘泥于语言。语言只是其背后设计哲学的体现。这就等同一个数量金融从业者不可拘泥于产品一样。数量金融的根基永远是供给需求、金钱时间价值这些基本的经济学理论以及现金流的相关概率这些基本的统计学思想。如果拘泥于术而非艺,那路就会越走越窄。
4#
starseeker  3级会员 | 2018-9-23 04:06:00 发帖IP地址来自
国外的话 比较流行的应该是R+Python,R用来快速实现和验证你的策略。Python的好处在于速度比较快,移植到C++之类的也比较方便。
国内的情况就比较复杂了。首先是用Matlab的比R多多了,国外有版权问题,国内几乎没有这个问题,学校里面又以教Matlab的巨多,所以导致了毕业以后用Matlab的人比较多。从金融工程的使用者来说这个比例应该在4:1到5:1之间。其次Python也有一些用户,但是在行业内比想象的少,更不用说C++和JAVA之类的。
SAS是一个比较特别的异类,行业内有不少人用。当然比不过Matlab,数量应该和R类似,这点上我没有精确的数字。用SAS的原因主要是因为和SQL之间的交互效率很高,但是SAS的编程方式比较奇怪。
SQL还是很有必要懂一点的,虽然未来的趋势可能是大家更多的使用API的方式提取数据,但是如果要追求稳定性和速度,落地数据库的方式还是逃不了的。所以做金融工程的最好还是要会SQL,当然只需要select和复杂的join就可以了。SQL方面,大家主要用SQL server和Oracle。目测MySQL非常少。
最后还有一个大家没有提到的,但是非常重要的就是VBA,因为Excel的关系,其实VBA是一个很好地实现工具。也很多人用,国外的金融行业里面VBA的应用也是非常多的,作为快速实现和展示的工具,VBA是非常好的东西。
5#
陈杰  4级常客 | 2018-9-23 04:06:02 发帖IP地址来自
13年的问题至今,不知道还有没有人关注,楼主是否已经总结出自己的经验?
我是做产品的,坦率讲谈到编程我也是在学习、探索、理解中,就和大家分享下我的理解吧:
1、关于语言,我就从国内普遍应用角度说,策略研究类:R\matlab,策略开发类:python,c++、c#;其他还有很多,这里不赘述。从我接触国内的情况来看,越来越多的趋向于python和c++的组合,因为用python开发效率更高,而c++执行效率更高。虽说差别‘感觉’不大,但是高频一些的策略,还是有差别。用python的大多都是自己研发的平台,支持python语言的量化交易产品并不多,有掘金、wind、可能还有,不缺定了。其他都是基于一种工具进行深度定制的。

2、对艺和术的理解,感觉像先有鸡还是先有蛋的问题。我认为语言是敲门砖,举个例子:
这和开发工程师一样,必须总要学习新的东西,了解国外的前沿技术,以前国内的老工程师,都买国外的工程书看,虽然英文看着费劲,但是必须与时俱进。我认为quant更是如此。为什么?无论从哪个角度讲,量化交易,一定是技术驱动的业务创新的。

3、和大家分享一些我的总结:
Pycharm,推荐一款免费的Python IDE
IDE对比,开源才是硬道理

学习链接:

Python:

Python | Codecademy

PythonTab:Python中文开发者社区门户

R:

R语言中文网-R语言论坛


最后分享一个:
做事就要像黑客一样执着
当然还有一些,python的Ta-lib的东西,就不在这里写了。感兴趣的可以交流互相学习。
有不足的大家请批评指正。
6#
老豚晕糖  2级吧友 | 2018-9-23 04:06:03 发帖IP地址来自
做这行的要么会越做越快,要么会越做越难大,然后越做越复杂。
但是:如果要快,就C++;能做复杂问题的,就Matlab。我的观点,一个完整高效的交易平台和策略交易系统中,C++ + Matlab是必备最佳的。这是上面提到的五种编程语言里的核心的最佳搭配,其余的比如数据库语言,胶水语言,等等的可以人任意发挥。有一点是肯定的,像Python这样的胶水语言显然是代替不了的C++的核心作用。

每个Quant组里因为人员发展原因都会有他们偏爱的程序。出现很多开发语言,不是流行的问题,那是换编程语言,时间成本太高的问题

做交易员出生的人一般不会C++,花个把星期学一下python比较现实。程序员出生的 C++可以很牛叉,但不了解市场。像Matlab这样的工具虽然国内用的人很多,也是限于工具运算的多,Matlab的核心是C写的,但是国内研究过Matlab与C++接口的又有多少人能做到把Matlab当C++用,实现高频级别的复杂的统计套利策略?

所有无法解决的技术问题时的中间状态都会归结于编程能力与时间成本的平衡问题。

所以,如果你有时间又想一辈子做好这行,那么老老实实学习C++吧。呵呵 Good Luck~
7#
babyquant  5级知名 | 2018-9-23 04:06:05 发帖IP地址来自

Matlab和R就被鄙视了。。。

国外有一个很出名的individual quant非常推荐matlab,毕竟现在收费也便宜了,而且GUI特别友好,研究交易一体化,各种包也全,遇到问题可以直接问他们公司。。。他除了要收费其实没啥缺点,当然系统太庞大也算缺点吧;

R是统计学家的最爱,也是用C++写的,现在有RStudio之类的编辑也方便多了。各种包都有。

8#
刘克  2级吧友 | 2018-9-23 04:06:06 发帖IP地址来自
没人注意到Julia吗?虽然Julia的库目前还不成熟,但考虑到其开发容易程度和执行速度,将来会有一定的占有率的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:88
帖子:9
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP