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