9 votos

Lenguaje de programación de finanzas cuantitativas

Desde hace un par de semanas, empecé a investigar sobre las finanzas cuánticas. Durante este tiempo, pude descubrir un montón de cosas y con ese material, un montón de preguntas vinieron a mi mente. Muchas noticias o revistas económicas escriben sobre el trading HFT/Algorítmico. La mayoría de ellos dicen que las empresas o los desarrolladores de software prefieren utilizar C++. En algunos artículos, los redactores hablan de Java, C#, C o incluso ASM. He intentado encontrar la razón de C++, pero no he tenido éxito. Este tema no proporciona las respuestas que necesito ( ¿Por qué C++ sigue siendo un lenguaje muy popular en las finanzas cuantitativas? )

Estas son mis preguntas: 1. ¿Por qué C++? Que algunas empresas puedan usar ASM (y sólo puedo imaginarme ASM en HFT donde los milisegundos juegan un papel importante), está bien. ¿Pero en el trading de media frecuencia o en los algoritmos? ¿Es por la velocidad? He buscado bibliotecas de finanzas cuánticas para C++, pero no he encontrado muchas. Lo único es QuantLib, MatLib y TA-Lib. Pero no hay APIs/Libs de gráficos ni tutoriales. Parece que nadie hace tutoriales. 2. ¿Por qué algunas personas eligen Java? Lo sé, Java es un lenguaje muy popular y tiene un montón de APIs/Libs y la comunidad está creciendo. Pero si la velocidad puede jugar un papel, entonces Java no puede ser el más rápido (debido al entorno virtual). ¿O me equivoco? 3. ¿Por qué nadie está usando Python para el comercio de frecuencia media o el comercio de algo? Python tiene un montón de Apis/Libs como MatLib, TA-Lib, Pyqtgraph. Ok, tengo que decir que Python no es el más rápido. 4. En esta discusión ¿Por qué C++ sigue siendo un lenguaje muy popular en las finanzas cuantitativas? Algunos afirman que C# podría ser mucho mejor para el desarrollo de las finanzas cuantitativas. ¿Es realmente cierto? ¿Qué hay de las librerías, las API, los tutoriales, etc.?

Y mi última pregunta, ¿cuál es la propiedad importante para elegir un lenguaje para las finanzas cuánticas? No hablo de ASM porque es el lenguaje más rápido y se utiliza para cálculos muy complejos que deben hacerse rápidamente. ¿Pero qué hay de C++, C#, Python y Java? Para mí, es importante que haya Libs y Tutoriales/Ejemplos. Y al principio, empecé con python, pero después de todo lo que he leído, ya no estoy seguro de Python.

1 votos

Esto se ha discutido por todas partes, y tu pregunta se aplica a más campos que las finanzas cuánticas, así que amplía tu búsqueda en Google. Por ejemplo, hay un debate sobre las ventajas de los distintos idiomas aquí: quant.stackexchange.com/questions/16792/ . En cuanto al soporte de bibliotecas, C++ es compatible de forma nativa con todas las bibliotecas de C y Fortran, además de contar con una innumerable selección de bibliotecas de C++, por lo que gana por defecto.

4 votos

La respuesta más sencilla en este caso es utilizar lo que su empleador le paga.

11voto

Timothy Carter Puntos 7079

Creo que podría encontrar esta respuesta en ¿El futuro lenguaje de la programación cuántica? útil.


La gente se equivoca con este problema porque siempre acaba discutiendo las ventajas teóricas de estos lenguajes en lugar de los usos prácticos de los mismos.

En teoría:

  • Haskell es elegante y tiene muchas de las ventajas teóricas (concisión del lenguaje, ortogonalidad, polimorfismo paramétrico, ADTs, funciones de orden superior, compilador inteligente), ha existido durante 25 años, pero todavía no es la corriente principal en las finanzas.

  • Python es un feo lenguaje. La sintaxis es adorada por su expresividad, pero decisiones de diseño como la GIL Los lenguajes de programación, la tipificación dinámica, el paradigma orientado a objetos, etc., son intrínsecamente antiparalelos y, dentro de algunas décadas, cuando tengamos cientos de núcleos en cada procesador, nuestros hijos se reirán de la oscuridad y la obsolescencia de estos lenguajes (entre otras cosas, como los disquetes).

Sin embargo, hoy en día casi todo el mundo te animaría a coger Python. ¿Por qué?

El futuro de un lenguaje (o de cualquier tecnología) lo decide su comunidad, la riqueza de sus bibliotecas y herramientas de desarrollo y la naturaleza autoperpetuante del código heredado en ese lenguaje y nunca sus ventajas teóricas. Podemos escribir ensayos sobre cómo odiamos Java La root y Impulsar bibliotecas; la verbosidad de XML pero estas cosas están aquí para quedarse porque han logrado un masa crítica de usuarios que están dispuestos a construir herramientas o bibliotecas de fuerza de producción a su alrededor. Docenas de lenguajes funcionales como F# vendrán y se irán, pero C++ permanecerá casi con toda seguridad debido a la enorme cantidad de código heredado en C++. Además, C++ '11 es un gran hito en la resolución de los problemas teóricos de su desarrollo.

Unas cuantas opciones que yo abordaría con cautela:

  • Lenguajes construidos en torno a paradigmas concurrentes y funcionales: Scala, F# . Yo diría que hay que abordarlo con cautela porque se utiliza en producción en Dropbox, Lime, Tower Research, Credit Suisse, etc., pero estos lenguajes han tardado mucho más tiempo en llegar al uso generalizado de lo que cabría esperar dadas las tendencias actuales en la arquitectura de los procesadores. Es difícil para mí decir si invertir tu tiempo ahora en estos lenguajes dará sus frutos exactamente dentro de 5 años, pero todos parecemos estar de acuerdo en que estos lenguajes finalmente lo harán.
  • Lenguajes específicos de dominio: Julia . Por desgracia, Julia se comercializa con "bucles internos numéricos a velocidad C". Atrae al mismo subgrupo de usuarios de Python que argumentan con estos usuarios de Julia que esto es irrelevante ya que siempre pueden pasar a Cython. Ambas multitudes defienden un paradigma condenado al fracaso y atraen a desarrolladores de baja calidad. (Yo digo desgraciadamente porque Julia tiene un gran número de cosas de las que la gente no se da cuenta: multimétodos de tipo paramétrico, coroutines simétricas, interfaces limpias con lenguajes extranjeros, influencias de Lisp y soporte de metaprogramación, etc.)

Con eso, me animaría a elegir algunas opciones:

  • Lenguas con apoyo del gran hermano: Go, Swift, C# . Aparte del apoyo de Google, Go se ha hecho muy popular en China; Microsoft ha dado un gran paso adelante al abrir C#; y siempre surgen muchas herramientas de desarrollo de interfaz de usuario de alta calidad en torno a los lenguajes principales de Apple.
  • Lenguajes destinados a sustituir a C/C++ como lenguaje de programación a nivel de sistemas: D, Nimrod . D ya cuenta con el respaldo de Facebook, y Nimrod conserva la expresividad de la sintaxis de Python, a la vez que logra impresionantes benchmarks y se utiliza para ciertos proyectos de programación a nivel de sistemas. Sin embargo, hay que tener en cuenta que ambos se basan en el enfoque de GC para la gestión de la memoria.

¿Ha conseguido alguno de los anteriores una masa crítica de buenos desarrolladores? No lo creo. La verdadera solución para ti es que un lenguaje de programación no es difícil de aprender. Lo que es más importante es que aprendas a diseño un programa en lugar de una lengua específica. Dedicar tiempo a los 6 principales paradigmas del lenguaje:

  • Programación imperativa (C) y abstracciones de clases (C++, C#, Java)
  • Abstracción funcional (Lisp, ML, F#)
  • Especificaciones declarativas (plantillas C++, Haskell, Prolog)
  • Abstracción sintáctica (Lisp)
  • Paralelismo (Cilk, SISAL, Clojure, Erlang)
  • Coroutines (C#, F#, Haskell, Scheme, Icon)

El comercio cuantitativo suele invocar conceptos de estos tres campos fundamentales:

  • Algoritmos, patrones de diseño y estructuras de datos: Árboles B, listas de salto, memoización, DP, etc.
  • Programación de sistemas: Direccionamiento de la memoria, ensamblaje, enlazado, pila, caché, etc.
  • Bases de datos: Normalización, commit en dos fases, replicación, mirroring, diseño de esquemas, etc.

Y si te acercas al extremo de los desarrolladores cuánticos:

  • Sistemas distribuidos
  • Sistemas operativos
  • Redes

5voto

Desgraciadamente, no hay una respuesta correcta para esta pregunta, es como el coche que debes conducir el fin de semana.

C++ es un lenguaje popular en las finanzas cuantitativas, pero normalmente (¡pero no siempre!) sólo se utiliza para construir la columna vertebral de la aplicación, como la fijación de precios de los derivados. ¿Por qué C++? C++ es una buena elección porque C++ es independiente de la plataforma, podemos construir de forma nativa un código de valoración de opciones para Linux, Mac, Windows, etc. QuantLib es un buen ejemplo.

C# es otro lenguaje muy popular en las finanzas. Podemos utilizar C# para crear una aplicación de negociación, analizar datos XML de otro banco, crear un servidor web, etc. Por supuesto, también podemos hacer la fijación de precios de los derivados en C#, pero es posible que no podamos optimizar el rendimiento. En C++, podríamos dividir las cargas de trabajo con OpenMP, vectorizar un bucle de Monte-Carlo, etc., pero es más difícil con C#.

Definitivamente, C# no es un lenguaje mejor que C++ en las finanzas cuantitativas. Realmente depende de lo que se quiera hacer. Por ejemplo, nadie utilizaría C# para el comercio HPC.

No todo el mundo en las finanzas cuantitativas puede hacer programación de núcleo duro, la mayoría no lo hace. Python (Excel VBL o R) sería un lenguaje mejor para ellos.

Si quieres aprender algo para tu primer trabajo, empieza con C++. Intenta entender QuantLib.

0 votos

Aquí está mi doble pregunta porque mi pregunta necesita también la opinión sobre la codificación. Stackoverflow-Pregunta ¿Qué opinas de la combinación de C++ y Python/C#? ¿C++ para la parte algorítmica y Python o C# para la parte visual (GUI)?

0 votos

No creo que haya que pensar en la lengua en sí. Si entiendes el algoritmo, ya puedes ganar mucho dinero. Yo no lo entiendo.

0 votos

@Speakard Suelo utilizar Python para construir un prototipo, mucho más fácil que C++. Una vez hecho esto, es hora de codificar a fondo

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X