{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "$\\newcommand\\E{{\\mathbf E}}$\n", "$\\newcommand\\indi[1]{{\\mathbf 1}_{\\displaystyle #1}}$\n", "$\\newcommand\\inde[1]{{\\mathbf 1}_{\\displaystyle\\left\\{ #1 \\right\\}}}$\n", "$\\newcommand{\\ind}{\\inde}$\n", "$\\newcommand{\\N}{{\\mathbb N}}$\n", "$\\newcommand{\\P}{{\\mathbb P}}$\n", "$\\newcommand{\\R}{{\\mathbb R}}$\n", "$\\newcommand{\\Z}{{\\mathbb Z}}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Méthode de monte-carlo pour le pricing d'option

\n", "

Le modèle de Black et Scholes

\n", "

Bernard Lapeyre, Octobre 2021

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Préliminaires" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 1.1.__ Ecrire une fonction __Python__ qui calcule la moyenne\n", " empirique `Moyenne`, la variance empirique `Variance`\n", " empirique d'un tableau de nombre.\n", " \n", "Vérifiez qu'elles coïncident (presque) avec les fonctions prédéfinies de __Python__: `np.mean`, `np.var`." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "import numpy as np;\n", "import math;\n", "import scipy.stats as stats;\n", "import random;\n", "import matplotlib.pyplot as plt;\n", "\n", "def moyenne(x):\n", " res=A_FAIRE\n", " return res\n", "\n", "\n", "def Variance(x):\n", " res = A_FAIRE\n", " N = np.size(x)\n", " return res*N/(N-1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# n tirages uniforme sur [0,1]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Mes functions : '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'{0:.7f}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmoyenne\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m', --------- ,'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'{0:.7f}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mVariance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m print('Celles de numpy : ','{0:.7f}'.format(np.mean(x)),',','{0:.7f}'.format(np.var(x)),\n\u001b[1;32m 5\u001b[0m ',','{0:.7f}'.format(np.var(x)*n/(n-1)))\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mmoyenne\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmoyenne\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mres\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mA_FAIRE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] } ], "source": [ "n=1000\n", "x=np.random.rand(n) # n tirages uniforme sur [0,1]\n", "print('Mes functions : ','{0:.7f}'.format(moyenne(x)),', --------- ,','{0:.7f}'.format(Variance(x)))\n", "print('Celles de numpy : ','{0:.7f}'.format(np.mean(x)),',','{0:.7f}'.format(np.var(x)),\n", " ',','{0:.7f}'.format(np.var(x)*n/(n-1)))\n", "# visiblement Numpy utilise l'estimateur de variance non biaisé" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " __Question 1.2.__ Ecrire une fonction permettant de simuler un vecteur consitué\n", " de variables aléatoires gaussiennes centrées réduites indépendantes.\n", "\n", " Tracer l'histogramme du vecteur obtenu et verifier qu'il correspond bien\n", " à la loi gaussienne centrée réduite. \n", "\n", " Cette fonction existe dans __Python__ : `np.random.normal(size=n)`.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;31m# On superpose avec une densite empirique (obtenue par simulation)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0mX\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgauss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# notre tirage gaussien\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0;31m# on aurait pu utiliser X = np.random.normal(size=10000)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;31m# qui fait le meme chose\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mgauss\u001b[0;34m(N)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mU\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;31m# U est un vecteur (1,n)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mV\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;31m# V est un vecteur (1,n)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mA_FAIRE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;31m# On trace la densité de la gaussienne centrée réduite\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] }, { "data": { "image/png": "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777g9klIgEmT4JJLYPBg16XTsGH4ajxFyzucihvSV1hYSIMGDY61vouqUaPGsev+bolu3brxySef8OGHH3LLLbfw0EMPnbKfW1V55JFH+PWvf33KbUpyzz338MADD5CRkcHcuXN58sknAahatSqFhYXHtvOPS2/Tpg1Llixh2rRpPPLII1x11VU8/vjjLFq0iNmzZ5OZmclf//rXY6318v4cit6fkJBAQUEBqsqFF17IggULSnxN5WFz3RgDUFDgWuXnngsTJ0JZxionJsLbb8P337tunBjTrVs3pk6dyoEDB9izZw/vv/8+APXq1SMpKYm3334bcCG2YsWKUz7X999/z+mnn86dd97J8OHDWbp06QmP161blz179hy7nZaWxiuvvMLevXsB+PHHH9m6desJ+3Ts2JF58+axc+dOCgoKeOedd449tnv3bpo1cyO6//3vfx+7v2XLlse+99KlS/nuu+8A1w1Uq1Ytbr75Zh588EGWLl3K3r172b17N1dffTXPP//8SYFenp9DSdq2bUt+fv6xoD9y5Ai5ubnleq5A1qI3BuC112DlSpgypXzj4zt3hltugb/8xX0a8H0kjwWXXHIJN9xwAykpKZxzzjl07dr12GNvvPEGv/nNb/jDH/7AkSNHGDp06LH+8eLMnTuXZ599lmrVqlGnTp2Thic2btyYLl260K5dO/r168ezzz7LypUrufzyywGoU6cOr7/+OqeffvqxfZo1a8ajjz5Kp06dOOuss0hOTqZ+/fqAO2A6ZMgQmjVrRufOnY8F+vXXX8+rr75KSkoKl112GW3atAHgq6++4qGHHqJKlSpUq1aNl19+mT179jBw4EAOHjyIqjJu3LiTXldZfw4lqV69OlOmTOHee+9l9+7dFBQUcP/993PhhReW+bkCyak+9nghNTVVbeERU6kOHoQ2beDMM2HhwrK15gNt2ABt28Ivfwl//3vIylu5ciUXXHBByJ4vFu3du5c6depQUFDAtddeyx133MG1117rdVlhU9zfhIgsUdXU4ra3rhtjXnoJNm6EsWPLH/IALVvCb34Dr7wCvuF1pnI8+eSTx4ZsJiUlMWjQIK9LiijWojfxbfduaNXKHUydMaPiz7d1q3u+tDTXDRQC1qI3RVmL3piyGDcOtm93Ux2EwumnuykS3nkHQthgibQGmfFOef4WLOhN/Dp0yHXb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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def gauss(N):\n", " U=np.random.rand(N)# U est un vecteur (1,n)\n", " V=np.random.rand(N)# V est un vecteur (1,n)\n", " return A_FAIRE\n", "\n", "# On trace la densité de la gaussienne centrée réduite\n", "x = np.linspace(-5,5,100)\n", "densiteGaussienne = 1./np.sqrt(2*np.pi)*np.exp(-0.5*x**2)\n", "plt.plot(x, densiteGaussienne, color=\"red\", label=\"densite gaussienne\")\n", "plt.legend(loc=\"best\")\n", "\n", "# On superpose avec une densite empirique (obtenue par simulation)\n", "X=gauss(10000) # notre tirage gaussien\n", " # on aurait pu utiliser X = np.random.normal(size=10000)\n", " # qui fait le meme chose\n", "plt.hist(X, density=\"True\", bins=100, label=\"erreur normalisee\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 1.3.__ On cherche à calculer par simulation $\\E(e^{\\beta G})$ où $G$\n", " est une gaussienne centrée réduite. On rappelle que $\\E(e^{\\beta\n", " G})=\\exp(\\beta^2/2)$.\n", "\n", " Calculer par simulation $\\E(e^{\\beta G})$ pour\n", " $\\beta=1,1.5,2$. Précisez à chaque fois une intervalle de confiance." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1000000\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0mtest_1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 18\u001b[0m \u001b[0mtest_1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1.5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mtest_1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mtest_1\u001b[0;34m(N, b)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0merreur_exacte\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvaleur_estimee\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mvaleur_exacte\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0merreur_estimee\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mA_FAIRE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0merreur_estimee\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1.96\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariance_estimee\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] } ], "source": [ "def test_1(N,b):\n", "# Pour beta < 3. La méthode de MC marche correctement.\n", " X=np.exp(b*np.random.normal(size=N))\n", "\n", " valeur_exacte = np.exp(b*b/2);\n", " valeur_estimee = np.mean(X);\n", "\n", " erreur_exacte = np.abs(valeur_estimee - valeur_exacte) ;\n", "\n", " erreur_estimee = A_FAIRE\n", " erreur_estimee = 1.96 * np.sqrt(variance_estimee)/np.sqrt(N);\n", " \n", " print(\"beta =\",b,\", N=\",N,\", Erreur relative exacte = \",'{0:.2f}'.format(100* erreur_exacte / valeur_exacte),\n", " \", Erreur relative estimee = \", '{0:.2f}'.format(100 * erreur_estimee / valeur_exacte),\"%\") \n", " \n", "N=1000000\n", "test_1(N,1);\n", "test_1(N,1.5);\n", "test_1(N,2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 1.4.__ On va regarder ce qui se passe pour des valeurs de $\\beta$ plus grande que $3$.\n", "\n", " Calculer par simulation $\\E(e^{\\beta G})$ pour\n", " $\\beta=4,6,8,10\\ldots$. Précisez à chaque fois l'erreur relative exacte (i.e. la différence entre la valeur\n", " calculée et la valeur exacte divisée par la valeur exacte) comise.\n", " \n", " Dans ce cas, on ne peut pas non plus compter sur l'estimateur de la variance (pourquoi ?). \n", " Vérifier par simulation que l'estimation que l'on utilise classiquement pour obtenir l'intervalle de confiance \n", " n'est pas fiable.\n", " \n", " Pour quelles valeurs de $\\beta$ peut on utiliser cette\n", " méthode de monte-carlo de façon fiable ?" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[0;31m# La méthode de MC ne fonctionne pas dans ce cas. Variance trop grande.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1000000\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 32\u001b[0;31m \u001b[0mtest_2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 33\u001b[0m \u001b[0mtest_2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0mtest_2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m8\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mtest_2\u001b[0;34m(N, b)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mvaleur_exacte\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0merreur_relative\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mA_FAIRE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m print(\"beta=\",b,\"N=\",N,\", Valeur = \",'{0:.2f}'.format(valeur_exacte),\n\u001b[1;32m 10\u001b[0m \", Erreur relative exacte = \", '{0:.1f}'.format(100 * erreur_relative) ,\"%\") \n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] } ], "source": [ "def test_2(N,b):\n", "# La méthode de Monte-Carlo ne fonctionne pas quand beta est grand\n", " X=np.exp(b*np.random.normal(size=N))\n", "\n", " valeur_estimee = np.mean(X);\n", " valeur_exacte = np.exp(b*b/2);\n", " \n", " erreur_relative = A_FAIRE\n", " print(\"beta=\",b,\"N=\",N,\", Valeur = \",'{0:.2f}'.format(valeur_exacte),\n", " \", Erreur relative exacte = \", '{0:.1f}'.format(100 * erreur_relative) ,\"%\") \n", " \n", "def test_3(N,b):\n", "# La variance empirique converge mal. Elle ne permet pas d'obtenir un intervalle de confiance\n", "# fiable. Mais le théorème de la limite centrale reste vrai ...\n", " X=np.exp(b*np.random.normal(size=N))\n", "\n", " valeur_exacte = np.exp(b*b/2);\n", "\n", " valeur_estimee = np.mean(X);\n", " variance_estimee = Variance(X)\n", " \n", " erreur = np.abs(valeur_estimee - valeur_exacte) ;\n", " erreur_estimee = 1.96 * np.sqrt(variance_estimee)/np.sqrt(N);\n", " \n", " #print(\"beta=\",b,\"var exact=\",'{0:.1f}'.format(var_exact),\", var estime=\",'{0:.1f}'.format(var_estime),'{0:.1f}'.format(var_exact/var_estime))\n", " print(\"beta=\",b,\"N=\",N,\", Valeur = \",'{0:.2f}'.format(valeur_exacte),\n", " \", Erreur relative = \", '{0:.1f}'.format(100 * erreur / valeur_exacte),\"%, \",\n", " \", Erreur relative estimee = \", '{0:.1f}'.format(100 * erreur_estimee / valeur_exacte),\"%\") \n", "\n", "# La méthode de MC ne fonctionne pas dans ce cas. Variance trop grande.\n", "N=1000000\n", "test_2(N,4);\n", "test_2(N,6);\n", "test_2(N,8);\n", "test_2(N,10);\n", "\n", "print('\\n');print('\\n');\n", "\n", "# L'estimateur de variance est lui aussi inutile ...\n", "# La variance est encore plus difficile à estimer que l'espérance !\n", "N=1000000\n", "test_3(N,4);\n", "test_3(N,6);\n", "test_3(N,8);\n", "test_3(N,10);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Le modèle de Black et Scholes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On suppose que $(W_t,t\\geq 0)$ est un mouvement brownien. En particulier, pour tout temps $T$,\n", "$W_T$ est une gaussienne centrée de variance $T$.\n", "\n", "On considère le modèle de Black et Scholes :\n", "$$\n", " S_t = S_0 \\exp\\left(\\left(r-\\frac{\\sigma^2}{2}\\right)t + \\sigma W_t\\right).\n", "$$\n", "On supposera dans la suite que $S_0=100$, \n", "$\\sigma=0.3$ (volatilité annuelle) et $r=0.05$ (taux d'intérêt\n", "exponentiel annuel)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 2.1.__ Tracer l'histogramme de la loi de $S_T$, pour $T=1$,\n", " $\\sigma=0.3$ (volatilité annuelle) et $r=0.05$ (taux d'intérêt\n", " exponentiel annuel)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mW_T\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mS_T\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mA_FAIRE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mW_T\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdensity\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"True\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbins\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"erreur normalisee\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] } ], "source": [ "T=1; # an\n", "S_0=100; \n", "r=0.05; # par an\n", "sigma=0.3; # par racine d'annee sigma^2 * T est sans dimension\n", "K=100;\n", "\n", "# Question 1\n", "N=10000;\n", "W_T=np.sqrt(T)*np.random.normal(size=N);\n", "S_T=A_FAIRE\n", "plt.hist(W_T, density=\"True\", bins=100, label=\"erreur normalisee\");" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'S_T' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mS_T\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdensity\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"True\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbins\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"erreur normalisee\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'S_T' is not defined" ] } ], "source": [ "plt.hist(S_T, density=\"True\", bins=100, label=\"erreur normalisee\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 2.2.__ On cherche à calculer le prix d'un call de strike $K=100$.\n", " Calculer ce prix par une méthode de monte-carlo avec un nombre\n", " de tirages égaux à $N=1000$,$1000$,$10000$. On précisera \n", " l'intervalle de confiance." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Direct N ='\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m':'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mestimation\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'+-'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merreur\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mtest_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0mtest_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0mtest_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mtest_call\u001b[0;34m(N)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mW_T\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mS_T\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mS_0\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0msigma\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mW_T\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0mpayoff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mA_FAIRE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mestimation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpayoff\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m \u001b[0;31m# estimation de la moyenne\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] } ], "source": [ "# Question 2\n", "T=1; # an\n", "S_0=100; \n", "r=0.05; # par an\n", "sigma=0.3; # par racine d'annee sigma^2 * T est sans dimension\n", "K=100;\n", "\n", "def stdev(payoff):\n", " return np.sqrt(np.var(payoff));\n", "\n", "def call(x,K):\n", " return np.maximum(x-K*np.ones(np.size(x)),np.zeros(np.size(x)));\n", "\n", "def test_call(N):\n", " W_T=np.sqrt(T)*np.random.normal(size=N);\n", " S_T=S_0*np.exp((r-sigma**2/2)*T + sigma*W_T);\n", " payoff=A_FAIRE\n", "\n", " estimation=np.mean(payoff); # estimation de la moyenne\n", " ecart_type=stdev(payoff); # estimation de l'ecart type\n", " erreur=1.96*ecart_type/np.sqrt(N); # demi-largeur de l'intervalle de confiance\n", " print('Direct N =',N,':', estimation,'+-', erreur);\n", "\n", "test_call(100);\n", "test_call(1000);\n", "test_call(10000);\n", "test_call(100000);\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " __Question 2.3.__ On va chercher à utiliser la variable aléatoire $S_T$ comme une\n", " variable de contrôle. Vérifiez que $\\E(S_T)=S_0 e^{rT}$ (pourquoi ?).\n", "\n", " Ecrire un programme qui utilise $S_T$ comme variable de contrôle.\n", " Comparer la précision de cette méthode avec la précédente suivant les\n", " valeur relative de $K$ et $S_0$.\n", "\n", " Se convaincre que l'on a ainsi ramené le calcul du call à un calcul\n", " de put." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"CallPut N=\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\": \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mestimation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"+-\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merreur\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 26\u001b[0;31m \u001b[0mK\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0mtest_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0mtest_call_arbitrage\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 27\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m=\u001b[0m \u001b[0;36m80\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0mtest_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0mtest_call_arbitrage\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m=\u001b[0m \u001b[0;36m60\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0mtest_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0mtest_call_arbitrage\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mtest_call\u001b[0;34m(N)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mW_T\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mS_T\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mS_0\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0msigma\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mW_T\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0mpayoff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mA_FAIRE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mestimation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpayoff\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m \u001b[0;31m# estimation de la moyenne\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] } ], "source": [ "# Question 3\n", "T=1; # an\n", "S_0=100; \n", "r=0.05; # par an\n", "sigma=0.3; # par racine d'annee sigma^2 * T est sans dimension\n", "K=100;\n", "\n", "def put(x,K):\n", " return np.maximum(K*np.ones(np.size(x))-x,np.zeros(np.size(x)));\n", "\n", "def test_call_arbitrage(N):\n", "# C-P = S_0 - K exp(-rT)\n", "# On peut donc construire un nouvel estimateur\n", "# S_0 - K exp(-rT) + exp(-rT) * (K-S_T)_+\n", "\n", " W_T=np.sqrt(T)*np.random.normal(size=N);\n", " S_T=S_0*np.exp((r-sigma**2/2)*T + sigma*W_T);\n", " payoff=A_FAIRE\n", " \n", " estimation=np.mean(payoff); # estimation de la moyenne\n", " ecart_type=stdev(payoff); # estimation de l'ecart type\n", " erreur=1.96*ecart_type/np.sqrt(N); # demi-largeur de l'intervalle de confiance\n", "\n", " print(\"CallPut N=\",N,\": \", estimation, \"+-\", erreur);\n", "\n", "K=100;test_call(10000);test_call_arbitrage(10000);\n", "K= 80;test_call(10000);test_call_arbitrage(10000);\n", "K= 60;test_call(10000);test_call_arbitrage(10000);\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 2.4.__ On se place dans la cas d'un call de strike $K$ grand devant\n", " $S_0$. Montrer par simulation que la précision relative du calcul\n", " décroit au fur et à mesure que $K/S_0$ décroit. On prendra $S_0=100$\n", " et $K=100$, $150$, $200$, $250$. Que se passe t'il pour $K=400$ ?" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mS_0\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mprecision_relative\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0mprecision_relative\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m150\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mprecision_relative\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m200\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mprecision_relative\u001b[0;34m(K, N)\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0merreur\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1.96\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mecart_type\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m \u001b[0;31m# demi-largeur de l'intervalle de confiance\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 16\u001b[0;31m \u001b[0merreur_relative\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mA_FAIRE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 17\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Précision relative en % : \"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0merreur_relative\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] } ], "source": [ "# Question 4\n", "T=1; # an\n", "S_0=100; \n", "r=0.05; # par an\n", "sigma=0.3; # par racine d'annee sigma^2 * T est sans dimension\n", "\n", "def precision_relative(K,N):\n", " W_T=np.sqrt(T)*np.random.normal(size=N);\n", " S_T=S_0*np.exp((r-sigma**2/2)*T + sigma*W_T);\n", " payoff=np.exp(-r*T) * call(S_T,K);\n", "\n", " estimation=np.mean(payoff); # estimation de la moyenne\n", " ecart_type=stdev(payoff); # estimation de l'ecart type\n", " erreur=1.96*ecart_type/np.sqrt(N); # demi-largeur de l'intervalle de confiance\n", "\n", " erreur_relative=A_FAIRE\n", " print(\"Précision relative en % : \",100 * erreur_relative);\n", "\n", "S_0=100;N=10000;\n", "precision_relative(100,N)\n", "precision_relative(150,N)\n", "precision_relative(200,N)\n", "precision_relative(250,N)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 2.5.__ Montrer que:\n", " $$\n", " \\E\\left(f(W_T)\\right) \n", " = \\E\\left(e^{-\\lambda W_T -\\frac{\\lambda^2 T}{2}}f(W_T+\\lambda T)\\right).\n", " $$\n", " On se place dans le cas du call avec $S_0=100$ et $K=150$.\n", " Proposer une valeur de $\\lambda$ permettant de réduire la variance de\n", " la simulation." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'A_FAIRE' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m150\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0mLambda\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;31m# simulation naturelle, importance=1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 34\u001b[0;31m \u001b[0mtest_call_girsanov\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msigma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mS_0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mT\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mLambda\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0mLambda\u001b[0m\u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mK\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mS_0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m \u001b[0;31m# avec ce lambda avec proba 1/2, S_T > K, condition d'exercice\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mtest_call_girsanov\u001b[0;34m(r, sigma, S_0, T, K, Lambda, N)\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mS_T\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mS_0\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0msigma\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mW_T\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mLambda\u001b[0m\u001b[0;34m*\u001b[0m \u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mpayoff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mcall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mS_T\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mK\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0mimportance\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mA_FAIRE\u001b[0m\u001b[0;31m# Pour l'importance voir la formule du texte\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m \u001b[0mpayoff\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimportance\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mpayoff\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'A_FAIRE' is not defined" ] } ], "source": [ "# Question 5\n", "\n", "# La formule de Black et Scholes\n", "# pour verifier\n", "\n", "def NN(x):\n", " return stats.norm.cdf(x,0,1);\n", "\n", "def BS_Call(S_0,K,sigma,r,T):\n", " d1=(math.log(S_0/K)+(r+sigma**2/2)*T)/(sigma*math.sqrt(T));\n", " d2=d1-sigma*np.sqrt(T);\n", " return S_0*NN(d1)-K*np.exp(-r*T)*NN(d2);\n", "\n", "def test_call_girsanov(r, sigma, S_0, T, K, Lambda,N):\n", " W_T=math.sqrt(T)*np.random.normal(size=N);\n", " S_T=S_0*np.exp((r-sigma**2/2)*T + sigma*(W_T+Lambda* T));\n", " payoff=math.exp(-r*T) * call(S_T,K);\n", " importance = A_FAIRE# Pour l'importance voir la formule du texte\n", " payoff = importance * payoff; \n", "\n", " estimation=np.mean(payoff); # estimation de la moyenne\n", " ecart_type=stdev(payoff); # estimation de l'ecart type\n", " erreur=1.96*ecart_type/math.sqrt(N); # demi-largeur de l'intervalle de confiance\n", " print(\"Girsanov, (lambda=\",Lambda,\"), N=\",N, \" :\", estimation,\"+-\", erreur);\n", "\n", "T = 1; # an\n", "S_0 = 100; \n", "r = 0.05; # par an\n", "sigma = 0.3; # par racine d'annee sigma^2 * T est sans dimension\n", "\n", "N=5000;\n", "K=150;\n", "Lambda=0;# simulation naturelle, importance=1\n", "test_call_girsanov(r, sigma, S_0, T, K, Lambda,N);\n", "\n", "Lambda= (math.log(K/S_0)-(r-sigma**2/2)*T)/(sigma*T); # avec ce lambda avec proba 1/2, S_T > K, condition d'exercice \n", "test_call_girsanov(r, sigma, S_0, T, K, Lambda,N);\n", "\n", "# Vérification\n", "print(BS_Call(S_0,K,sigma,r,T))\n", "\n", "K=200;\n", "\n", "Lambda=0;# simulation naturelle, importance=1\n", "test_call_girsanov(r, sigma, S_0, T, K, Lambda,N);\n", "\n", "Lambda= (math.log(K/S_0)-(r-sigma**2/2)*T)/(sigma*T);\n", " # avec ce lambda avec proba 1/2, S_T > K, condition d'exercice \n", "test_call_girsanov(r, sigma, S_0, T, K, Lambda,N);\n", "\n", "# Vérification\n", "print(BS_Call(S_0,K,sigma,r,T))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Modèle de Panier" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On s'intéresse à un modèle de panier constitué à partir de $d$ actifs.\n", "On suppose que chacun de ces $d$ actifs de prix $S^i_t$ suit un modèle de\n", "black et Scholes guidé par un mouvement $W^i_t$~:\n", "$$\n", " \\frac{d S^i_t}{S^i_t} = r dt + \\sigma dW^i_t, S^i_0=x_i.\n", "$$\n", "On prendra dans les applications numériques $x_i=100$ et $d=10$.\n", "\n", "Pour déterminer complètement le modèle on doit spécifier les \n", "corrélation entre les mouvements browniens. Pour cela on suppose\n", "que~:\n", "$$\n", " d_t = \\rho dt,\n", "$$\n", "$\\rho$ étant une constante donnée que l'on prendra égale à $0.5$ \n", "dans les simulations.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 3.1__ Calculer la matrice de corrélation du vecteur\n", " $(W^1_T,\\ldots,W^d_T)$. Montrer qu'elle est\n", " définie positive." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 3.2__ Proposer une méthode de simulation pour le vecteur\n", " $(W^1_T,\\ldots,W^d_T)$ et $(S^1_T,\\ldots,S^d_T)$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " __Question 3.3__ On s'intéresse maintenant au calcul du prix d'un call sur\n", " un indice de prix $I_t$ donnée par\n", " $$\n", " I_t = a_1 S^1_t + \\cdots + a_d S^d_t.\n", " $$\n", " On prendra dans les applications numériques $a_1=\\cdots=a_d=1/d$.\n", " Calculer par simulation la valeur du call de payoff à l'instant $T$\n", " $$\n", " \\left(I_T-K\\right)_+,\n", " $$\n", " et estimer l'erreur commise dans le cas où $K=I_0$.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 3.3__ Montrer une relation d'arbitrage call-put et montrer que l'on\n", " peut l'utiliser pour mettre en oeuvre une technique de réduction de\n", " variance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 3.4__ En utilisant le \"théorème de Girsanov\" pour les $d$ mouvements\n", " browniens proposer une technique de réduction de variance dans le cas\n", " où $I_0$ est petit devant $K$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " __Question 3.5__ En supposant que $r$ et $\\sigma$ tendent vers $0$ expliquer pourquoi\n", " il est raisonnable d'approximer $\\log(I_t/I_0)$ par:\n", " $$\n", " a_1 S^1_0 \\log(S^1_t/S^1_0) + \\cdots + a_d S^d_0 \\log(S^d_t/S^d_0).\n", " $$\n", " En déduire une variable de contrôle pour le calcul du prix du call.\n", " Évaluer par simulation le gain de la méthode. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.5" } }, "nbformat": 4, "nbformat_minor": 2 }