Använd uniroot-funktionen för att hitta YTM
Trial-and-error är en mycket omständlig process. Ett alternativ är att använda en algoritm som gör jobbet åt dig. I det här fallet är lösningen detsamma som att hitta roten till en funktion.
I den här övningen använder du funktionen uniroot() för att hitta roten.
Funktionen uniroot() kräver att du skapar en vektor med kassaflöden, cf, som börjar med obligationens pris (som ett negativt tal) som första element och de kassaflöden du förväntar dig att få från obligationen (dvs. kupong- och principalbetalningar) som återstående element.
Kom ihåg att obligationens pris är $95,79 och att obligationen har ett nominellt värde på $100, en kupongränta på 5 % och 5 år till förfall.
Den här övningen är en del av kursen
Obligationsvärdering och analys i R
Övningsinstruktioner
- Skapa en vektor med kassaflöden,
cf, som innehåller det initiala obligationspriset (negativt) och betalningar fram till förfall (positiva). - Använd den färdigskrivna koden för att skapa en enkel obligationsvärderingsfunktion,
bval(), som beräknar obligationens värde för varje tidsperiod. - Använd den färdigskrivna koden för att skapa funktionen
ytm()med hjälp avuniroot(). - Använd
ytm()med dincf-vektor för att hitta obligationens yield to maturity.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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