Użyj funkcji uniroot, aby znaleźć YTM
Metoda prób i błędów jest bardzo żmudna. Lepszym rozwiązaniem jest zastosowanie algorytmu, który wykona tę pracę za ciebie. W tym przypadku szukane rozwiązanie sprowadza się do znalezienia miejsca zerowego funkcji.
W tym ćwiczeniu użyjesz funkcji uniroot(), aby wyznaczyć to miejsce zerowe.
Funkcja uniroot() wymaga przygotowania wektora przepływów pieniężnych cf, w którym pierwszy element to cena obligacji (jako liczba ujemna), a pozostałe elementy to oczekiwane płatności z tytułu obligacji (czyli kupony i spłata wartości nominalnej).
Przypominamy, że cena obligacji wynosi 95,79 USD, wartość nominalna to 100 USD, oprocentowanie kuponu wynosi 5%, a do wykupu pozostało 5 lat.
To ćwiczenie jest częścią kursu
Wycena i analiza obligacji w R
Instrukcje do ćwiczenia
- Utwórz wektor przepływów pieniężnych
cf, który zawiera początkową cenę obligacji (jako wartość ujemną) oraz płatności do terminu wykupu (jako wartości dodatnie). - Skorzystaj z gotowego kodu, aby utworzyć prostą funkcję wyceny obligacji
bval(), obliczającą wartość obligacji w każdym okresie. - Skorzystaj z gotowego kodu, aby zdefiniować funkcję
ytm()przy użyciuuniroot(). - Użyj funkcji
ytm()z wektoremcf, aby wyznaczyć rentowność obligacji do wykupu.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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