2016-05-06 7 views
0

Ich versuche, alle Cash-Flow-Daten für eine Anleihe zu berechnen, ist das Häufigkeitsdatum der Anleihe monatlich. Für andere Frequenzen verwende ich normalerweise COUPNCD. Ich habe versucht, = EDATE (Fälligkeitsdatum; -1) zu verwenden, aber die Daten sind nicht richtig, da es nicht die Art und Weise berücksichtigt, wie Coupons bezahlt werden, immer am selben Tag, außer wenn es nicht existiert.Coupon Datum für eine monatliche Anleihe - Excel

Beispiel:

Abrechnungsdatum: 31-12-2014; Fälligkeitsdatum: 30.05.2016; Basis: 2 (actual/360) und Frequenz: 4

Die Berechnung der Coupondaten mit = COUPNCD bekomme ich folgende Termine für die Cash Flows:

28-02-2015 30-05-2015 30-08 -2015 30-11-2015 29-02-2016 30-05-2016

Wenn ich berechnen mit = EDATE (Datum; -3) i erhalten:

28-02-2015 30-05 -2015 30-08-2015 29-11-2015 29-02-2016 30-05-2016

Haben Sie eine Idee, die mir helfen könnte?

Thanks :)

+0

Können Sie ein Beispiel geben? Wenn die Häufigkeit in Monaten und nicht in Tagen angegeben wird, sehe ich nicht, wie Actual/360 dafür relevant sein kann. – Leviathan

+0

@Leviathan Ich habe schon besser bearbeitet und erklärt. Es war falsch, das Problem ist nicht die Basis. –

Antwort

1

Ich hatte das gleiche Problem in Bezug auf Funktionen COUPNCD und COUPNUM – kann 12 (für monatliche Zahlungen) nicht als Frequenzattribut verwenden.

Es gibt einen Weg, um – Sie die folgende benutzerdefinierte Funktion schreiben können. Ich benutze es jetzt in meinen Finanzmodellen und es funktioniert perfekt.

Option Explicit 
Public Function DC_CoupNum(Settlement As Date, Maturity As Date, NumberOfPayments As Integer) As Integer 
    Dim NewDate As Date 
    Dim i As Integer 
    Dim r As Integer 
    Select Case NumberOfPayments 

     Case 1 
      r = 12 
     Case 2 
      r = 6 
     Case 4 
      r = 3 
     Case 12 
      r = 1 
    End Select 

    NewDate = Maturity 
    i = 0 
    Do While NewDate > Settlement 
     i = i + 1 
     NewDate = Application.WorksheetFunction.EDate(NewDate, -1 * r) 
'  Debug.Print NewDate 
    Loop 
    DC_CoupNum = i 

End Function 
Public Function DC_CoupNcd(Settlement As Date, Maturity As Date, Frequency As Integer, Optional NextC As Boolean = True) As Date 
    'next coupon date after the settlement date 

    'NextC = True ... next coupon date 
    'NextC = False ... previous coupon date 
    Dim m, o 

    Select Case Frequency 

     Case 1 
      m = 12 
     Case 2 
      m = 6 
     Case 4 
      m = 3 
     Case 12 
      m = 1 
    End Select 

    o = DC_CoupNum(Settlement, Maturity, Frequency) - 1 

    If NextC = False Then o = o + 1 


    If Maturity = WorksheetFunction.EoMonth(Maturity, 0) Then 'pokud je Maturity konec mesice 
     DC_CoupNcd = Application.WorksheetFunction.EoMonth(Maturity, -o * m) 
    Else 
     DC_CoupNcd = Application.WorksheetFunction.EDate(Maturity, -o * m) 
    End If 

End Function 
0

ich Ihre EDATE() Ergebnisse nicht reproduzieren können. Unter Verwendung der folgenden Formel I genau die gleichen Werte erhalten, wie Sie für die COUPNCD() Funktion hat:

=EDATE(maturity;0) ==> 30-05-2016 
=EDATE(maturity;-3) ==> 29-02-2016 
=EDATE(maturity;-6) ==> 30-11-2015 
=EDATE(maturity;-9) ==> 30-08-2015 
=EDATE(maturity;-12) ==> 30-05-2015 
=EDATE(maturity;-15) ==> 28-02-2015 

(mit maturity 30-05-2016 ist)

Bitte überprüfen Sie, ob Sie die richtigen Parameter verwenden für die EDATE() Funktion, wie oben angegeben.

+0

ich es auf eine andere Weise hergestellt: = EDATE (Reife; -3) ==> A10 = EDATE (A10; -3) ==> A9 = EDATE (A9; -3) ==> A8 = EDATE (A8; -3) ==> A7 Aber dein Weg löst mein Problem :) Danke für die Hilfe. –