谈到一些quants / hedgies,我得出的结论是,他们中的很多人似乎都在使用自制语言或OCaml执行许多任务。许多人无法回答的原因是。
我当然可以理解为什么他们不想在大多数情况下使用C ++,但为什么OCaml比其他脚本语言(如Python,Ruby等)更适合这些用途?
尝试阅读Yaron Minsky和Stephen Weeks的Caml trading - experiences with functional programming on Wall Street(道歉,虽然这篇文章曾经在Jane Capital免费托管,但它已经不存在了,所以我留下了ACM链接供参考)。他们详细了解了他们认为OCaml的优点和缺点,尽管他们在很大程度上认为它比他们考虑的大多数其他选项更好(即没有很多与C ++,Python的直接比较) , 你有什么)。
作者在Jane Street Capital工作,该公司对OCaml代码进行了大量投资。
更新:另见线程What programming language(s) is algorithmic trading software written in?。其中一个comments提到了Yaron Minsky在简城街资本使用Caml时向CMU发表的演讲。大约一个小时,非常有趣。
更新二:Yaron已经写了另一个概述,这次是ACM Queue,名为OCaml for the Masses。
例如,参见programming languages shootout进行速度比较:
现在,我们都听到了有关谎言,该死的谎言和基准的线条,所以推荐使用盐粒 - 但这是一个相当不错的比较。在一天结束时,重要的是用一个人自己的问题和数据做什么。
首先要记住的是,即使OCaml具有REPL和清晰简洁的语法,它也不是像Python或Ruby那样的动态语言。它具有静态类型并编译为本机代码。
对于定量分析,脚本语言更方便。您可以访问很多库,很容易使用快速和脏的脚本来管理信息,即使对于非程序员来说,构建中小型程序也很容易。
要创建实际参与交易的算法和系统,您需要像OCaml这样的东西。 OCaml的主要优点是它的功能性,可读性(它几乎与Python这样的动态语言一样好),可靠性,但主要是速度。 OCaml比大多数人认为的要快得多 - 它的速度很快(实际上比C慢一点,但比动态语言快很多倍)。 OCaml足以创建一个HFT系统,这对于Python或Ruby来说都不是。
另外,请记住,在Scala和Clojure出现之前,Jane Street(最有声音的OCaml福音传道者)采用了OCaml。
作为一种功能语言,它本质上是数学的,它可能很好地适应这些公司需要解决的各种问题。正如其他人所指出的那样,它具有良好的性能。
也许这就是微软为F#选择OCaml的原因
因为它非常快(而且比C ++简洁得多)。
挑选Don的帖子,Jane Street Captial甚至有一个page dedicated to OCaml,进一步链接到他们的OCaml订婚(包括blog)。 OCaml的性能通常是一个很大的争论,但我认为“量子”也喜欢它,因为功能范式非常适合他们的分析工作,因此我认为他们是早期采用者。然后公司发现它同样适用于系统编程。
与Python / Ruby相比,平凡的并行化?至少对于F#来说是这样,但出于同样的原因,Caml / OCaml应该是这样。
尽管我喜欢Ruby,但它不是我主要选择数学或聚合的繁重任务的首选,而且Python和Ruby都没有真正支持多线程。
由于模式匹配和对不可变性的偏好(在Ruby中更难实现,在Python中稍微容易但仍比基于ML的语言更难),相对复杂的计算管道的简洁性对于大数据集的计算是最有价值的。
我不是在这样的地方工作,所以这些只是猜测为什么我可以在他们的位置上这样做:
它通常比Ruby和Python这样的语言快得多,作为一种静态类型的函数式语言,它通常更容易推理代码,并且知道它不包含细微的错误。 (是的,单元测试也应该有助于抓住这些,但是额外的保证,你的财务数据不会搞砸了很好。)此外,函数式编程与数学密切相关,比大多数高级语言更为紧密。范例(比如,没有数学的OO分支),所以它擅长建模他们实际在那里做的事情。
根据我对Quants的体验,它是带有c#的VBA(读取:Excel),或者有时也是f#
编辑:
我要说的是,对于投票,我不认识任何使用caml的Quants ...