¿Es mejor usar Python o C++ para inversiones cuantitativas?
Python es un lenguaje muy adecuado para el trabajo cuantitativo. Es en sí mismo un lenguaje dominante en la informática científica. Ahora ha agregado artefactos pesados como IPython y pandas, hechos a medida para el trabajo cuantitativo. Todavía se utiliza, se está desarrollando rápidamente y será cada vez más importante en el futuro.
En cuanto a otros lenguajes, permítanme presentarles primero una de mis combinaciones de nicho favoritas, Mathematica+Java/Scala. La ventaja de Mathematica es que proporciona un lenguaje de programación funcional y tiene capacidades de expresión muy potentes. Por ejemplo, Map/Reduce es estándar. En muchos casos, no es necesario realizar molestos bucles for o controles de subíndice. a menudo ingresa fórmulas matemáticas directamente como están, lo cual es intuitivo y no es fácil cometer errores. El diseño mixto del código y la salida hace que el proceso de cálculo y razonamiento durante el modelado sea muy fluido e incluso puede generar animaciones directamente, lo cual es muy útil. comprensión intuitiva (estos puntos son utilizados respectivamente por IPython y R robó parte de ellos). La desventaja de Mathematica es que no tiene un buen soporte integrado para datos de series de tiempo financieras, lo que hace que el almacenamiento y el cálculo sean relativamente ineficientes. Por lo tanto, debe complementarse con Java integrado, que puede usarse para formatos de datos o sensibles al rendimiento. Implementación de Java/Scala. En mi opinión, esta combinación no tiene comparación, ya sea modelado rápido o modelado para producción, está muy por delante de otras opciones. Sin embargo, la licencia comercial de Mathematica es muy cara y es difícil obtener soporte si la propia empresa no lo reconoce. Este es el defecto más fatal. Además, a medida que el sistema Python madura gradualmente, el liderazgo se reduce gradualmente y Python tendrá un mejor impulso a largo plazo.
Muchos otros idiomas también se enumeran en otras respuestas. Trabajo tanto en Quant como en desarrollo de software. Aquí me gustaría compartir mi comprensión desde la perspectiva de un ingeniero de software. En mi trabajo diario, trabajo con personas con experiencia en Quant. Es fácil encontrar que las personas con buenas habilidades de modelado a menudo tienen una base débil en computadoras (porque el enfoque de la formación previa no estaba aquí). También pueden aprender y dominar rápidamente un lenguaje como C++ y Java para implementar muchas funciones necesarias. Pero, por un lado, la pronunciada curva de aprendizaje y los tediosos pasos de desarrollo de estos lenguajes agregarán una carga innecesaria al trabajo que realmente quieren hacer. Por otro lado, una vez que se trata de escenarios sensibles al rendimiento, su falta de comprensión. La arquitectura de la computadora es fácil de causar, por ejemplo, es muy probable que no tengan conceptos como complejidad computacional, fragmentación de la memoria, falta de caché o incluso subprocesos múltiples, lo que resulta en considerables peligros ocultos en los programas que escriben. .
Incluso si tienes sólidos conocimientos de informática, si tu trabajo diario requiere alternar entre C++, Python, R/Matlab o incluso varios lenguajes de programación, la carga mental será muy pesada y La energía de las personas es limitada. Es difícil tener en cuenta la enorme brecha entre el modelado matemático y la depuración de código de bajo nivel al mismo tiempo. El resultado más probable del desarrollo a largo plazo es mantenerse alejado del modelado y concentrarse en el desarrollo del entorno de producción, o mantenerse alejado del entorno de producción y concentrarse en el modelado. Esta situación obviamente tiene grandes desventajas tanto para los individuos como para los equipos.
Si piensas profundamente en este tema, creo que no es difícil llegar a la conclusión de que para Quant, C++, un lenguaje bastante orientado a máquinas, definitivamente no es la mejor opción. De hecho, históricamente ha sido mucho más amigable que el C, más orientado a las máquinas. Sin embargo, con el rápido desarrollo de la tecnología informática actual, obviamente sería una lástima que Quant todavía necesitara usar C++ ampliamente para realizar trabajos de modelado. Imagine que obtiene datos sobre acciones, ya sea que desee analizar las tendencias de los precios, la distribución del volumen de operaciones o la volatilidad, lo primero que debe hacer es dibujar un gráfico para tener una comprensión intuitiva. Si su herramienta es C ++, debe dedicar mucho tiempo al proceso de compilación, depuración y recompilación. Después de que finalmente pueda analizar el archivo, ¿cómo calcular el promedio móvil a continuación? ¿Cómo calcular la volatilidad? Tienes que escribir el código tú mismo. ¿Cómo hacer dibujos a continuación? Todo este flujo de trabajo es miserable y la mayor parte de tu energía se desperdicia con estas preguntas, y ninguna de ellas tiene nada que ver con el trabajo que realmente te interesa. Entonces, si es un recién llegado con experiencia en finanzas matemáticas y planea comenzar una carrera en Quant, debe tener cuidado al decidir si invertir en esta tecnología de peso pesado, a pesar de que su precio actual de mercado aún puede estar en su punto máximo.
Por el contrario, creo que Python será una opción más ideal. Puede completar bien el trabajo de modelado y también puede entrenar ciertas habilidades de programación, de modo que pueda ser competente en algunos trabajos simples de C++ cuando sea necesario.
Finalmente, estoy de acuerdo con @元浩han, no te limites a un solo idioma, no importa cuál aprendas, debes tener la mente abierta hacia otros idiomas. Además, el mundo está cambiando muy rápido y descubrirá que un método de clasificación de un solo idioma en realidad no tiene sentido. Cada idioma absorberá gradualmente las características de otros idiomas en el proceso de desarrollo. Tan imperativo como C/C++/Java También tiene características funcionales. Por ejemplo, pandas incluso proporciona un uso similar a SQL. También contiene características más o menos diferentes, que puede experimentar lentamente durante el proceso de aprendizaje.