Calculateur de duration effective
Une obligation à 100 qui monterait à 101,5 si les rendements baissaient de 0,25 point et tomberait à 98,6 s'ils montaient de 0,25 a une duration effective de 5,8. Valable aussi pour les obligations remboursables par anticipation et les titres hypothécaires. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Prix
- 100
- Prix à la baisse
- 101,5
- Prix à la hausse
- 98,6
- Variation du rendement
- 0,25
- Variation du rendement (décimal)
- 0,0025
- Duration effective
- 5,8
La duration effective mesure de combien le prix d'une obligation devrait bouger lorsque les rendements de référence se déplacent, en s'appuyant sur des prix observés ou de modèle à ces rendements décalés plutôt que sur un échéancier de coupons en forme fermée. C'est la sensibilité adaptée aux obligations rachetables, aux titres hypothécaires et à tout instrument dont les flux changent quand les taux bougent. Ce calculateur de duration effective accepte le prix actuel, le prix après un choc de rendement à la baisse, le prix après un choc à la hausse et la taille de ce choc en pour cent, puis renvoie la duration selon la formule classique de différence centrale.
Ce que mesure la duration effective et comment la formule de différence centrale fonctionne
La duration modifiée et la duration de Macaulay supposent que chaque coupon restant et le nominal remboursé sont connus d'avance, si bien qu'un petit changement de rendement ne fait que réactualiser la même bande de flux. La duration effective abandonne cette hypothèse.
Elle demande à un modèle de pricing, ou au marché, trois prix : V0 sur la courbe des rendements actuelle, V− après un choc parallèle à la baisse de taille Δy, et V+ après un choc à la hausse égal, puis applique la différence finie centrale : Deff égale (V− moins V+) divisé par deux fois V0 fois la valeur absolue de Δy.
Le résultat est la variation de prix en pourcentage approximative pour un mouvement d'un point de pourcentage du rendement, avec la convention de signe habituelle qu'une duration positive signifie que le prix baisse lorsque les rendements montent. Parce que les prix choqués intègrent déjà l'exercice d'options, les remboursements anticipés ou le fonds d'amortissement, la métrique reste définie pour des corporates rachetables, des pass-through hypothécaires et d'autres structures dépendantes de la trajectoire où la duration modifiée serait le mauvais chiffre.
La valeur absolue du choc de rendement figure au dénominateur, ainsi une entrée signée de moins vingt-cinq points de base et de plus vingt-cinq points de base produit la même duration ; seul un choc vraiment nul est indéfini, car il n'y a alors aucun intervalle sur lequel mesurer la pente.
Où un calculateur de duration effective prouve sa valeur
Trésoreries et équipes de risque utilisent la duration effective pour dimensionner les couvertures sur agences rachetables et pools hypothécaires, où la duration modifiée d'une bande de coupons statique surestimerait la hausse possible du prix lorsque les rendements tombent dans la zone de call ou de remboursement anticipé. Les sites de contenu peuvent opposer le 5.8 d'un exemple sans option à une duration bien plus faible d'une trajectoire de call serrée, afin que le lecteur voie pourquoi les options embarquées raccourcissent la duration effective.
Les intégrateurs déposent le même contrat dans des flux n8n, des edge workers ou des plugins LMS de classe. Une validation échouée ne consomme pas le solde.
Cas d’usage
Couvertures d'obligations rachetables et putables
Transformez des prix ajustés des options après un choc de rendement à la hausse et à la baisse en duration effective, afin que les couvertures reflètent le call ou le put, non une bande de coupons statique.
Pools hypothécaires sensibles au remboursement anticipé
Mesurez la sensibilité aux taux à partir de prix de modèle qui intègrent déjà le remboursement anticipé, plutôt que la duration de Macaulay sur une trajectoire de flux calendaire.
Questions fréquentes
En quoi la duration effective diffère-t-elle de la duration modifiée ?
La duration modifiée réactualise un échéancier de coupons fixe. La duration effective utilise des prix qui incluent déjà l'exercice d'options, les remboursements anticipés ou d'autres changements de flux lorsque les rendements bougent, donc c'est la sensibilité de premier ordre correcte pour les obligations à options embarquées.
Que se passe-t-il si le déplacement de rendement est zéro ?
Un choc nul annule le dénominateur de la différence centrale, donc la duration effective est indéfinie et la requête n'est pas facturée.
Comment calcule-t-on la duration effective ?
On retranche le prix après la hausse des rendements du prix après la baisse, puis on divise par deux fois le prix actuel multiplié par l'ampleur du choc en décimal. Cette différence centrale mesure la pente du prix face au rendement.
Comment saisir le déplacement de rendement ?
En points de pourcentage : 0,25 correspond à 25 points de base et 1 à un point entier. Le calculateur utilise l'ampleur du déplacement, donc plus ou moins 0,25 donnent la même duration.
D'où viennent les prix après le choc ?
D'un modèle de valorisation ou du marché. Vous fournissez les trois prix ; le calculateur ne revalorise pas l'obligation à partir de ses coupons, si bien que ces prix peuvent déjà intégrer remboursements anticipés, prépaiements ou fonds d'amortissement.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/fin/effective-duration \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"price":100,"price_down":101.5,"price_up":98.6,"yield_shift":0.25}'const res = await fetch("https://api.kit.forhosting.com/fin/effective-duration", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"price": 100,
"price_down": 101.5,
"price_up": 98.6,
"yield_shift": 0.25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/effective-duration",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"price": 100,
"price_down": 101.5,
"price_up": 98.6,
"yield_shift": 0.25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/effective-duration", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"price":100,"price_down":101.5,"price_up":98.6,"yield_shift":0.25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"price":100,"price_down":101.5,"price_up":98.6,"yield_shift":0.25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/effective-duration", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"price": 100,
"price_down": 101.5,
"price_up": 98.6,
"yield_shift": 0.25
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.effective_duration",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Un déplacement de rendement nul est rejeté avec invalid_input car le dénominateur serait zéro.
Ce que mesure la duration effective et comment la formule de différence centrale fonctionne
Cet endpoint ne revalorise pas l'obligation à partir des coupons : vous avez déjà les trois prix, et le calculateur les transforme en la sensibilité que les desks de revenu fixe, les items CFA et les widgets pédagogiques appellent duration effective.
Contrat d'entrée, forme de la réponse et comportement d'erreur
Un choc nul est l'erreur de contrat que ce produit existe pour attraper : il n'y a pas de pente bien définie lorsque les deux prix choqués reposent sur le même rendement. Envoyez en POST un corps JSON avec quatre nombres finis obligatoires : price, le dirty price ou le prix de modèle actuel V0, qui doit être strictement positif (alias current_price, v0 et p0) ; price_down, le prix après un choc de rendement à la baisse de même taille (alias price_minus, v_minus et p_down) ; price_up, le prix après un choc à la hausse (alias price_plus, v_plus et p_up) ; et yield_shift, le choc parallèle en pour cent, de sorte que 0.25 signifie vingt-cinq points de base et 1 un point de pourcentage entier (alias yield_shift_percent, delta_y, dy et yield_change). decimals est optionnel, un entier de zéro à douze (défaut six) qui contrôle l'arrondi half-up de yield_shift_decimal et effective_duration. En cas de succès le corps renvoie les trois prix et le yield_shift envoyé, ajoute yield_shift_decimal (le même choc en fraction décimale, en conservant le signe de l'entrée), effective_duration en années de sensibilité aux taux, et une chaîne formula qui reformule l'identité de différence centrale. Exemple travaillé : price 100, price_down 101.5, price_up 98.6, yield_shift 0.25 produit Δy de 0.0025 et une duration effective de 5.8, parce que 2.9 divisé par 0.5 vaut 5.8. Champs manquants, valeurs non finies, un price, price_down ou price_up non positif, ou un yield_shift exactement zéro échouent avec invalid_input en nommant le champ et ne sont pas facturés.
Où un calculateur de duration effective prouve sa valeur
Les gérants qui font déjà tourner un moteur de spread ajusté des options ont V− et V+ sur la grille ; brancher ces trois marques sur un petit endpoint parse évite de réimplémenter l'identité dans chaque carnet et fige les goldens lorsque la bibliothèque de pricing change. Gardez les trois prix strictement positifs, n'envoyez jamais un yield_shift nul, figez l'effective_duration arrondi dans les tests, et vous obtenez un chiffre de sensibilité aux taux reproductible sans monter votre propre bibliothèque de revenu fixe.
Cas d'intégration
Préparation CFA et contrôles en classe
Offrez aux apprenants un oracle déterministe de l'identité (V− − V+) / (2 V0 Δy), y compris un invalid_input non facturé lorsque le choc de rendement est nul.
Questions techniques
Comment calcule-t-on la duration effective à partir de prix à rendements décalés ?
Envoyez le prix actuel V0, le prix après un choc de rendement à la baisse V−, le prix après un choc à la hausse V+ et yield_shift en pour cent. L'API renvoie Deff = (V− − V+) / (2 × V0 × |Δy|), Δy étant égal à yield_shift divisé par cent.
Dans quelle unité est yield_shift ?
En pour cent. 0.25 signifie un choc parallèle de 0.25 pour cent (25 points de base) ; 1 signifie un point de pourcentage. La réponse renvoie aussi yield_shift_decimal, le même choc en fraction décimale.
Combien coûte le calculateur de duration effective ?
L'outil du navigateur est gratuit. Les requêtes API utilisent le solde KIT prépayé à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.