Plan d'auto-étude pour devenir un développeur quantitatif

Auteur:La bonté, Créé: 2019-02-12 09:08:19, mis à jour:

J'ai récemment reçu de nombreux e-mails de personnes souhaitant changer de carrière en ingénierie, université et informatique. La finance quantitative est devenue un domaine particulièrement attrayant récemment en raison du défi intellectuel et de la rémunération élevée. Une question qui se pose constamment dans ces e-mails est que dois-je étudier pour convaincre un intervieweur de me donner un emploi?. Ceci est le premier d'une série en trois parties qui discutera de la façon de former un plan d'auto-étude pour obtenir un emploi dans l'industrie de la finance quantitative.

Les développeurs quantitatifs ne sont pas différents: ils doivent s'intégrer dans une équipe de traders, d'ingénieurs financiers et de support informatique afin d'aider les banques d'investissement à évaluer et à vendre de nouveaux produits d'investissement structurés ou d'aider les fonds à développer une infrastructure de trading et des systèmes de gestion de portefeuille.

L'informatique scientifique

La voie la plus courante vers le développement quantitatif est via un parcours académique en informatique scientifique. C'est parce que les compétences de base nécessaires pour un développement quantique sont des compétences de programmation avancées et la mise en œuvre d'algorithmes numériques. Ces compétences sont développées comme une évidence dans un environnement de recherche d'études supérieures pour les sciences physiques ou l'ingénierie.

Cependant, si votre formation n'est pas en informatique scientifique, il y a encore beaucoup d'opportunités de devenir un développeur quantitatif en tirant parti d'une formation en programmation.

Compétences en programmation

En premier lieu, un développeur quantitatif EST un développeur de logiciels. Ainsi, le rôle sera presque exclusivement basé sur la programmation à 100%. Vous vous retrouverez à optimiser des prototypes de trading ou à développer une infrastructure de trading à partir de zéro. Si vous ciblez des rôles bancaires, vous devrez probablement utiliser C++, Java ou C# dans un environnement Microsoft/Windows. Si vous ciblez des fonds spéculatifs, vous traduirez probablement MatLab ou R en C++ et/ou Python. Les fonds ont tendance à utiliser moins Java et C#, car ils sont souvent dans un environnement UNIX où C++ et Python ont plus de sens.

En supposant que vous êtes un programmeur compétent et que vous êtes heureux de passer au logiciel le plus utilisé dans l'industrie financière, alors je vous suggère d'apprendre le C++ et Python extrêmement bien, car cela vous donne les capacités les plus transversales dans différents secteurs de l'industrie. Voici mon plan d'étude suggéré pour devenir un bon programmeur C++:

Lisez l'intégralité d'Accelerated C++ par Andrew Koenig. Ce livre vous permettra de vous familiariser avec la syntaxe C++ et, en particulier, vous expliquera en détail les pointeurs et la gestion de la mémoire. C'est un domaine que de nombreux programmeurs (y compris ceux qui ont une formation en Java et en C#) ne connaissent pas. Il est préférable de lire les exemples pendant la mise en œuvre, soit avec Microsoft Visual Studio ou le compilateur GCC sur Linux/UNIX, afin de pratiquer la syntaxe, plutôt que de simplement la lire! Lisez (plusieurs fois!) l'intégralité de Effective C++ par Scott Meyers. J'ai répété ce conseil constamment sur le site, mais il vaut toujours la peine de le répéter. Ce livre vous mènera d'un programmeur débutant en C++ à un programmeur intermédiaire prêt pour une entrevue. Ce livre est plus difficile à pratiquer devant le terminal, car Meyers établit des exemples compliqués. Si vous postulez directement pour des emplois en C++, vous voudrez probablement aller au-delà de ces deux travaux. Scott Meyers a également écrit C++ plus efficace et STL efficace. Vous devrez alors considérer la bibliothèque Boost, la programmation multithread et les fondamentaux du système d'exploitation Linux pour devenir un véritable expert. Il en va de même pour Python:

Si vous êtes déjà un programmeur expérimenté en C++/Java/C#, alors lisez certaines sections de Learning Python par Mark Lutz. En particulier, lisez les chapitres 4-9, qui discutent des Python construits en types. Les chapitres 10-13 discutent de la syntaxe de Python pour le ramification et la boucle, de sorte qu'ils peuvent également être lus à la légère pour déterminer la syntaxe. Cependant, il vaut la peine de passer beaucoup de temps sur les chapitres 14-20, car ils discutent des caractéristiques spécifiques de Python telles que les itérations / compréhensions et l'utilisation avancée des fonctions. Les sections V et VI couvrent l'espacement de noms et la programmation orientée objet, et comment ces concepts diffèrent dans Python d'un langage tel que C++/Java. Si vous voulez être un bon programmeur Python intermédiaire, alors vous devriez également considérer les chapitres restants du livre. Le deuxième livre de Mark Lutz, Programming Python, traite de la création d'applications dans Python. Cela vous permettra de commencer à créer des applications robustes. Cela vous aidera à devenir un meilleur ingénieur logiciel Python. Pour ceux qui sont définitivement intéressés par le côté commercial quantitatif de l'industrie, il sera nécessaire d'apprendre à effectuer l'analyse de données dans Python. Après avoir suivi le plan ci-dessus, vous devriez avoir de bonnes chances lors de toute entrevue C ++ ou Python. Cependant, afin de consolider vos compétences en développement, il est nécessaire d'être au courant de certaines des dernières innovations en génie logiciel, qui ont tendance à ne se comprendre que sur le lieu de travail, mais peuvent certainement être étudiées et pratiquées à la maison pendant votre temps libre.

Ingénierie logicielle

Pour être un bon candidat d'entrevue pour un poste de développeur de quantité, vous devez devenir à la fois un bon programmeur ET un bon développeur de logiciels. Beaucoup peuvent apprendre le premier des manuels et de la pratique. Cependant, ce dernier ne peut être appris que en travaillant sur de plus grands projets de logiciels, généralement avec d'autres développeurs. Cependant, cela ne signifie pas qu'il ne peut pas être incorporé dans un programme d'étude à domicile!

QuantLib

Lire (quelques-uns) du code source de ce projet vous donnera une bonne idée de la façon dont les projets de logiciels C++ à grande échelle sont écrits.

Pour devenir un bon développeur de logiciels, il est nécessaire de comprendre comment concevoir des projets de logiciels à grande échelle.Pour le développement de logiciels modernes, cela nécessite l'utilisation du contrôle de version, de l'intégration continue et d'autres pratiques agiles.Voici un plan d'étude pour vous aider à maîtriser ces concepts:

Lisez à la fois Steve McConnell's Code Complete et Robert Martin's Clean Code. Ces deux livres vous feront sérieusement repenser votre façon de concevoir des logiciels, à partir des premiers principes. Par exemple, combien de temps passez-vous à concevoir votre logiciel avant de toucher le clavier? Ces deux livres vous épargneront des heures de développement de code gaspillé. Je suggérerais d'appliquer le plus rapidement possible les conseils contenus dans ces livres à vos projets pour éliminer les mauvaises habitudes. Ils sont également excellents à discuter lors de l'entretien, car on vous demandera invariablement d'écrire du code. Une discussion sur le bon savoir-faire des logiciels ne serait pas complète sans mentionner les modèles de conception, également connus sous le nom de Gang Of Four livre. Ce livre est très pertinent pour un langage tel que C ++, bien que moins pour un langage de script comme Python. Vous remarquerez probablement que vous utilisez des conceptions similaires dans votre code. Ce livre vous aide à déterminer quand et où ils doivent être appliqués. Lorsque vous travaillez sur des projets de logiciels à grande échelle avec plusieurs membres d'équipe, il est absolument nécessaire de faire usage de logiciels de contrôle de version. La révision automatique, le retour en arrière, le branchement / fusion et une meilleure capacité de test signifient que le contrôle de version est omniprésent dans presque toutes les (bons) institutions logicielles. Les deux grands concurrents sont Git et Subversion (SVN). Je suggère de ne se familiariser qu'avec Git car SVN est similaire (si un peu plus difficile à utiliser!) et la plupart des institutions remplacent leurs dépôts SVN par des équivalents Git. Il existe un eBook gratuit sur l'apprentissage de Git, Git Pro, que je vous suggère de travailler votre chemin. Cela vous permettra d'économiser des heures de temps de développement perdu! Certaines industries se tournent maintenant vers des pratiques d'intégration continue, qui encouragent les tests et le déploiement continus de code via un système de test et de déploiement entièrement automatisé. Interaction avec la base de données

Bien que devenir un excellent programmeur et un excellent développeur de logiciels soient les conditions préalables à l'obtention d'un poste d'entrevue, on vous posera également des problèmes liés au stockage et à l'analyse des données. L'un des composants clés de la vie quotidienne d'un développeur quantique est l'interaction avec les bases de données.

La meilleure façon de commencer à apprendre sur le RDBMS est d'installer une version open source (car vous pouvez les télécharger gratuitement!) et de suivre la liste de lecture ci-dessous. Il est au-delà de la portée de cet article de vous apprendre à installer un RDBMS, mais vous pouvez essayer MySQL, car il s'agit d'une base de données très courante au sein des fonds spéculatifs. SQL Server et Oracle sont plus susceptibles d'être répandus dans le secteur bancaire. Une fois que vous avez installé une base de données telle que MySQL, utilisez les guides suivants pour vous aider à comprendre le stockage et l'accès aux données:

Si vous n'êtes pas familier avec SQL, alors le livre OReilly Learning SQL d'Alan Beaulieu est un excellent début. Il couvre tous les SQL débutants et intermédiaires que vous aurez besoin de savoir pour stocker, accéder et fournir des rapports pour les données. Il discutera également de l'optimisation de la base de données de manière brève. Assurez-vous de lire l'intégralité du livre car tout le matériel est pertinent pour les tâches quotidiennes quant dev de base de données. Pour des tâches spécifiques de base de données, vous voudrez jeter un coup d'œil au OReilly SQL Cookbook. Bien que les développeurs quant ne soient pas souvent des administrateurs de base de données, si vous souhaitez en savoir plus sur l'optimisation avancée de MySQL, alors les deux livres suivants, bien que certainement pas nécessaires, sont très utiles si vous rencontrez des problèmes de base de données: High Performance MySQL et MySQL High Availability. Finances et algorithmes numériques

Comme un développeur quantitatif travaille sur les marchés financiers, il est utile d'avoir une bonne compréhension des produits produits par les banques ou des instruments négociés par les fonds. Il sera donc nécessaire de se familiariser (à grande échelle) avec les marchés des actions, du forex, des titres à revenu fixe, des matières premières et des produits dérivés connexes.

Les algorithmes utilisés dans la finance quantitative pour effectuer à la fois la tarification des instruments et le trading algorithmique sont plus pertinents. Les techniques de tarification des produits dérivés des banques d'investissement se concentreront presque certainement sur les méthodes de Monte Carlo et les méthodes de différence finie, qui reposent toutes deux sur la connaissance de la probabilité, des statistiques, de l'analyse numérique et des équations aux différentiels partiels.

Pour les fonds spéculatifs, vous allez probablement mettre en œuvre une infrastructure de trading - à basse ou haute fréquence. Cela impliquera de prendre un algorithme déjà codé en MatLab, R ou Python (ou même C++) et de l'optimiser dans un langage plus rapide, tel que C++, ainsi que de connecter cet algorithme à une interface de programmation d'application de courtage (API) et d'exécuter des transactions. Les compétences requises ici sont assez disparates. Vous devrez être capable de rassembler des données provenant de diverses sources, de les mettre dans le contexte correct, de les itérer rapidement, puis de générer des rapports à la demande soit en format fixe (PDF), via le Web ou sous forme d'API.

Pour en savoir plus sur ces sujets, veuillez consulter mes articles sur la mise en œuvre de C ++, mes articles sur la mise en œuvre de Python et la liste de lecture de la finance quantitative.

Appliquer pour un emploi

Bien que la liste ci-dessus ressemble à une grande quantité de matériel à étudier, ce ne sera le cas que pour quelqu'un qui est complètement nouveau dans la programmation. Il est peu probable qu'un poste de développeur quantitatif soit adapté à une telle personne et je suppose que votre propre expérience sera en programmation ou en sciences physiques. Assurez-vous de ne lire que les sections que vous jugez pertinentes pour votre propre situation, car sinon vous pourriez facilement passer quelques années de votre temps libre à apprendre le matériel ci-dessus!

Une fois que vous pensez que vous êtes prêt pour l'entrevue, vous devrez commencer le processus de contact avec les recruteurs quantitatifs. Il y a des entreprises spécialisées qui traitent avec les banques d'investissement et les fonds spéculatifs.mike@quantstart.comet je serai heureux de vous indiquer la bonne direction.

Tout bon recruteur discutera de vos antécédents avec un degré raisonnable de détail car il met sa réputation en jeu lorsqu'il vous recommande pour un entretien. Les recruteurs ne sont généralement pas très familiers avec les détails techniques de la technologie quantitative et n'ont pas besoin de l'être. Cependant, cela signifie qu'ils doivent s'appuyer davantage sur la correspondance de mots clés pour leur propre filtrage CV / CV. Assurez-vous que si vous êtes fort avec C ++ que vous indiquez C ++ compétences - fort et référence au STL, Boost et tous les projets C ++ sur lesquels vous avez travaillé, par exemple. Ne soyez pas modeste au sujet de vos compétences, mais ne les surestimez pas non plus.

Étant donné que le marché de l'emploi (en 2013) n'est pas le meilleur en ce moment (en particulier au niveau débutant), vous constaterez peutêtre qu'il vous faudra un certain temps pour obtenir l'emploi que vous recherchez.


Plus de