0

我有一个问题,如果你能帮助我,我将不胜感激。

起始情况:

  • 债券:“026351AZ9”“026351BC9”
  • 本期债券首期票息日:“ 2029-02-15”“2010-09-11”(发行日期)
  • 债券付息年数:3年和1年
  • 每年也有一个优惠券频率:2 和 4,这意味着在接下来的一年中将有 2 次付款(4 次付款)

第一种情况:3 年,每年 2 次优惠券支付 -> 所以接下来 3 年每 6 个月支付优惠券。与 1 年和 4 倍的优惠券付款相同。

结果:应该是这样的:

datesBond1 = "2029-02-15" "2029-08-15" "2030-02-15" "2030-08-15" "2031-02-15" "2031-08-15"

datesBond2 = "2010-09-11" "2010-12-11" "2010-03-11" "2010-06-11"

这只是一个示例。就我而言,我有更多的 ISINS、日期以及各种年份和优惠券频率。

谢谢

4

1 回答 1

0

您可以使用该months函数来构建未来的息票支付日期,并将计算包含在一个自定义函数中,该函数可以针对单个债券进行访问。

您对债券 2 的预期输出中存在拼写错误,其中最后两个值应对应于 2011 年。

fn_cpnPayDates = function(cpnStartDt = as.Date("2029-02-15"),numYears = 3, freq = 6) {

# number of coupon payments per year
numPayPerYear = 12 / freq

#total payments
numPayments = numYears * numPayPerYear

cpnDatesAll = rep(cpnStartDt, numPayments)

for(i in 1:numPayments) cpnDatesAll[i] = cpnDatesAll[i] + months((i-1)* freq)


return(cpnDatesAll)

}

datesBond1 = fn_cpnPayDates(cpnStartDt = as.Date("2029-02-15"),numYears = 3, freq = 6)
datesBond1
#[1] "2029-02-15" "2029-08-15" "2030-02-15" "2030-08-15" "2031-02-15" "2031-08-15"

datesBond2 = fn_cpnPayDates(cpnStartDt = as.Date("2010-09-11"),numYears = 1, freq = 3)
datesBond2
#[1] "2010-09-11" "2010-12-11" "2011-03-11" "2011-06-11"
于 2017-07-07T11:00:17.257 回答