2017-07-07 51 views
0

我有一個問題,如果你能幫助我,我將非常感激。爲債券構建未來的息票支付日期

啓動狀態:

  • 債券:「026351AZ9」 「026351BC9」 這些債券的
  • 第一付息日: 「2029年2月15日」 「2010-09-11」(類日期)
  • 計數的年其中債券支付券:3年1年
  • 每年也有優惠券頻率:2和4,這意味着在明年將有2枚金(4個金)

第一種情況:3年,每年2次利息支付 - >所以每6個月利息支付的未來3年。與1年和4次coupn付款一樣。

結果: 它應該是這個樣子:

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,日期,以及各種年份和優惠券頻率。

謝謝

回答

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" 
+0

耶最後兩個應該是2011年。非常感謝你。這個解決方案很好。我更容易使用一個函數。並把所有在一個向量我可以做的:c(datesBond1,datesBond2) –