Retour aux projets

Finance quantitative · C++ · Pricing

Pricing d’options en C++ (CRR, Black-Scholes, Monte Carlo)

Projet académique de groupe orienté ingénierie financière en C++. L’objectif était de construire un socle de pricing d’options avec plusieurs approches complémentaires: modèle binomial CRR, formule fermée Black-Scholes (cas européen) et simulation Monte Carlo. Je me suis principalement concentré sur la brique Monte Carlo: amélioration de la précision numérique, gestion de gros volumes de trajectoires dans un temps limité et fiabilisation des calculs (payoffs, bornes, intervalles de confiance).

C++Monte CarloBlack-ScholesCRRMersenne TwisterVisual Studio

Ce que ce projet démontre

Capacité à implémenter des pricers quantitatifs en C++ avec une architecture orientée objets, et à optimiser une simulation Monte Carlo pour améliorer à la fois robustesse et performance.

Pricing d’options en C++ (CRR, Black-Scholes, Monte Carlo) - detailed view

Mon rôle

Projet de groupe. Ma contribution principale: développement et amélioration du pricer Monte Carlo (génération de trajectoires, stabilité numérique, intervalle de confiance 95 %, gestion d’un grand nombre de paths dans un temps imparti), ainsi que l’intégration du générateur aléatoire Mersenne Twister.

Contexte

Le projet s’inscrit dans un cadre de finance de marché orienté pricing d’options. Le travail d’équipe portait sur la construction d’une base commune (options + pricers), puis sur l’approfondissement de modules spécifiques.

Objectif

Comparer plusieurs méthodes de valorisation dans un même codebase, valider leur cohérence sur des cas standards et disposer d’une implémentation Monte Carlo utilisable avec un grand nombre de simulations.

Deep dive

Lecture technique du projet

Le projet assemble trois approches de pricing (CRR, Black-Scholes, Monte Carlo) dans une architecture C++ orientée objets. Ma partie principale concerne le moteur Monte Carlo et sa robustesse sous charge.

  • Support de plusieurs familles d’options: vanille, digitale, asiatique et américaine.
  • Implémentation de plusieurs pricers pour comparaison: CRR, formule fermée Black-Scholes, simulation Monte Carlo.
  • Génération de trajectoires sous hypothèses Black-Scholes avec pas temporels dédiés.
  • Calcul de prix, statistiques agrégées et intervalle de confiance 95 %.
  • Sécurisation des cas limites numériques pour éviter des résultats incohérents.

Captures

Écrans et visualisations clés

Simulation Monte Carlo pour le pricing d’options en C++

Aperçu de la logique Monte Carlo utilisée pour estimer des prix d’options.

Architecture

Organisation technique

Hiérarchie d’options

Classe abstraite `Option` et spécialisations pour options européennes, américaines et asiatiques, avec logique de payoff polymorphe.

Couche pricers

Pricers séparés par méthode (`CRRPricer`, `BlackScholesPricer`, `BlackScholesMCPricer`) pour isoler clairement les hypothèses de valorisation.

Moteur aléatoire

Générateur `MT` basé sur Mersenne Twister en singleton, utilisé comme source unifiée pour les tirages uniformes et normaux.

Runner de tests de prix

Exécutable principal pour comparer les résultats des pricers selon des paramètres communs (spot, strike, volatilité, maturité, taux).

Pipeline

Flux de données

  1. 1.Paramétrage de l’option (type, strike, maturité) et du modèle (S0, r, sigma).
  2. 2.Construction du pricer adapté (CRR, BS fermé ou Monte Carlo).
  3. 3.Pour Monte Carlo: génération de trajectoires avec tirages gaussiens via Mersenne Twister.
  4. 4.Évaluation des payoffs sur chaque trajectoire puis agrégation statistique.
  5. 5.Actualisation des payoffs moyens pour obtenir le prix estimé.
  6. 6.Calcul de l’intervalle de confiance pour qualifier l’incertitude statistique.

Choix techniques

Décisions structurantes

Réutilisation mémoire dans la simulation

Le moteur Monte Carlo réutilise des buffers de trajectoires afin de limiter les allocations répétées et tenir un grand nombre de simulations.

Contrôles de robustesse numérique

Ajout de garde-fous sur les valeurs non finies/négatives et sur la variance pour éviter des sorties instables lors des fortes charges de calcul.

Intervalle de confiance 95 %

Le pricer ne se limite pas à un prix point-estimé: il retourne aussi une borne statistique pour juger la précision de la simulation.

Séparation claire par méthode de pricing

Le découpage CRR / BS / MC facilite la comparaison des approches et permet d’améliorer chaque moteur indépendamment.

Fiabilité

Qualité et contrôles

  • Validation des entrées critiques (option nulle, échéances, tailles de trajectoires).
  • Gestion explicite des cas limites Monte Carlo (nombre de paths insuffisant, stabilité des bornes).
  • Approche modulaire qui simplifie les tests unitaires par composant (option, pricer, aléatoire).

Limites

Points d'attention actuels

  • Le modèle reste basé sur les hypothèses Black-Scholes (volatilité constante, dynamique log-normale).
  • Les comparaisons de vitesse/performance ne sont pas encore outillées par un benchmark automatisé complet.
  • Le moteur ne couvre pas encore des modèles plus avancés (volatilité stochastique, sauts, calibration marché).

Évolutions

Prochaines étapes

  • Ajouter un protocole de benchmark reproductible (temps CPU, erreur statistique selon N paths).
  • Étendre le moteur à des réductions de variance (antithétiques, control variates) pour gagner en précision à coût constant.
  • Connecter les résultats de pricing à un module d’analyse portefeuille plus large (sensibilités, scénarios).

Difficultés rencontrées

Les principaux enjeux du projet

Concevoir une architecture option/pricer réutilisable pour des payoffs différents (vanille, digitale, asiatique, américaine).

Faire tourner un volume élevé de simulations Monte Carlo tout en gardant un code lisible et une latence raisonnable.

Limiter les dérives numériques (valeurs non finies, variances négatives dues aux arrondis, cas limites sur les intervalles de confiance).

Conserver une cohérence métier entre les différentes méthodes de pricing (CRR, Black-Scholes, Monte Carlo).

Résultats et apprentissages

Ce que j'en retiens

Mise en place d’un framework C++ de pricing couvrant options européennes, américaines et asiatiques.

Implémentation d’un pricer Monte Carlo avec accumulation statistique (moyenne, variance) et intervalle de confiance à 95 %.

Améliorations ciblées de performance Monte Carlo (réutilisation de structures en mémoire, génération de nombreuses trajectoires dans un temps contraint).

Intégration d’un singleton Mersenne Twister pour standardiser la génération aléatoire dans le projet.

Autres projets

Continuer la visite

Application de suivi de patrimoine - project preview

Finance personnelle · Python · PyQt6

Application de suivi de patrimoine

Application desktop PyQt6 + SQLite pour centraliser des comptes multi-actifs, reconstruire l’historique hebdomadaire et analyser la performance d’un portefeuille.

Voir ce projet
Backtest et optimisation de portefeuille - project preview

Finance quantitative · Analyse · Python

Backtest et optimisation de portefeuille

Environnement Python pour backtester des stratégies, comparer des métriques risque/rendement et analyser un portefeuille.

Voir ce projet

Échanger

Je peux détailler les choix techniques et les résultats en entretien.

Si ce projet vous intéresse, je peux revenir plus précisément sur le besoin initial, la structure des données, les hypothèses, les difficultés rencontrées et les limites de l'analyse.