σμ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.4·~55 minIntermédiaire

Une résolution tridiagonale creuse pour un prix d'option

Position dans le parcoursModule 3 sur 3 · Sujet 4 sur 10
3.4 Une résolution tridiagonale creuse pour un prix d'option
—Score du lab— / 100XP total—Série—

Ne stocker que ce qui existe

Valoriser une option sur une grille remplace une équation différentielle par une suite de systèmes linéaires. Chaque nœud n'est relié qu'à ses deux voisins, donc la matrice du système est tridiagonale : trois diagonales de nombres et des zéros partout ailleurs. Un tableau dense n×n stocke n² nombres, presque tous nuls ; un format creux ne stocke que les 3n-2 qui comptent. scipy.sparse.diags([lower, diag, upper], [-1, 0, 1], format='csc') construit une telle matrice à partir de ses diagonales (la sous-diagonale a n-1 éléments, la sur-diagonale aussi, d'où une diagonale inférieure coupée pour commencer à la deuxième ligne et une supérieure pour finir avant la dernière colonne). Le format CSC est celui que veulent les solveurs creux.

Le schéma implicite remonte la valeur de l'option dans le temps en résolvant A V^new=V^old+bord à chaque pas. La matrice A ne change pas d'un pas à l'autre, donc on la factorise une fois avec scipy.sparse.linalg.splu(A) et chaque pas n'est que lu.solve(rhs), opération très bon marché pour une matrice tridiagonale. La condition au bord en S=0 (un put y vaut Ke^(-rτ)) entre dans la première équation, d'où la correction du premier second membre par lower[0] * K * exp(-r * m * dt). Avec un taux à 1 an de 4,47% et σ=25%, le put à la monnaie vaut 7,6987 en forme fermée ; le schéma donne 7,6958 sur une grille 200×200 et 7,6965 sur 400×400, à environ 0,003. Une grille de 2000 nœuds stocke 5 995 nombres sous forme creuse au lieu de près de 4 millions.

  • Stockez les diagonales, pas les zéros : sparse.diags garde 3n - 2 nombres au lieu de n au carré.
  • Factoriser une fois, résoudre plusieurs fois : splu paie le coût au départ, puis chaque pas de temps n'est qu'un solve bon marché.
  • Les bords vivent dans le second membre : la valeur connue au bord de la grille passe de l'autre côté de l'équation.

Lab : ce qui est noté

  • Les trois diagonales20 pts
  • La matrice creuse15 pts
  • Valoriser avec une factorisation30 pts
  • Creux contre dense10 pts
  • L'erreur de valorisation5 pts
  • L'étude sur un taux réel20 pts
Explorateur · lab-sp-20
▾ lab-sp-20
▾ data
…
bash · dans le navigateur
learner@quantcraft:~/lab-sp-20$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-sp-20 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