σμ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ᵀμ = μ*∫Σ∂∞λ
σμ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 AcademyParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Parcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours Python›Module 4 · Valorisation des produits de taux et d'options›Sujet 4.1·~40 minIntermédiaire

Valeur actuelle et actualisation

Position dans le parcoursModule 4 sur 11 · Sujet 1 sur 16
4.1 Valeur actuelle et actualisation
—Score du lab— / 100XP total—Série—

Un euro demain n'est pas un euro aujourd'hui

Si vous pouvez gagner 5 % par an, 100 aujourd'hui deviennent 105 dans un an. Donc 105 promis dans un an ne valent que 100 aujourd'hui. C'est l'actualisation : convertir un montant futur en valeur actuelle en retirant l'intérêt qu'il aurait pu rapporter. Pour un taux annuel r et t années, VA = cash / (1 + r) ** t. Toute obligation, tout prêt, toute rente et toute retraite sont évalués ainsi, ce qui en fait la base des produits de taux et de la valorisation d'options des sujets suivants.

PV = cash / (1 + r)^t FV = PV * (1 + r)^t
def present_value(cash, rate, years):
    return cash / (1 + rate) ** years

print(round(present_value(100, 0.05, 3), 4))        # 86.3838   100 received in 3 years, worth 86.38 today
print(round(present_value(100, 0.05, 0), 4))        # 100.0     no waiting, no discount
print(round(present_value(100, 0.10, 3), 4))        # 75.1315   a higher rate discounts harder

Valeur actuelle nette

Les vrais investissements paient en flux : une obligation verse des coupons et un principal final, un projet coûte de l'argent maintenant et le restitue sur plusieurs années. La valeur actuelle nette (VAN) actualise chaque flux selon son propre moment et les additionne. Listez les flux avec le premier à l'instant 0, donc les instants sont 0, 1, 2, ... (np.arange(len(flows))), et actualisez tout le tableau en un appel. Une VAN positive signifie que l'investissement rapporte plus que le taux d'actualisation ; négative, qu'il rapporte moins. Quand le taux monte, la VAN baisse.

import numpy as np

flows = np.array([-100.0, 30.0, 40.0, 50.0])      # pay 100 now, receive 30, 40 and 50 over the next three years
times = np.arange(len(flows))                      # 0, 1, 2, 3

for rate in (0.08, 0.12, 0.20):
    print(rate, round((flows / (1 + rate) ** times).sum(), 3))
# 0.08 1.763      positive: worth doing at 8%
# 0.12 -5.738     negative: not at 12%
# 0.2 -18.287     the higher the rate, the lower the NPV

Capitaliser, et taux continus

Aller vers l'avant est l'image miroir : VF = PV * (1 + r) ** t. Si l'intérêt est versé m fois par an au taux annoncé r, chaque période rapporte r / m et il y a m * t périodes : VF = PV * (1 + r / m) ** (m * t). Un versement plus fréquent fait croître un peu plus : 100 à 5 % deviennent 105,00 par an, 105,12 par mois, 105,13 par jour. À la limite du versement continu, le facteur de croissance est exp(r * t) et le facteur d'actualisation exp(-r * t), la forme utilisée pour valoriser les options car elle se multiplie bien dans le temps.

import math

for m in (1, 2, 12, 365):
    print(m, round(100 * (1 + 0.05 / m) ** (m * 1), 4))
# 1 105.0
# 2 105.0625
# 12 105.1162
# 365 105.1267

print(round(100 * math.exp(0.05), 4))            # 105.1271   continuous compounding, the limit
print(round(math.exp(-0.05 * 3), 5))              # 0.86071    the continuous discount factor for 3 years
print(round(100 * (1 + 0.05 / 12) ** (12 * 3), 3))   # 116.147   100 grows for 3 years with monthly interest
# How long to double the money at 5%? Exactly ln 2 / ln 1.05, roughly 72 / 5
print(round(math.log(2) / math.log(1.05), 2), round(72 / 5, 1))     # 14.21 14.4
Précisez toujours de quel taux on parle5 % annuel, 5 % capitalisé mensuellement et 5 % continu sont trois taux différents : ils font passer 100 à 105,00, 105,12 et 105,13 en un an. Les mélanger sans le dire est une source classique d'erreurs de valorisation. Indiquez la convention de capitalisation, gardez le temps en années et convertissez avec ln(1 + r) ou exp(r) - 1 quand vous passez d'une convention à l'autre.
  • VA = cash / (1 + r) ** t : l'argent plus tardif vaut moins ; un taux plus élevé actualise plus fort.
  • VAN = somme des flux actualisés, le premier à l'instant 0 : (flows / (1 + r) ** np.arange(n)).sum() ; positive = rentable.
  • VF = PV * (1 + r / m) ** (m * t) ; continu : croissance exp(r * t), actualisation exp(-r * t) ; indiquez toujours la convention.

À suivre : les prix d'obligations, actualiser un flux de coupons et un principal final à un taux de marché.

Lab : ce qui est noté

  • Ramener un paiement futur à aujourd'hui avec present_value25 pts
  • Valoriser un flux de paiements avec npv25 pts
  • Capitaliser les intérêts avec future_value25 pts
  • Actualiser en continu avec continuous_discount_factor25 pts
Explorateur · lab-66-1
▾ lab-66-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-66-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-66-1 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