Para más información, soy un estudiante de doctorado en economía. Aunque no estudié finanzas anteriormente, tomé un curso de cálculo estocástico y un curso de valoración de activos en mercados incompletos a nivel de doctorado. Hablamos principalmente de modelos de precios de opciones y sus aplicaciones (piense, modelos GARCH, modelos de volatilidad estocástica, modelos de difusión de saltos, etc.). He estado trabajando en problemas de precios de opciones últimamente y estoy empezando a darme cuenta de lo intensivas que pueden ser estas cosas desde el punto de vista computacional. Por ejemplo, calibrar un modelo de valoración de opciones definiendo una probabilidad gaussiana en el espacio de volatilidad implícita requiere que ponga precio a varios miles de contratos de opciones, lo que puede ser muy largo de hacer, incluso si disfruto de una fórmula de valoración de forma casi cerrada.
Así que me preguntaba cuánto esfuerzo se necesitaría para aprender a usar C++ para hacer algo del trabajo pesado cuando necesito aumentar la velocidad. Ya sé cómo usar MATLAB, R y estoy aprendiendo lentamente a usar Python. El profesor con el que estoy trabajando también me sugirió que aprendiera programación orientada a objetos en Python ya que a menudo simplificaría mi vida. Empecé a hacer esto y va bastante bien. Entonces, ¿de cuánto esfuerzo estamos hablando? En mi caso, estamos viendo básicamente hacer algo de álgebra matricial, intergración numérica, etc. o, en algunos casos, quizás ejecutar simulaciones de Monte Carlo relativamente simples y ser capaces de mover los resultados hacia adelante y hacia atrás entre un lenguaje de nivel superior (como Python, R o MATLBA) y C++.
La segunda pregunta es ¿cuán útil es? ¿Realmente le daría suficiente uso para justificar el tiempo que podría pasar aprendiéndolo? Quiero decir, puedo hacer muchas cosas usando los paquetes de software existentes y he pasado mucho tiempo siendo capaz de piratear esos problemas, pero necesitaré rutinas personalizadas de vez en cuando. En resumen, me gustaría tener una mejor idea de las compensaciones involucradas aquí por parte de alguien que realmente use C++ para resolver problemas de computación intensivos.
La última pregunta es: ¿alguien tiene recursos relevantes sobre el tema? Si es posible, me gustaría tener tutoriales que incluyan ejemplos que traten sobre cómo ejecutar regresiones simples en los datos, cómo ejecutar una simulación de Monte Carlo o cómo poner precio a las opciones europeas, ya que son lo suficientemente parecidos a lo que yo hago como para relacionarlos con lo que ya sé sobre la programación en otros lenguajes.
Gracias de antemano.
0 votos
La mayor parte de lo que hago tiene que ver con la econometría. Hice un trabajo de previsión macroeconómica utilizando el aprendizaje automático. Me llevó muchísimo tiempo: hablamos de medio millón de errores de previsión en el principal backtest entre modelos, variables y horizontes. Todos mis proyectos actuales tienen que ver con la econometría y la mayor parte de mi trabajo incluirá un fuerte elemento empírico o simulaciones... Así que, econometría, sobre todo.
1 votos
C++ es el más rápido cuando se trata de simulaciones de Monte Carlo, y puede compilar fácilmente sus funciones en R a través del excelente paquete Rcpp. La otra forma es usar Python y la compilación JIT a través de Numba, que debería ser un poco más lento que C++ pero no requiere cambiar entre dos lenguajes diferentes. La POO está bien aquí, pero si usas QuantLib-Python ya tienes objetos muy estructurados: puedes relajarte y disfrutar de un diseño de programación funcional básico.
1 votos
Utilizando el paquete Numba ( numba.pydata.org ) para compilar funciones matemáticas en C sería el camino a seguir. Se obtiene la velocidad de C dentro de Python. También, FWIW, Python no es sólo para hacer scripts. Si realmente quieres construir todos los objetos desde cero, la POO en Python no es diferente en principio que en C++.
0 votos
Pensé que Numpy ya estaba escrito en C, no entiendo el sentido de Numba?
1 votos
@jbs Eg.: Para valorar las opciones, puede que tenga que utilizar simulaciones de Montecarlo. Empieza a ser importante cuando tienes decenas de miles de contratos que valorar dentro de una estimación de máxima verosimilitud. Puedes vectorizar parte del trabajo para acelerarlo, pero no puedes vectorizar todo en Python -- tendrás que trabajar con bucles en algún lugar para esto. Alternativamente, puedes llamar a código C++ compilado para hacerlo y, lo más probable es que ese código se ejecute MUCHO más rápido. Por eso la gente usa Numba en Python o archivos Mex en MATLAB.