使用 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