多くのクォンツ/ヘッジについて話すと、それらの多くは自作言語またはOCamlのいずれかを多くのタスクに使用しているように見えるという結論に達しました。彼らの多くが答えることができなかったのはその理由でした。
なぜ彼らがほとんどの部分でC++を使いたくないのかは確かに理解できますが、PythonやRubyなどの他のスクリプト言語と比較してOCamlがこれらの用途に優れているのはなぜですか?
多くのクォンツ/ヘッジについて話すと、それらの多くは自作言語またはOCamlのいずれかを多くのタスクに使用しているように見えるという結論に達しました。彼らの多くが答えることができなかったのはその理由でした。
なぜ彼らがほとんどの部分でC++を使いたくないのかは確かに理解できますが、PythonやRubyなどの他のスクリプト言語と比較してOCamlがこれらの用途に優れているのはなぜですか?
Yaron Minsky と Stephen Weeks によるCaml トレーディング - ウォール街での関数型プログラミングの経験を読んでみてください(申し訳ありませんが、この記事は Jane Capital で無料でホストされていましたが、もう存在しないので、参照用に ACM リンクを残します)。彼らは OCaml の長所と短所について非常に詳細に説明していますが、ほとんどの場合、OCaml は考慮した他のほとんどのオプションよりも優れていると考えています (つまり、C++、Python との直接的な比較はあまり行われていません)。 、あなたは何を持っていますか)。
著者は、OCaml コードに多額の投資を行っている Jane Street Capital で働いています。
更新: スレッド「アルゴリズム取引ソフトウェアはどのプログラミング言語で書かれていますか? 」も参照してください。. コメントの 1 つは、Jane Street Capital の Caml の使用について Yaron Minsky が CMU で行ったプレゼンテーションに言及しています。約1時間の長さで、非常に興味深いものです。
更新 2 : Yaron が別の概要を書きました。今回は ACM Queue について、OCaml for the Massesと呼ばれます。
たとえば、速度の比較については、プログラミング言語の銃撃戦を参照してください。
さて、私たちは皆、嘘、ひどい嘘、ベンチマークについてのセリフを聞いたので、塩の粒が推奨されました-しかし、これはかなりよくできた比較です. 結局のところ、自分の問題とデータをどう処理するかが重要です。
最初に覚えておくべきことは、OCaml には REPL と明確で簡潔な構文がありますが、Python や Ruby のような動的言語ではないということです。静的型付けがあり、ネイティブ コードにコンパイルされます。
定量分析には、スクリプト言語の方が便利です。多くのライブラリにアクセスでき、情報を管理するための簡単で汚いスクリプトを実行するのは簡単です。また、小規模から中規模のプログラムを作成することは、プログラマーでなくても簡単です。
実際に取引を行うアルゴリズムとシステムを作成するには、OCaml のようなものが必要です。OCaml の主な利点は、その機能的な性質、読みやすさ (Python のような動的言語とほぼ同じくらい読みやすい)、信頼性ですが、主に速度です。OCaml は、ほとんどの人が信じているよりもはるかに高速です。C よりも高速です (実際には、C よりもわずかに遅いですが、動的言語よりも何倍も高速です)。OCaml は、HFT システムを作成するのに十分な速さです。これは、Python や Ruby について言えることではありません。
また、Scala と Clojure が登場する前に、Jane Street (最も活発な OCaml エバンジェリスト) が OCaml を採用したことを覚えておいてください。
関数型言語であるため、本質的に数学的であり、おそらくこれらの企業が解決する必要がある種類の問題にうまく適合します. そして、他の人が指摘したように、それは優れたパフォーマンスプロファイルを持っています.
おそらくこれが、Microsoft が OCaml を F# に採用した理由です。
それは非常に高速だからです (そして C++ よりもはるかに簡潔です)。
Python/Ruby と比較して些細な並列化? 少なくともこれは F# には当てはまりますが、ほぼ同じ理由で Caml/OCaml にも当てはまります。
私は Ruby が大好きですが、主に数学や集計などの負荷の高いタスクを実行する場合、Ruby は最初の選択肢ではありません。また、Python も Ruby もまだマルチスレッドを十分にサポートしていません。
パターン マッチングのおかげで計算の比較的複雑なパイプラインが簡潔になり、不変性が好まれる (Ruby では強制が難しく、Python では多少簡単ですが、ML ベースの言語よりも難しい) ことは、大規模なデータ セットの計算に最も役立ちます。
私はそのような場所で働いていないので、これらは私が彼らの立場でなぜそれをするのかについての単なる推測です:
一般に、Ruby や Python などの言語よりもかなり高速であり、静的に型付けされた関数型言語であるため、コードについて推論し、微妙なバグが含まれていないことを確認する方が一般的にやや簡単です。(はい、単体テストもそれらをキャッチするのに役立つはずですが、財務数値が台無しにならないという追加の保証があると便利です。) また、関数型プログラミングは、ほとんどの高級言語よりも数学と非常に密接に結びついています。パラダイム (たとえば、数学の OO ブランチはありません)。
Quants の私の経験では、C# または f# を使用した VBA (読み取り: Excel) です。
編集:
反対票を投じるために、 camlを使用しているクオンツについて個人的には知りません...