Recientemente he recibido muchos correos electrónicos de personas que desean cambiar de carrera de ingeniería, academia e TI. Las finanzas cuantitativas se han convertido en un área particularmente atractiva recientemente debido al desafío intelectual y la alta remuneración. Una pregunta que surge constantemente en estos correos electrónicos es
Cualquier carrera en finanzas cuantitativas requiere un grado de generalización en lugar de una amplia especialización. Los desarrolladores cuantitativos no son diferentes. Deben encajar en un equipo de operadores, ingenieros financieros y soporte informático para ayudar a los bancos de inversión a fijar el precio y vender nuevos productos de inversión estructurados o ayudar a los fondos a desarrollar infraestructura de negociación y sistemas de gestión de carteras.
Computación científica
La ruta más común hacia el desarrollo cuantitativo es a través de un fondo académico en computación científica. Esto se debe a que las habilidades básicas necesarias para un desarrollo cuántico son habilidades avanzadas de programación e implementación de algoritmos numéricos. Estas habilidades se desarrollan como algo natural dentro de un entorno de investigación de la escuela de posgrado para las ciencias físicas o la ingeniería. Si este es su fondo, entonces su tarea será familiarizarse con los productos específicos y algoritmos numéricos utilizados dentro de las finanzas cuantitativas, ya que es probable que sus habilidades generales de implementación y programación estén suficientemente desarrolladas.
Sin embargo, si su experiencia no es en computación científica, todavía hay muchas oportunidades para convertirse en un desarrollador cuantitativo aprovechando una experiencia en programación.
Habilidades de programación
En primer lugar, un desarrollador cuantitativo ES un desarrollador de software. Por lo tanto, el papel será casi exclusivamente 100% basado en la programación. Usted se encontrará optimizando prototipos comerciales o desarrollando infraestructura comercial desde cero. Si usted está apuntando a roles bancarios, entonces probablemente necesitará usar C ++, Java o C # en un entorno Microsoft / Windows. Si usted está apuntando a fondos de cobertura, entonces probablemente estará traduciendo MatLab o R a C ++ y / o Python. Los fondos tienden a usar menos Java y C #, ya que a menudo están en un entorno UNIX donde C ++ y Python tienen más sentido.
Suponiendo que usted es un programador competente y están felices de cambiar al software más utilizado en la industria financiera, entonces yo sugeriría aprender C ++ y Python extremadamente bien, ya que eso le da la capacidad más transversal en diferentes sectores de la industria.
Lee la totalidad de Accelerated C++ de Andrew Koenig. Este libro te ayudará a aprender de cero la sintaxis de C++ y, en particular, entrará en detalles sobre punteros y gestión de memoria. Este es un área con la que muchos programadores (incluidos los de experiencia en Java y C#) no estarán tan familiarizados. Es mejor leer los ejemplos mientras implementas, ya sea con Microsoft Visual Studio o el compilador GCC en Linux/UNIX, para practicar la sintaxis, en lugar de solo leerla! Lee (múltiples veces!) la totalidad de Effective C++ de Scott Meyers. He repetido este consejo consistentemente en todo el sitio, pero todavía vale la pena repetirlo. Este libro te llevará de un programador principiante de C++ a un programador intermedio que está listo para una entrevista. Este libro es más difícil de practicar realmente frente al terminal, ya que Meyers establece algunos ejemplos complicados. Una forma de ejecutar este libro sería determinar dónde en tus propios proyectos puedes aplicar los patrones. Si usted está solicitando trabajos en C++, probablemente querrá ir más allá de estos dos trabajos. Scott Meyers también ha escrito C++ más efectivo y STL efectivo. Lo mismo para Python:
Si ya eres un programador experto en C++/Java/C#, entonces lee ciertas secciones de Aprender Python de Mark Lutz. En particular, analiza los capítulos 4-9, que discuten Python construido en tipos. Los capítulos 10-13 discuten la sintaxis de Python para ramificación y bucle, por lo que también se pueden leer con ligereza para determinar la sintaxis. Sin embargo, vale la pena pasar un tiempo significativo en los capítulos 14-20, ya que discuten características específicas de Python como Iteraciones/Comprensiones y uso avanzado de funciones. Las secciones V y VI cubren el espacio de nombres y la programación orientada a objetos, y cómo estos conceptos difieren en Python de un lenguaje como C++/Java. Si quieres ser un buen programador intermedio de Python, entonces también debes considerar los capítulos restantes del libro.
El segundo libro de Mark Lutz, Programming Python, es sobre la creación de aplicaciones dentro de Python. Esto tomará todo el conocimiento de sintaxis adquirido en el primero y le permitirá comenzar a construir aplicaciones robustas. Esto le ayudará a convertirse en un mejor ingeniero de software de Python.
Para aquellos que definitivamente están interesados en el lado comercial cuantitativo de la industria, será necesario aprender cómo llevar a cabo el análisis de datos dentro de Python.
Después de seguir el plan anterior, usted debería tener una buena oportunidad en cualquier entrevista de C ++ o Python. Sin embargo, para consolidar sus habilidades de desarrollador, es necesario estar al tanto de algunas de las innovaciones recientes en ingeniería de software, que solo tienden a ser descubiertas
Ingeniería de software
Para ser un buen candidato a la entrevista para un puesto de desarrollador de quant requiere que te conviertas tanto en un buen programador como en un buen desarrollador de software. Muchos pueden aprender el primero de los libros de texto y la práctica. Sin embargo, este último solo se puede aprender trabajando en proyectos de software más grandes, generalmente con otros desarrolladores. Sin embargo, esto no significa que no se pueda incorporar en un programa de estudio en casa!
CuantLib
Leer (algunos de) el código fuente de este proyecto le dará una buena idea de cómo se escriben los proyectos de software C ++ a gran escala.
Para convertirse en un buen desarrollador de software, es necesario comprender cómo elaborar proyectos de software a gran escala.Para el desarrollo de software moderno, esto requiere el uso del control de versiones, la integración continua y otras prácticas ágiles.Aquí hay un plan de estudio para ayudarlo a comprender estos conceptos:
Lee tanto el código completo de Steve McConnell como el código limpio de Robert Martin. Ambos libros te harán repensar seriamente cómo diseñas el software, desde los primeros principios. Por ejemplo, ¿cuánto tiempo pasas diseñando tu software antes de tocar el teclado? Ambos libros te ahorrarán horas de desarrollo de código desperdiciado.
Una discusión sobre la buena artesanía del software no estaría completa sin mencionar los patrones de diseño, también conocido como el libro
Aunque convertirse en un excelente programador y un excelente desarrollador de software son los requisitos previos para obtener un puesto de entrevista, también se le pedirán problemas relacionados con el almacenamiento y análisis de datos. Uno de los componentes clave en la vida cotidiana de un desarrollador cuántico es interactuar con las bases de datos. Por lo tanto, se espera un cierto nivel de madurez con el manejo de bases de datos.
La mejor manera de comenzar a aprender sobre RDBMS es instalar una versión de código abierto (¡pues puedes descargarlos gratis!) y seguir la lista de lectura a continuación. Está más allá del alcance de este artículo enseñarte cómo instalar un RDBMS, pero puedes probar MySQL, ya que esta es una base de datos muy común dentro de los fondos de cobertura. SQL Server y Oracle son más propensos a ser prevalentes dentro de la banca. Una vez que hayas instalado una base de datos como MySQL, usa las siguientes guías para ayudarte a comprender el almacenamiento y el acceso de datos:
Si no estás familiarizado con SQL, entonces el libro de O
Dado que un desarrollador cuantitativo trabaja en los mercados financieros, es útil tener una comprensión relativamente buena de los productos que producen los bancos o los instrumentos que los fondos comercializarán. Por lo tanto, será necesario familiarizarse (ampliamente) con las acciones, divisas, renta fija, materias primas y mercados de derivados relacionados. En particular, desea pensar continuamente en cómo se representan, almacenan y acceden a estos datos, ya que una gran parte del trabajo de un desarrollador cuantitativo es proporcionar almacenamiento y acceso a datos financieros. Una vez en el trabajo, casi seguramente se concentrará en un área en particular en profundidad, así que asegúrese de que su investigación inicial sea bastante amplia.
Los algoritmos utilizados en las finanzas cuantitativas para llevar a cabo tanto el precio de los instrumentos como el comercio algorítmico son más relevantes. Las técnicas de precios de derivados de los bancos de inversión casi seguramente se concentrarán en los métodos de Monte Carlo y los métodos de diferencia finita, ambos basados en el conocimiento de la probabilidad, las estadísticas, el análisis numérico y las ecuaciones diferenciales parciales.
Para los fondos de cobertura, es probable que esté implementando una infraestructura de negociación, ya sea de baja o alta frecuencia. Esto implicará tomar un algoritmo ya codificado en MatLab, R o Python (o incluso C ++) y luego optimizarlo en un lenguaje más rápido, como C ++, así como conectar este algoritmo a una interfaz de programación de aplicaciones de corretaje (API) y ejecutar operaciones. Las habilidades requeridas aquí son bastante dispares. Necesitará poder reunir datos de varias fuentes, ponerlos en el contexto correcto, iterar rápidamente y luego generar informes bajo demanda ya sea en formato fijo (PDF), a través de la web o como una API en sí misma. Estas habilidades son difíciles de aprender directamente de libros y requieren unos años de experiencia en desarrollo de software en la industria de la tecnología.
Para leer más sobre estos temas, por favor eche un vistazo a mis artículos de implementación de C ++, mis artículos de implementación de Python y la lista de lectura de finanzas cuantitativas.
Solicitar trabajo
Aunque la lista anterior parece una cantidad extensa de material para estudiar, esto solo será el caso de alguien completamente nuevo en programación. Es poco probable que un puesto de desarrollador cuantitativo sea adecuado para tal individuo y supongo que su propio fondo será en programación o ciencias físicas. Asegúrese de leer solo las secciones que considere relevantes para su propia situación, ya que de lo contrario podría pasar fácilmente unos años de su tiempo libre aprendiendo el material anterior.
Una vez que creas que estás listo para la entrevista, entonces tendrás que comenzar el proceso de contactar a los reclutadores cuantitativos. Hay firmas especializadas que se ocupan de bancos de inversión y fondos de cobertura.mike@quantstart.comy con mucho gusto te indicaré la dirección correcta.
Cualquier buen reclutador hablará de su experiencia con un grado razonable de detalle, ya que están poniendo en juego su reputación cuando lo recomiendan para una entrevista. Los reclutadores generalmente no están muy familiarizados con los detalles técnicos de la tecnología cuantitativa y tampoco necesitan estarlo. Sin embargo, esto significa que tienen que confiar más en la coincidencia de palabras de moda para su propia filtración de CV / currículum. Asegúrese de que si usted es fuerte con C ++ que indique habilidades C ++ - fuertes
Dado que el mercado de trabajo (en 2013) no es el mejor (especialmente en el nivel de entrada) en este momento, es posible que encuentre que le llevará un tiempo conseguir el trabajo que está buscando.El truco es seguir intentándolo, ya que con cada entrevista a la que asista, obtendrá más conocimiento sobre lo que buscan los reclutadores y entrevistadores y, por lo tanto, podrá adaptar su estudio a esto.