Используйте функцию 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