σμ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 3 · Matrices, signaux et structure›Sujet 3.5·~1 h 30 minAvancé

Projet final : calibrer une courbe de taux de Nelson–Siegel et un smile de volatilité

Position dans le parcoursModule 3 sur 3 · Sujet 5 sur 5
3.5 Projet final : calibrer une courbe de taux de Nelson–Siegel et un smile de volatilité
—Score du lab— / 100XP total—Série—

Quatre nombres pour toute une courbe

Le marché cote les rendements du Trésor américain à dix échéances, de 3 mois à 30 ans, mais une banque a besoin d'un taux pour chaque date. Dans ce projet final, vous décrivez toute la courbe avec les quatre nombres du modèle de Nelson–Siegel : un niveau de long terme β₀, une pente β₁, une bosse β₂ et une longueur de décroissance λ en années. Vous les calibrez sur les cotations avec scipy.optimize.least_squares, en partant de plusieurs valeurs de λ car la courbe n'est pas linéaire en λ, et vous gardez l'ajustement de coût le plus bas. À partir de la courbe ajustée, vous lisez un taux à terme, et vous intégrez la courbe de taux à terme instantané avec integrate.quad pour obtenir un facteur d'actualisation D(T)=e^(-A/100), où A est l'aire sous la courbe à terme en pourcentage.

La même courbe valorise une obligation. Chaque flux est actualisé avec le rendement de sa propre échéance, P=Σcᵢ e^(-y(tᵢ)tᵢ/100), et le rendement à l'échéance est le taux unique qui redonne le prix, trouvé avec optimize.brentq. Les options fonctionnent de la même façon : la volatilité implicite est la racine de bs_call(σ)-prix, encore trouvée avec brentq. Les cotations d'options réelles ne font pas partie des données partagées, donc vous testez le smile sur des prix que vous générez avec la fonction fournie bs_call, et vous ajustez le smile σ(m)=a+b m+c m² en log-moneyness m=ln(K/S) par moindres carrés. Chaque fonction est notée sur des entrées aléatoires face à une référence indépendante, et le dernier test exécute toute votre étude sur le vrai fichier du Trésor.

y(τ)=β₀+β₁g+β₂ (g-e^(-x)), x=τ/λ, g=(1-e^(-x))/x, D(T)=e^(-A/100)
Ce que dit la vraie courbeLe 9 octobre 2026, les dix rendements cotés sont reproduits par une courbe avec β₀=5,75%, β₁=-1,52, β₂≈0 et λ=2,7 ans, avec une erreur moyenne de 7,3 points de base. Le taux à terme entre 5 et 10 ans est de 5,64%, le facteur d'actualisation à 10 ans de 0,586 et une obligation à 5 % annuel sur 10 ans coûte 96,70, soit un rendement de 5,29%. Le 31 mars 2020, en pleine panique de marché, le niveau était de 1,87%, l'erreur d'ajustement de seulement 1,7 point de base, le taux à terme 5-10 ans de 1,02%, le facteur d'actualisation à 10 ans de 0,931 et la même obligation rendait 0,67%.
  • Calibrer depuis plusieurs départs : la longueur de décroissance rend l'ajustement non linéaire, donc un seul départ peut s'arrêter sur une mauvaise courbe.
  • Vérifier par un second chemin : le facteur d'actualisation de la courbe à terme intégrée doit égaler celui obtenu à partir du rendement.
  • Les racines valorisent le marché : un rendement à l'échéance et une volatilité implicite sont deux racines trouvées avec brentq sur une erreur de prix.

Lab : ce qui est noté

  • La courbe cotée d'un jour5 pts
  • Le rendement de Nelson–Siegel10 pts
  • Calibrer la courbe15 pts
  • Un taux à terme10 pts
  • Un facteur d'actualisation à partir des taux à terme10 pts
  • Un prix d'obligation depuis la courbe10 pts
  • Un rendement à l'échéance10 pts
  • Une volatilité implicite10 pts
  • Un smile quadratique10 pts
  • La calibration complète10 pts
Explorateur · lab-sp-11
▾ lab-sp-11
▾ data
…
bash · dans le navigateur
learner@quantcraft:~/lab-sp-11$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-sp-11 revient aux fichiers de départ et le terminal est vidé. Votre solution actuelle sera perdue : cette action est irréversible.

Sera réinitialisé
  • main.py → code de départ
  • Historique du terminal et sortie des tests
  • Modifications non soumises
Sera conservé
  • Meilleur score du lab
  • Votre XP et votre série
  • Progression du cours et notes

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