Il s'agit d'une collection de cahiers Jupyter basés sur différents sujets dans le domaine de la finance quantitative.
Presque! :)
Ceci est juste une collection de sujets et d’algorithmes qui, à mon avis, sont intéressants.
Il contient plusieurs sujets qui ne sont pas si populaires de nos jours, mais qui peuvent être très puissants. Habituellement, des sujets tels que les méthodes EDP, les processus de Lévy, les méthodes de Fourier ou le filtre de Kalman ne sont pas très appréciés des praticiens, qui préfèrent travailler avec des outils plus standards.
Le but de ces cahiers est de présenter ces sujets intéressants, en montrant leur application pratique à travers une implémentation Python interactive.
Pas pour les débutants absolus.
Ces sujets nécessitent des connaissances de base en calcul stochastique, en mathématiques financières et en statistiques. Une connaissance de base en programmation python est également nécessaire.
Dans ces cahiers, je n'expliquerai pas ce qu'est une option d'achat, ni ce qu'est un processus stochastique, ni une équation aux dérivées partielles.
Cependant, chaque fois que j'introduireai un concept, j'ajouterai également un lien vers la page wiki correspondante ou vers un manuel de référence. De cette façon, le lecteur pourra immédiatement comprendre de quoi je parle.
Ces notes s'adressent aux étudiants en sciences, en économie ou en finance ayant suivi au moins un cours de premier cycle en mathématiques et statistiques financières.
Les étudiants ou praticiens autodidactes devraient avoir lu au moins un livre d’introduction aux mathématiques financières.
Tout d’abord, ce n’est pas un livre !
Chaque carnet est (presque) indépendant des autres. Vous pouvez donc sélectionner uniquement le carnet qui vous intéresse !
- Every notebook contains python code ready to use!
Il n’est pas facile de trouver sur internet des exemples de modèles financiers implémentés en python qui soient prêts à l’emploi et bien documentés.
Je pense que les débutants en finance quantitative trouveront ces cahiers très utiles !
De plus, les notebooks Jupyter sont interactifs, c'est-à-dire que vous pouvez exécuter le code à l'intérieur du notebook. C’est probablement la meilleure façon d’étudier !
Si vous ouvrez un notebook avec Github ou NBviewer, il arrive parfois que les formules mathématiques ne s'affichent pas correctement. Pour cette raison, je vous suggère de cloner/télécharger le référentiel.
Non!
Je téléchargerai plus de cahiers de temps en temps.
Pour le moment, je m'intéresse aux domaines des processus stochastiques, du filtre de Kalman, des statistiques et bien plus encore. J'ajouterai des cahiers plus intéressants sur ces sujets à l'avenir.
Si vous avez des questions, si vous trouvez des erreurs ou si vous avez des suggestions d'améliorations, n'hésitez pas à me contacter.
1.1) Méthodes numériques Black-Scholes (distribution lognormale, changement de mesure, Monte Carlo, méthode Binomiale) .
1.2) Simulation et statistiques SDE (génération de chemins, intervalles de confiance, tests d'hypothèses, mouvement brownien géométrique, processus Cox-Ingersoll-Ross, méthode Euler Maruyama, estimation des paramètres)
1.3) Méthodes d'inversion de Fourier (formule d'inversion, inversion numérique, tarification d'options, FFT, formule de Lewis)
1.4) SDE, modèle Heston (mouvements browniens corrélés, chemins Heston, distribution Heston, fonction caractéristique, tarification des options)
1.5) SDE, processus de Lévy (Merton, Variance Gamma, NIG, génération de chemin, estimation de paramètres)
2.1) L'EDP de Black-Scholes (discrétisation de l'EDP, méthode implicite, tutoriel sur les matrices creuses)
2.2) Options exotiques (Options binaires, Options barrière, Options asiatiques)
2.3) Options américaines (PDE, Exercice anticipé, Méthode binomiale, Longstaff-Schwartz, Perpetual put)
3.1) Merton Jump-Diffusion PIDE (discrétisation implicite-explicite, convolution discrète, limitations du modèle, Monte Carlo, inversion de Fourier, formule semi-fermée)
3.2) Variance Gamma PIDE (PIDE approximatif de diffusion par saut, Monte Carlo, inversion de Fourier, Comparaison avec Black-Scholes)
3.3) PIDE gaussien inverse normal (PIDE de diffusion par sauts approximatif, Monte Carlo, inversion de Fourier, propriétés de la mesure de Lévy)
4.1) Tarification avec coûts de transaction (modèle Davis-Panas-Zariphopoulou, problème de contrôle singulier, inégalité variationnelle HJB, tarification d'indifférence, arbre binomial, performances)
4.2) Sourire de volatilité et calibrage du modèle (sourire de volatilité, méthodes de recherche de racine, méthodes de calibrage)
5.1) Régression linéaire et filtre de Kalman (nettoyage des données de marché, méthodes de régression linéaire, conception du filtre de Kalman, choix des paramètres)
5.2) Suivi d'autocorrélation de Kalman - Processus AR(1) (Processus autorégressif, méthodes d'estimation, filtre de Kalman, lisseur de Kalman, suivi d'autocorrélation variable)
5.3) Suivi de la volatilité (simulation Heston, tests d'hypothèses, ajustement de distribution, méthodes d'estimation, GARCH(1,1), filtre de Kalman, lisseur de Kalman)
6.1) Processus et applications Ornstein-Uhlenbeck (estimation des paramètres, temps de frappe, Vasicek PDE, filtre de Kalman, stratégie de trading)
7.1) MVO classique (optimisation de la variance moyenne, programmation quadratique, uniquement long et long-short, formule fermée)
A.1) Annexe : Equations linéaires (LU, Jacobi, Gauss-Seidel, SOR, Thomas)
A.2) Annexe : Optimisation du code (cython, code C)
A.3) Annexe : Revue de la théorie des processus de Lévy (définitions de base et importantes, dérivation du PIDE de tarification)
Environnement virtuel :
Ici j'explique comment créer un environnement virtuel avec Anaconda et avec le module python venv.
Vous pouvez recréer mon environnement virtuel conda testé avec :
conda env create -f environment.yml
pip install -e .
La première ligne recrée l'environnement virtuel et installe tous les packages.
Avec la deuxième ligne, nous installons simplement le package local FMNM
.
Si vous souhaitez créer un nouvel environnement avec la dernière version de Python, vous pouvez faire :
conda create -n FMNM python
conda activate FMNM
PACKAGES= $( tr ' n ' ' ' < list_of_packages.txt | sed " s/arch/arch-py/g " )
conda install ${PACKAGES[@]}
pip install -e .
où dans la troisième ligne nous remplaçons le nom du package arch
par arch-py
, qui est le nom utilisé par conda.
Si vous préférez créer un venv
qui utilise python 3.11.4, vous pouvez le faire comme suit :
python3.11.4 -m venv --prompt FMNM python-venv
source python-venv/bin/activate
python3 -m pip install --upgrade pip
pip install --requirement requirements.txt
pip install -e .
Si vous préférez utiliser la version python déjà installée sur votre système, il vous suffit d'exécuter
pip install --requirement list_of_packages.txt
pip install -e .
puis entrez dans le shell jupyter-notebook
ou jupyter-lab
:
Cependant, si vous utilisez d’anciennes versions, des problèmes de compatibilité pourraient survenir.
Docker:
Ici, nous exécutons les notebooks avec jupyterlab :
Vous pouvez utiliser docker-compose pour créer un conteneur :
docker-compose up --build -d
Et puis arrêtez le conteneur avec
docker-compose down
Et ouvrez le navigateur sur http://localhost:8888/lab
Alternativement, vous pouvez
docker build -t fmnm .
docker run --rm -d -p 8888:8888 --name Numeric_Finance fmnm