2017-07-07 2 views
0

J'ai un problème et je serais très reconnaissant si vous pouviez m'aider.construire les futures dates de paiement de coupon pour les obligations

Situation de départ:

  • Obligations: "026351AZ9" "026351BC9"
  • Premier Coupon Date de ces obligations: "15/02/2029" "2010-09-11" (date de classe)
  • Count des années où les obligations coupons: paient trois années et 1 ans
  • chaque année a aussi une fréquence de coupon: 2 et 4, cela signifie que l'année prochaine, il y aura 2 paiements (4 paiements)

Premier cas: 3 ans et chaque année 2 fois le paiement de coupon -> donc tous les 6 mois le paiement du coupon pour la 3 prochaines années. Pareil avec 1 an et 4 fois le paiement du coupon.

Résultat: Il devrait être ressembler à ceci:

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"

Ceci est juste un échantillon. Dans mon cas, j'ai beaucoup plus d'ISINS, dates, et diverses années et fréquences de coupons.

Merci

Répondre

0

Vous pouvez utiliser la fonction months pour contruct paiements futurs coupons dates et envelopper le calcul dans une fonction personnalisé qui pourrait être accessible pour les obligations individuelles.

Il y a faute de frappe dans la sortie prévue pour coller 2 où deux valeurs doivent correspondre à l'année 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

ouais les deux derniers devraient être 2011. Je vous remercie beaucoup. Cette solution est sympa. Je suis tellement plus facile de travailler avec une fonction. Et pour mettre tout en un seul vecteur je peux faire: c (datesBond1, datesBond2) –