Plano de auto-estudo para se tornar um desenvolvedor quantitativo

Autora:Bem-estar, Criado: 2019-02-12 09:08:19, Atualizado:

Recentemente, recebi muitos e-mails de pessoas que desejam mudar de carreira de engenharia, academia e TI. Finanças quantitativas se tornaram uma área particularmente atraente recentemente devido ao desafio intelectual e alta remuneração. Uma pergunta que surge constantemente nesses e-mails é o que preciso estudar para convencer um entrevistador a me dar um emprego?. Esta é a primeira de uma série de três partes que discutirão como formar um plano de auto-estudo para obter um emprego na indústria de finanças quantitativas.

Qualquer carreira em finanças quantitativas requer um grau de generalização em vez de especialização extensa. Os desenvolvedores quantitativos não são diferentes. Eles devem se encaixar em uma equipe de traders, engenheiros financeiros e suporte de TI para ajudar os bancos de investimento a avaliar e vender novos produtos de investimento estruturados ou ajudar os fundos a desenvolver infraestrutura de negociação e sistemas de gerenciamento de carteira.

Computação Científica

A rota mais comum para o desenvolvimento quantitativo é através de uma formação acadêmica em computação científica. Isso ocorre porque as habilidades básicas necessárias para um quant dev são habilidades avançadas de programação e implementação de algoritmos numéricos. Essas habilidades são desenvolvidas como uma questão de curso dentro de um ambiente de pesquisa de pós-graduação para as ciências físicas ou engenharia.

No entanto, se sua formação não é em computação científica, ainda há muitas oportunidades para se tornar um desenvolvedor quantitativo alavancando uma formação em programação.

Habilidades de programação

Primeiro e acima de tudo, um desenvolvedor quantitativo é um desenvolvedor de software. Assim, o papel será quase exclusivamente baseado em 100% de programação. Você vai encontrar-se otimizando protótipos de negociação ou desenvolvendo infraestrutura de negociação a partir do zero. Se você estiver visando papéis bancários, então provavelmente precisará usar C ++, Java ou C # em um ambiente Microsoft / Windows. Se você estiver visando fundos de hedge, provavelmente estará traduzindo MatLab ou R para C ++ e / ou Python. Os fundos tendem a usar menos Java e C #, já que muitas vezes estão em um ambiente UNIX onde C ++ e Python fazem mais sentido.

Assumindo que você é um programador competente e está feliz em mudar para o software mais amplamente usado na indústria financeira, então eu sugeriria aprender C ++ e Python extremamente bem, pois isso lhe dá a capacidade mais transversal em diferentes setores da indústria.

Leia a totalidade do Acelerated C++ de Andrew Koenig. Este livro vai te ajudar a começar a aprender a sintaxe do C++ e, em particular, vai entrar em detalhes sobre ponteiros e gerenciamento de memória. Esta é uma área que muitos programadores (incluindo aqueles com formação em Java e C#) não estarão tão familiarizados. É melhor ler os exemplos enquanto implementam, seja com o Microsoft Visual Studio ou o compilador GCC no Linux/UNIX, a fim de praticar a sintaxe, em vez de apenas lê-la! Leia (múltiplas vezes!) a totalidade de Effective C++ por Scott Meyers. Repeti este conselho consistentemente em todo o site, mas ainda vale a pena dizer novamente. Este livro vai levá-lo de um programador iniciante em C++ para um programador intermediário que está pronto para uma entrevista. Este livro é mais difícil de praticar na frente do terminal, pois Meyers estabelece alguns exemplos complicados. Se você está se candidatando diretamente a empregos em C++, provavelmente desejará ir além desses dois trabalhos. Scott Meyers também escreveu C++ mais eficaz e STL eficaz. Da mesma forma para Python:

Se você já é um programador habilidoso em C++/Java/C#, então leia certas seções de Aprender Python de Mark Lutz. Em particular, olhe para os capítulos 4-9, que discutem Python construído em tipos. Os capítulos 10-13 discutem a sintaxe do Python para ramificação e looping, para que também possam ser lidos facilmente para determinar a sintaxe. No entanto, vale a pena gastar um tempo significativo nos capítulos 14-20, pois eles discutem recursos específicos do Python, como Iterações/Compreensões e uso avançado de funções. As seções V e VI cobrem namespacing e programação orientada a objetos, e como esses conceitos diferem no Python de uma linguagem como C++/Java. Se você quiser ser um bom programador intermediário do Python, então você também deve considerar os capítulos restantes do livro. O segundo livro de Mark Lutz, Programming Python, é sobre a construção de aplicativos dentro do Python. Isso levará todo o conhecimento de sintaxe adquirido no primeiro e permitirá que você comece a construir aplicativos robustos. Isso ajudará você a se tornar um engenheiro de software Python muito melhor. Para aqueles que estão definitivamente interessados no lado quantitativo de negociação da indústria, será necessário aprender a realizar análise de dados dentro do Python. Esta é uma habilidade muitas vezes adquirida enquanto na escola de pós-graduação, mas o Python for Data Analysis de Wes McKinney cobre bem algumas das bibliotecas mais recentes disponíveis, como SciPy e pandas. No entanto, para solidificar suas habilidades de desenvolvedor, é necessário estar ciente de algumas das inovações recentes na engenharia de software, que apenas tendem a ser descobertas no trabalho, mas certamente podem ser estudadas e praticadas em casa em seu tempo livre.

Engenharia de Software

Ser um bom candidato a entrevista para uma posição de desenvolvedor de quantidade requer que você se torne um bom programador E um bom desenvolvedor de software. Muitos podem aprender o primeiro a partir de livros didáticos e prática. No entanto, o último só pode ser aprendido trabalhando em projetos de software maiores, geralmente com outros desenvolvedores. No entanto, isso não significa que não possa ser incorporado em um programa de estudo em casa!

QuantLib

A leitura do código fonte deste projeto lhe dará uma boa ideia de como são escritos projetos de software C++ em larga escala.

Para se tornar um bom desenvolvedor de software, é necessário compreender como elaborar projetos de software em larga escala.Para o desenvolvimento de software moderno, isso requer o uso de controle de versão, integração contínua e outras práticas ágeis.Aqui está um plano de estudo para ajudá-lo a entender esses conceitos:

Leia tanto o Steve McConnell's Code Complete quanto o Robert Martin's Clean Code. Ambos os livros farão com que você repensar seriamente como você projeta software, a partir de princípios básicos. Por exemplo - quanto tempo você gasta projetando seu software antes de tocar no teclado? Ambos os livros vão economizar horas de desenvolvimento de código desperdiçado. Eu sugeriria que você aplique o máximo de dicas nesses livros em seus projetos o mais rápido possível para remover maus hábitos. Eles também são ótimos para discutir na entrevista, pois você sempre será solicitado a escrever algum código. Uma discussão sobre o bom design de software não seria completa sem mencionar o livro Design Patterns, também conhecido como Gang Of Four. Este livro é altamente relevante para uma linguagem como C++, embora menos para uma linguagem de script como Python. Você provavelmente notará que está usando designs semelhantes em seu código. Este livro ajuda você a determinar quando e onde eles devem ser aplicados. Um benefício é que outros bons desenvolvedores estarão cientes deles - tornando você mais popular entre seu grupo de pares de desenvolvimento. Quando se trabalha em projetos de software de grande escala com vários membros da equipe, é uma necessidade absoluta fazer uso de software de controle de versão. A revisão automática, o rollback, o ramificação / fusão e uma melhor capacidade de teste significam que o controle de versão é onipresente em quase todas as instituições de software (boas). Os dois grandes concorrentes são o Git e o Subversion (SVN). Eu sugeriria familiarizar-se apenas com o Git, pois o SVN é semelhante (embora um pouco mais difícil de usar!) e a maioria das instituições está substituindo seus repositórios SVN por equivalentes do Git. Há um eBook gratuito sobre aprendizado do Git, o Git Pro, que eu sugiro que você trabalhe. Isso economizará horas de tempo de desenvolvimento desperdiçado! Algumas indústrias estão agora se voltando para práticas de integração contínua, que incentivam o teste contínuo e implantação de código através de um sistema de teste e implantação totalmente automatizado. Interação com base de dados

Embora se tornar um excelente programador e um excelente desenvolvedor de software sejam os pré-requisitos para obter uma posição de entrevista, você também será questionado sobre problemas relacionados ao armazenamento e análise de dados. Um dos componentes-chave no dia a dia de um desenvolvedor quant é interagir com bancos de dados. Assim, um certo nível de maturidade com o manuseio de bancos de dados deve ser esperado. Se você nunca utilizou um sistema de armazenamento de dados, então a melhor maneira de começar é começando a entender os Sistemas de Gerenciamento de Base de Dados Relacionais (RDBMS) e sua linguagem - Structured Query Language (SQL).

A melhor maneira de começar a aprender sobre o RDBMS é instalar uma versão de código aberto (como você pode baixá-los gratuitamente!) e seguir a lista de leitura abaixo. Está além do escopo deste artigo para ensiná-lo a instalar um RDBMS, mas você pode tentar o MySQL, pois este é um banco de dados muito comum dentro de fundos de hedge. O SQL Server e o Oracle são mais propensos a ser prevalentes dentro do setor bancário. Uma vez que você tenha instalado um banco de dados como o MySQL, use os seguintes guias para ajudá-lo a entender o armazenamento e o acesso a dados:

Se você não tem familiaridade com o SQL, então o livro OReilly Learning SQL por Alan Beaulieu é um ótimo começo. Ele cobre todos os SQL iniciantes e intermediários que você precisará saber para armazenar, acessar e fornecer relatórios para dados. Ele também discutirá a otimização de banco de dados de forma breve. Certifique-se de ler o livro inteiro, pois todo o material é relevante para tarefas diárias de banco de dados quant dev. Para tarefas específicas de banco de dados, você vai querer dar uma olhada no OReilly SQL Cookbook. Eu achei este livro incrivelmente útil quando eu era um dev, pois eu estava continuamente tirando-o da prateleira para procurar uma determinada data / hora ou consulta de relatório! Embora os desenvolvedores quant não sejam geralmente administradores de banco de dados, se você deseja aprender mais sobre otimização avançada do MySQL, então os dois livros seguintes, embora certamente não sejam necessários, são altamente úteis se você estiver enfrentando problemas de banco de dados: MySQL de alto desempenho e MySQL de alta disponibilidade. Finanças e algoritmos numéricos

Uma vez que um desenvolvedor quantitativo trabalha nos mercados financeiros, é útil ter uma compreensão relativamente boa dos produtos que os bancos produzem ou dos instrumentos que os fundos serão negociados. Assim, será necessário familiarizar-se (amplamente) com as ações, forex, renda fixa, commodities e mercados de derivativos relacionados. Em particular, você quer estar continuamente pensando em como esses dados são representados, armazenados e acessados, pois uma grande parte do trabalho de um desenvolvedor quantitativo é fornecer armazenamento e acesso a dados financeiros.

Mais relevantes são os algoritmos usados em finanças quantitativas para realizar tanto o preço dos instrumentos quanto a negociação algorítmica. As técnicas de preços de derivados do banco de investimento quase certamente se concentrarão nos Métodos de Monte Carlo e Métodos de Diferença Finita, ambos baseados no conhecimento de probabilidade, estatísticas, análise numérica e equações diferenciais parciais.

Para os fundos de hedge, você provavelmente implementará uma infraestrutura de negociação - com baixa ou alta frequência. Isso envolverá tomar um algoritmo já codificado em MatLab, R ou Python (ou mesmo C ++) e, em seguida, otimizá-lo em uma linguagem mais rápida, como C ++, bem como conectar esse algoritmo a uma interface de programação de aplicativos de corretagem (API) e executar negócios. As habilidades necessárias aqui são bastante dispares. Você precisará ser capaz de reunir dados de várias fontes, colocá-los no contexto correto, iterá-los rapidamente e, em seguida, gerar relatórios sob demanda em formato fixo (PDF), na web ou como uma API. Essas habilidades são difíceis de aprender diretamente de livros e exigem alguns anos de experiência em desenvolvimento de software na indústria da tecnologia.

Para ler mais sobre esses tópicos, dê uma olhada nos meus artigos de Implementação C ++, em meus artigos de Implementação Python e na Lista de Leitura de Finanças Quantitativas.

Solicitar emprego

Embora a lista acima pareça uma quantidade extensa de material para estudar, isso só será o caso de alguém completamente novo na programação. É improvável que uma posição de desenvolvedor quantitativo seja adequada para tal indivíduo e eu suponho que sua própria formação será em programação ou ciências físicas. Certifique-se de ler apenas as seções que você considera relevantes para sua própria situação, pois de outra forma você poderia facilmente gastar alguns anos de seu tempo livre aprendendo o material acima!

Uma vez que você acredita que está pronto para a entrevista, então você precisará começar o processo de contato com recrutadores quantitativos.mike@quantstart.comE eu vou apontar-te para a direcção certa.

Qualquer bom recrutador discutirá seu histórico com um grau razoável de detalhe, pois eles estão colocando sua reputação em jogo quando o recomendam para uma entrevista. Os recrutadores geralmente não estão muito familiarizados com as técnicas da tecnologia quantitativa e nem precisam estar. No entanto, isso significa que eles precisam confiar mais em buzzword matching para sua própria filtragem de CV / currículo. Certifique-se de que, se você é forte com C ++, você declare C ++ habilidades - fortes e faça referência ao STL, Boost e a quaisquer projetos de C ++ em que você trabalhou, por exemplo. Não seja modesto sobre suas habilidades, mas também não as exagere.

Uma vez que o mercado de trabalho (em 2013) não é o melhor (especialmente no nível de entrada) neste momento, poderá descobrir que levará algum tempo para conseguir o emprego que procura.O truque é continuar a tentar, pois, a cada entrevista a que participa, vai ganhar mais conhecimento sobre o que os recrutadores e entrevistadores procuram e assim poderá adaptar o seu estudo a este objectivo.


Mais.