Gebruik de functie uniroot om de YTM te vinden
Trial-and-error is een erg omslachtige methode. Een alternatief is een algoritme dat het werk voor je doet. In dit geval is de oplossing hetzelfde als het vinden van de nul van een functie.
In deze oefening gebruik je de functie unrioot() om de nul te vinden.
De functie uniroot() vraagt ons een vector met kasstromen, cf, op te zetten die begint met de prijs van de obligatie (als negatief getal) als eerste element, gevolgd door de kasstromen die je van de obligatie verwacht te ontvangen (dus coupon- en aflossingsbetalingen) als de overige elementen.
Onthoud dat de prijs van de obligatie $95.79 is en dat de obligatie een nominale waarde van $100 heeft, een couponrente van 5% en een looptijd van 5 jaar.
Deze oefening maakt deel uit van de cursus
Obligatiewaardering en -analyse in R
Oefeninstructies
- Maak een vector met kasstromen,
cf, die de initiële obligatieprijs (negatief) en betalingen tot aan de einddatum (positief) bevat. - Gebruik de voorgecodeerde regels om een eenvoudige obligatiewaarderingsfunctie,
bval(), te maken die de waarde van de obligatie per periode berekent. - Gebruik de voorgecodeerde regels om de functie
ytm()te maken metuniroot(). - Gebruik
ytm()met jecf-vector om de yield to maturity van de obligatie te vinden.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# Create cash flow vector
cf <- c(___, ___, ___, ___, ___, ___)
# Create bond valuation function
bval <- function(i, cf,
t=seq(along = cf))
sum(cf / (1 + i)^t)
# Create ytm() function using uniroot
ytm <- function(cf) {
uniroot(bval, c(0, 1), cf = cf)$root
}
# Use ytm() function to find yield