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 DfLes 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 : sif
est inférieure ou égale à zéro, la fonction utilisera des intérêts simples ; sif
est un entier positif, la fonction utilise des intérêts composés périodiquement (1 = année, 2 = semestre etc…) ; enfin, sif
est 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