Je suis nouveau sur le forum et j'aurais besoin d'aide. Je vous explique le problème: je dois calculer le taux de rendement actuariel (TRA) d'une obligation sachant tous ses paramètres: date de valorisation, maturité, taux de coupon, nominal. Je connais la valeur de marché de l'obligation donc je peux en déduire son taux de rendement actuariel. J'arrive à le faire en faisant une boucle sur le TRA puis faire graphiquement mais je dois traiter des centaines de millier d'obligation, donc le mieux serait de faire appelle à une fonction d'optimisation qui permet de déterminer le TRA.
Je vous met le code simplifié de valorisation d'une obligation.
Code : Tout sélectionner
# Fonction donnant le prix d'une obligation
Bond=function(Date_Valorisation,Maturite,Nominal,Coupon,TRA){
actu=1:(Maturite-Date_Valorisation)
Flux=c(rep(Nominal*Coupon/(1+TRA)^actu,Maturite-Date_Valorisation))
Remboursement=Nominal/(1+TRA)^actu[length(actu)]
Prix=sum(Flux,Remboursement)
return(Prix)
}
Optimisation=function(Date_Valorisation,Maturite,Nominal,Coupon,TRA,VM){
actu=1:(Maturite-Date_Valorisation)
Flux=c(rep(Nominal*Coupon/(1+TRA)^actu,Maturite-Date_Valorisation))
Remboursement=Nominal/(1+TRA)^actu[length(actu)]
Ecart=sum(Flux,Remboursement)-VM
return(Ecart)
}
# Je cherche le TRA sachant tous les autres parametres du probleme tel que le prix de
# marche egalise la formule du prix de l'obligation
Date_Valorisation=0 # on se place a aujourd'hui
Maturite=5 # maturite de l'obligation
Nominal=100 # prix d'achat de l'obligation
# Le remboursement est considere au pair, donc 100% du prix d'achat
Coupon=0.04 # taux de coupon
P=Bond(Date_Valorisation = 0,Maturite = 5,Nominal = 100,Coupon = 0.04,TRA = 0.0565) # si TRA = 5.65%
# Prix formule ferme = 161.0273 en imaginant que l'on connait le TRA
# TRA inconnu
VM=161.0273 # fourni par le marche par exemple
# L'algorithme d'optimisation devrait me donner un TRA de 5.65%
# On donne une recherche de TRA entre 0 et 50 %
TRA=0.025 # Point de depart (initialisation)
solution1=optim(TRA,f = Optimisation,Date_Valorisation=0,Maturite=5,Nominal=100,Coupon=0.04,VM=161.0273 ) # probleme
solution2=optim(TRA, f=Optimisation, Date_Valorisation=0,Maturite=5,Nominal=100,Coupon=0.04,VM=161.0273 , lower = 0, upper = 0.5, method = "Brent")
# probleme, il va directement sur une borne sup, on devrait retomber sur TRA= 5.65%
solution3=optim(TRA, f=Optimisation, Date_Valorisation=0,Maturite=5,Nominal=100,Coupon=0.04,VM=161.0273 , lower = 0, upper = 0.5, method = "L-BFGS-B")
# même probleme
# Je pose peut etre mal le probleme
Merci de vos retours