σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyFeuilles de routeParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Feuilles de routeParcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyFeuilles de routeParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Feuilles de routeParcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours SciPy›Module 2 · Courbes et intégrales›Sujet 2.3·~40 minIntermédiaire

Fonctions spéciales dans la valorisation d'options

Position dans le parcoursModule 2 sur 3 · Sujet 3 sur 3
2.3 Fonctions spéciales dans la valorisation d'options
—Score du lab— / 100XP total—Série—

Les fonctions derrière les formules

scipy.special rassemble les fonctions nommées qui reviennent sans cesse dans les formules. La plus utile en finance est la fonction de répartition normale Φ(x)\Phi(x)Φ(x), disponible sous special.ndtr. Elle est liée à la fonction d'erreur par Φ(x)=12(1+erf⁡(x/2))\Phi(x)=\tfrac12\big(1+\operatorname{erf}(x/\sqrt2)\big)Φ(x)=21​(1+erf(x/2​)). Le prix de Black–Scholes d'un call de spot SSS, d'exercice KKK, de taux rrr, de volatilité σ\sigmaσ et de durée TTT l'utilise deux fois : C=S Φ(d1)−Ke−rTΦ(d2)C=S\,\Phi(d_1)-K e^{-rT}\Phi(d_2)C=SΦ(d1​)−Ke−rTΦ(d2​), où d1=ln⁡(S/K)+(r+σ2/2)TσTd_1=\dfrac{\ln(S/K)+(r+\sigma^2/2)T}{\sigma\sqrt T}d1​=σT​ln(S/K)+(r+σ2/2)T​ et d2=d1−σTd_2=d_1-\sigma\sqrt Td2​=d1​−σT​. La sensibilité du prix à la volatilité s'appelle le vega et vaut S φ(d1)TS\,\varphi(d_1)\sqrt TSφ(d1​)T​, où φ\varphiφ est la densité normale. Le vega est ce dont un solveur de Newton a besoin pour trouver une volatilité implicite.

L'autre groupe de fonctions spéciales concerne les nombres trop grands ou trop petits. Une factorielle croît si vite que 171!171!171! dépasse déjà ce qu'un nombre décimal ordinaire peut contenir dans un ordinateur, mais ln⁡n!\ln n!lnn! est facile : special.gammaln(n+1). special.comb(n, k) compte les chemins à kkk hausses dans un arbre à nnn pas. special.logsumexp calcule ln⁡∑exi\ln\sum e^{x_i}ln∑exi​ sans risque en sortant le plus grand xxx, de sorte que ln⁡(e1000+e1000)=1000+ln⁡2\ln(e^{1000}+e^{1000})=1000+\ln2ln(e1000+e1000)=1000+ln2 ne déborde pas. special.expit(x)=1/(1+e^{-x}) transforme n'importe quel score en probabilité entre 0 et 1, comme dans un modèle logistique. La règle : travailler en logarithmes quand un nombre peut être énorme ou minuscule, et n'exponentier qu'à la fin.

Φ(x)=12(1+erf⁡(x2)),C=SΦ(d1)−Ke−rTΦ(d2),vega=S φ(d1)T,ln⁡∑exi=m+ln⁡∑exi−m\Phi(x)=\tfrac12\Big(1+\operatorname{erf}\Big(\frac{x}{\sqrt2}\Big)\Big),\qquad C=S\Phi(d_1)-Ke^{-rT}\Phi(d_2),\qquad \text{vega}=S\,\varphi(d_1)\sqrt T,\qquad \ln\sum e^{x_i}=m+\ln\sum e^{x_i-m}Φ(x)=21​(1+erf(2​x​)),C=SΦ(d1​)−Ke−rTΦ(d2​),vega=Sφ(d1​)T​,ln∑exi​=m+ln∑exi​−m(1)
Un prix de call et un pas de volatilité implicitePrenons S=K=100S=K=100S=K=100, r=0r=0r=0, σ=0,2\sigma=0{,}2σ=0,2 et T=1T=1T=1. Alors d1=0,1d_1=0{,}1d1​=0,1 et d2=−0,1d_2=-0{,}1d2​=−0,1, et Φ(0,1)=0,5398\Phi(0{,}1)=0{,}5398Φ(0,1)=0,5398, Φ(−0,1)=0,4602\Phi(-0{,}1)=0{,}4602Φ(−0,1)=0,4602. Donc C=100⋅(0,5398−0,4602)=7,97C=100\cdot(0{,}5398-0{,}4602)=7{,}97C=100⋅(0,5398−0,4602)=7,97. La densité normale en 0,10{,}10,1 vaut 0,39700{,}39700,3970, donc le vega est 100⋅0,3970⋅1=39,70100\cdot0{,}3970\cdot1=39{,}70100⋅0,3970⋅1=39,70. Si le prix de marché est 9,009{,}009,00, le prix est trop bas de 1,031{,}031,03, et un pas de Newton relève la volatilité à 0,2+1,03/39,70=0,22610{,}2+1{,}03/39{,}70=0{,}22610,2+1,03/39,70=0,2261. Pour Φ(1)\Phi(1)Φ(1) on peut utiliser erf⁡(0,7071)=0,6827\operatorname{erf}(0{,}7071)=0{,}6827erf(0,7071)=0,6827, donc Φ(1)=12(1+0,6827)=0,8413\Phi(1)=\tfrac12(1+0{,}6827)=0{,}8413Φ(1)=21​(1+0,6827)=0,8413. Pour les petits outils, expit⁡(2)=0,8808\operatorname{expit}(2)=0{,}8808expit(2)=0,8808, ln⁡4!=3,178\ln 4!=3{,}178ln4!=3,178 et (103)=120\binom{10}{3}=120(310​)=120. Sur données réelles, le rendement quotidien de SPY a un écart type de 1,196%1{,}196\%1,196%. Une baisse de 5%5\%5% vaut z=−4,21z=-4{,}21z=−4,21 écarts types, et Φ(−4,21)=1,26⋅10−5\Phi(-4{,}21)=1{,}26\cdot10^{-5}Φ(−4,21)=1,26⋅10−5, ce qu'un modèle normal dit arriver une fois en environ 315315315 ans. Dans les 5 4035\,4035403 jours de données, cela est arrivé 202020 jours.
  • Nommer la fonction : ndtr, erf, expit, gammaln, comb et logsumexp remplacent des pages de maths écrites à la main.
  • Travailler en logarithmes pour les extrêmes : utilisez gammaln et logsumexp au lieu d'une factorielle ou d'une somme d'exponentielles énormes.
  • Le vega pilote le solveur : un pas de Newton pour la volatilité implicite est l'écart de prix divisé par le vega.

Lab : ce qui est noté

  • La fonction normale à partir de erf10 pts
  • Un call de Black–Scholes20 pts
  • Le vega10 pts
  • Un pas de volatilité implicite15 pts
  • À quoi sert chaque fonction15 pts
  • La façon sûre d'additionner10 pts
  • Pourquoi calculer les factorielles par les logarithmes20 pts
0/ 7 traités
Exercices
1Réponse numérique10 ptsSans réponse

Sachant erf⁡(0,7071)=0,6827\operatorname{erf}(0{,}7071)=0{,}6827erf(0,7071)=0,6827, calculez Φ(1)=12(1+erf⁡(1/2))\Phi(1)=\tfrac12\big(1+\operatorname{erf}(1/\sqrt2)\big)Φ(1)=21​(1+erf(1/2​)). Donnez quatre décimales.

p=p =p=accepté : ± 0.0005
2Réponse numérique20 ptsSans réponse

Avec S=K=100S=K=100S=K=100, r=0r=0r=0, σ=0,2\sigma=0{,}2σ=0,2, T=1T=1T=1 on obtient d1=0,1d_1=0{,}1d1​=0,1, d2=−0,1d_2=-0{,}1d2​=−0,1, Φ(0,1)=0,5398\Phi(0{,}1)=0{,}5398Φ(0,1)=0,5398 et Φ(−0,1)=0,4602\Phi(-0{,}1)=0{,}4602Φ(−0,1)=0,4602. Que vaut C=SΦ(d1)−KΦ(d2)C=S\Phi(d_1)-K\Phi(d_2)C=SΦ(d1​)−KΦ(d2​) ? Donnez deux décimales.

c=c =c=accepté : ± 0.03
3Réponse numérique10 ptsSans réponse

La densité normale en d1=0,1d_1=0{,}1d1​=0,1 vaut φ(0,1)=0,3970\varphi(0{,}1)=0{,}3970φ(0,1)=0,3970. Avec S=100S=100S=100 et T=1T=1T=1, que vaut le vega =S φ(d1)T=S\,\varphi(d_1)\sqrt T=Sφ(d1​)T​ ? Donnez deux décimales.

v=v =v=accepté : ± 0.1
4Réponse numérique15 ptsSans réponse

Le prix de marché est 9,009{,}009,00 et le prix du modèle à σ=0,2\sigma=0{,}2σ=0,2 est 7,96567{,}96567,9656, avec un vega de 39,7039{,}7039,70. Quelle est la nouvelle volatilité σ+(marcheˊ−modeˋle)/vega\sigma+(\text{marché}-\text{modèle})/\text{vega}σ+(marcheˊ−modeˋle)/vega ? Donnez quatre décimales.

s=s =s=accepté : ± 0.0005
5Associer15 ptsSans réponse

Associez chaque fonction de scipy.special à son rôle.

Choisissez le partenaire de chaque élément de gauche.

ndtr
expit
gammaln
logsumexp
comb
6Choix10 ptsSans réponse

Il vous faut ln⁡(e1000+e1002)\ln(e^{1000}+e^{1002})ln(e1000+e1002) sur un ordinateur. Quelle façon est sûre ?

7Expliquer avec des mots20 ptsSans réponse

Une probabilité binomiale pour un arbre à 200 pas contient 200!200!200!. En une ou deux phrases, expliquez pourquoi il faut la calculer avec gammaln et des logarithmes.

Mode mathsSaisie au clavier ou en LaTeXExercice 1 sur 7 · Ctrl ⏎ pour vérifier

Connectez-vous pour exécuter votre code.

Tous les cours sont gratuits à lire. Créez un compte ou connectez-vous pour exécuter du code, lancer les tests et soumettre ce lab.

  • IDE dans le navigateur avec terminal bash — rien à installer
  • Correction instantanée, XP et votre place dans le parcours
Créer un compteSe connecter
OU
Continuer avec GitHub