Kom igångKom igång gratis

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

Visa kurs

Ö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 av uniroot().
  • Använd ytm() med din cf-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


Redigera och kör kod