4 votos

Asesoramiento sobre el aprendizaje de C++ y su integración con Python/R/MATLAB para la financiación cuantitativa

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++.

2voto

Chad Puntos 131

Vengo de un fondo de Matlab y Python principalmente habiendo utilizado sólo brevemente C ++ en un curso de vuelta de la universidad y he estado recogiendo C ++ y el pensamiento orientado a objetos del libro "C ++ patrones de diseño y la fijación de precios de derivados" sin demasiada dificultad y estoy teniendo un montón de diversión con ella. El libro aplica el enfoque de la programación orientada a objetos estándar a la fijación de precios de los derivados, por lo que podría ser exactamente lo que estás buscando. El primer capítulo es la construcción de un muy simple Monte Carlo precio de la opción y luego continúa mostrando cómo hacerlo "de la manera correcta" con la POO de una manera que le permite añadir continuamente al programa de una manera orgánica con el fin de que haga cosas más complejas.

Creo que eso toca tu primera y tercera pregunta, en cuanto a la segunda creo que la respuesta que suele dar el autor del libro es "Si quieres un trabajo como Quant entonces necesitas aprender C++ así que aguántate", si es esencial para tu investigación no te lo puedo decir. En mi opinión, el principal beneficio de construir la lógica en C++ o en la programación orientada a objetos en general es que el código será fácilmente ampliable y reutilizable, lo cual es muy beneficioso si trabajas en proyectos en equipo y tienes que entregar una base de código a otras personas o hacer que otra persona intente mantener tu código, pero puede que no sea una de tus mayores preocupaciones.

1voto

ir7 Puntos 435

La gran ventaja del diseño orientado a objetos es conceptual. A la gente le cuesta ver los "objetos". El resto de las ventajas son sólo corolarios de una mente clara.

Un modelo de fijación de precios se compone de datos de mercado (curvas, superficies y cubos, por mercado, IR, EQ, FX, etc.), una dinámica o distribución marginal (Hull-White, SABR, etc.), un producto (aka payoff, opción asiática, nota bermudiana, etc.) y un método para calcular la expectativa (Monte Carlo, PDE, etc.). Y esto es sólo el principio. Cada una de estas entidades tiene su propia estructura: no se puede llegar al modelo de volatilidad local estocástica sin construir cuidadosamente sobre el movimiento browniano (geométrico o aritmético), la volatilidad local y, finalmente, el SLV.

No hay ninguna razón para confundir o mezclar estas entidades o para implementarlas de otra manera que no sea la manera OOP.

0voto

Greg Hurlman Puntos 10944

Haciéndose eco de una respuesta anterior, puede leer Patrones de diseño en C++ y fijación de precios de los derivados por el difunto Mark Joshi . Además, hay otros libros que figuran en esta respuesta .

Sin embargo, voy a hacer algunas recomendaciones diferentes.

Hay muchos lenguajes de programación utilizados en las finanzas cuantitativas. Ciertamente, C++ es popular, sobre todo cuando se requiere cada onza de rendimiento. Pero no es la única opción, y yo personalmente lo desaconsejaría si el rendimiento no es su principal preocupación. (R y Python son razonables y ampliamente utilizados).

Además, yo recomendaría no hacer OOP, incluso en C++. Las clases son geniales, pero la herencia y el polimorfismo dinámico ( virtual ) han caído en desgracia frente a la programación genérica ( template ).

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