Si vous avez des fonctions à proposer dans un autre langage, n’hésitez pas à les partager (contactez-moi en utilisant le formulaire prévu à cet effet.)
R
Voici une petite fonction sous R qui vous permet d’accumuler ou d’actualiser avec n’importe quel type de taux. Je l’ai appelée Df pour Discount factor : c’est le montant par lequel vous devez multiplier $C_0$ pour accumuler ou $C_t$ pour actualiser. Simplement :
Ou :
$$C_t = C_0 \times Df$$Les arguments sont :
- Le taux (
k), qui peut éventuellement être un vecteur de plusieurs taux ; - Le temps (
t), qui peut aussi être un vecteur ; - La fréquence (
f) qui est forcément de longueur 1 et peut prendre les valeurs suivantes : sifest inférieure ou égale à zéro, la fonction utilisera des intérêts simples ; sifest un entier positif, la fonction utilise des intérêts composés périodiquement (1 = année, 2 = semestre etc…) ; enfin, sifest infini (Inf), la fonction utilise des intérêts composés en continus.
Voici le code :
Df = function(k, t = 1, f = 1) {
if(length(f) != 1) stop("f must be of length 1!")
if(f <= 0) {
res <- (1+abs(t)*k)^sign(t)
} else {
if(is.finite(f)) {
res <- (1+k/f)^(f*t)
} else {
res <- exp(k*t)
}
}
return(res)
}
Par exemple, pour calculer la valeur accumulée de 100 placés pendant 10 ans à un taux d'intérêts simple de 20% :
100 * Df(.2, 10, 0)
Même calcul avec des intérêts composés semestriellement :)>
100 * Df(.2, 10, 2)
Pour actualiser, il suffit d'utiliser un vecteur de temps négatif. Ici, par exemple, la valeur actualisée de 100 sur 5 ans avec un taux composé en continu de 4% :
100 * Df(.04, -5, Inf)
Comme dit plus haut, vous pouvez utiliser des vecteurs pour k et t. Par exemple, pour calculer la valeur acquise de 100 placés à 20% (taux composé en continu) tous les ans de $t=0$ à $t=10$ :
100 * Df(.2, 0:10, Inf)
La fonction rate calcule un taux en utilisant la même logique :
rate = function(C0, Ct = 100, t = 1, f = 1) {
if(length(f) != 1) stop("f must be of length 1!")
if(f <= 0) {
res <- 1/t*(Ct/C0-1)
} else {
if(is.finite(f)) {
res <- f*((Ct/C0)^(1/(f*t))-1)
} else {
res <- 1/t*log(Ct/C0)
}
}
return(res)
}
Par exemple, pour calculer le taux d'un zéro coupon de valeur faciale 100, valant 75, arrivant à maturité dans 5 ans avec des intérêts simples :
rate(75, 100, 5, 0)
Et vous pouvez tester plusieurs prix (ici tous les entiers de 70 à 80) :
rate(70:80, 100, 5, 0)
Aucun commentaire:
Enregistrer un commentaire