构建未来债券的息票支付日期

时间:2017-07-07 09:42:36

标签: r date frequency rep

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

开始情况:

  • 债券:“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,日期和各种年份和优惠券频率。

谢谢

1 个答案:

答案 0 :(得分: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"