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