Використайте функцію uniroot, щоб знайти YTM
Метод проб і помилок дуже громіздкий. Натомість можна застосувати алгоритм, який зробить це за вас. У цьому випадку розв'язання задачі зводиться до знаходження кореня функції.
У цій вправі ви використаєте функцію uniroot(), щоб знайти корінь.
Функція uniroot() вимагає підготувати вектор грошових потоків cf, де першим елементом є ціна облігації (від'ємне число), а решта — грошові потоки, які ви очікуєте отримати від облігації (тобто купонні та погашення номіналу).
Нагадаємо: ціна облігації становить $95.79, її номінал — $100, купонна ставка — 5%, а строк до погашення — 5 років.
Ця вправа є частиною курсу
Оцінювання та аналіз облігацій в R
Інструкції до вправи
- Створіть вектор грошових потоків
cf, який містить початкову ціну облігації (від'ємну) та виплати до погашення (додатні). - Використайте наперед підготовлений код, щоб створити просту функцію оцінювання облігації
bval(), яка обчислює вартість облігації в кожному періоді. - Використайте наперед підготовлений код, щоб створити функцію
ytm()за допомогоюuniroot(). - Використайте
ytm()з вашим векторомcf, щоб знайти дохідність до погашення цієї облігації.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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