¿Por qué los fondos de cobertura y los servicios financieros suelen utilizar OCaml?


Hablando con una serie de quants / hedgies, llegué a la conclusión de que un gran número de ellos parecen estar utilizando un lenguaje homebrew u OCaml para muchas tareas. Lo que muchos de ellos no pudieron responder fue por qué.

Ciertamente puedo entender por qué no querrían usar C++ en su mayor parte, pero ¿por qué OCaml es superior para estos usos en comparación con otros lenguajes de scripting, por ejemplo Python, Ruby, etc.?

Author: Thomas, 2009-12-17

9 answers

Intente leer Caml trading - experiences with functional programming on Wall Street por Yaron Minsky y Stephen Weeks (disculpas, aunque este artículo solía ser alojado de forma gratuita en Jane Capital, ya no está allí, así que dejo el enlace ACM para referencia). Entran en gran detalle sobre lo que sienten que son las ventajas y desventajas de OCaml, aunque en su mayor parte lo toman como un hecho de que es mejor que la mayoría de las otras opciones que consideraron (es decir, no mucho directo comparaciones con C++, Python, lo que sea).

Los autores trabajan en Jane Street Capital, que ha invertido mucho en código OCaml.

Actualización : Ver también el hilo ¿En qué lenguaje de programación está escrito el software de trading algorítmico?. Uno de los comentarios menciona una presentación que Yaron Minsky dio en CMU sobre el uso de Jane Street Capital de Caml. Alrededor de una hora de duración, y muy interesante.

Actualización dos: Yaron ha escrito otro resumen, esta vez para la cola ACM, llamado OCaml para las Masas .

 24
Author: Don Wakefield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-18 14:45:41

Ver por ejemplo el shootout de lenguajes de programación para comparaciones de velocidad:

Ahora, todos escuchamos la línea sobre mentiras, malditas mentiras y puntos de referencia, así que granos de sal recomiendan but pero esta es una comparación bastante bien hecha. Al final del día, importa lo que se hace con el propio problema y los datos.

 11
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-17 20:38:56

Al ser un lenguaje funcional, es de naturaleza matemática, que probablemente encaja muy bien con el tipo de problemas que estas empresas necesitan resolver. Y como otros han señalado, tiene un buen perfil de rendimiento.

Tal vez esta es la razón por la que Microsoft cooptó OCaml para F #

 6
Author: Robert Harvey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-17 20:40:18

Lo primero a tener en cuenta es que aunque OCaml tiene una sintaxis REPL y clara y sucinta, no es un lenguaje dinámico como Python o Ruby. Tiene tipeo estático y compila a código nativo.

Para el Análisis Cuantitativo, los lenguajes de scripting son más convenientes. Tiene acceso a un montón de bibliotecas, es fácil hacer scripts rápidos y sucios para administrar la información, y construir programas pequeños y medianos es fácil incluso para un no programador.

Para crear algoritmos y sistemas que realmente participan en el comercio, quieres algo como OCaml. Las principales ventajas de OCaml son su naturaleza funcional, legibilidad (se lee casi tan bien como un lenguaje dinámico como Python), fiabilidad, pero sobre todo velocidad. OCaml es mucho, mucho más rápido de lo que la mayoría de la gente cree - es C rápido (en realidad un poco más lento que C, pero muchas, muchas veces más rápido que los lenguajes dinámicos). OCaml es lo suficientemente rápido como para crear un sistema HFT, que no es algo que se puede decir de Python o Rubí.

También, tenga en cuenta que Jane Street (la evangelista más vocal de OCaml) adoptó OCaml antes de que Scala y Clojure entraran en escena.

 6
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-11 13:18:49

Porque es increíblemente rápido (y mucho más sucinto que C++).

 3
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-17 20:35:57

Retomando el post de Don, Jane Street Captial incluso tiene una página dedicada a OCaml, con más enlaces a su compromiso con OCaml (incluido un blog ). El rendimiento de OCaml suele ser un gran argumento, pero creo que también a los "quants" les encanta porque el paradigma funcional se presta muy bien a su tipo de trabajo analítico, por lo que creo que son los primeros en adoptarlo. Y luego las empresas descubren que es igualmente adecuado para la programación de sistemas.

 2
Author: ThomasH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-05 12:06:47

¿Paralelización trivial comparada con Python/Ruby? Al menos esto es cierto para F#, pero debería ser cierto para Caml / OCaml por las mismas razones.

Por mucho que me guste Ruby, no sería mi primera opción para tareas pesadas que son en su mayoría matemáticas o agregaciones, y ni Python ni Ruby tienen realmente un gran soporte para multihilo todavía.

La concisión de tuberías de cálculos relativamente complejas gracias a la coincidencia de patrones y la preferencia por la inmutabilidad (más difícil de aplicar en Ruby, ligeramente más fácil en Python pero aún más difícil que en lenguajes basados en ML) son más valiosos para cálculos en grandes conjuntos de datos.

 1
Author: JasonTrue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-17 20:39:27

No trabajo en un lugar como ese, así que estas son solo conjeturas de por qué podría hacerlo en su posición:

Generalmente es bastante más rápido que lenguajes como Ruby y Python y, como un lenguaje funcional de tipo estático, generalmente es algo más fácil razonar sobre el código y saber que no contiene errores sutiles. (Sí, las pruebas unitarias también deberían ayudar a detectarlas, pero es bueno tener una garantía adicional de que sus números financieros no se están arruinando.) También, la programación funcional está muy estrechamente ligada a las matemáticas, más que la mayoría de los paradigmas de lenguaje de alto nivel (como, no hay una rama OO de las matemáticas), por lo que es bueno para modelar lo que realmente hacen allí.

 1
Author: Chuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-17 20:46:27

En mi experiencia de Quants es VBA (léase: Excel) con c#, o f# a veces también

Editar:

Voy a reformular que, para el voto negativo, no conozco personalmente de ningún Quants usando caml...

 -1
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-18 04:48:32