开始使用免费开始使用

使用 uniroot 函数求解 YTM

反复试算非常繁琐。一个更好的办法是使用算法替您完成计算。在这里,问题的解等价于求某个函数的根。

在本练习中,您将使用 unri oot() 函数来寻找根。

uniroot() 函数要求我们先构造一个现金流向量 cf:第一个元素是债券价格(负数),其余元素是您期望从债券获得的现金流(即票息和到期偿还的本金)。

回顾:该债券价格为 $95.79,面值 $100,票面利率 5%,到期时间 5 年。

本练习是课程的一部分

用 R 进行债券估值与分析

查看课程

练习说明

  • 创建现金流向量 cf,其中包含初始债券价格(负号)以及到期前的各期付款(正数)。
  • 使用预写代码创建简单的债券定价函数 bval(),用于计算各期债券价值。
  • 使用预写代码,结合 uniroot() 创建 ytm() 函数。
  • 使用 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


编辑并运行代码