Duration(Settlement: DateTime; Maturity: DateTime; CouponRate: Double; YieldP: Double; Frequency: Integer; [Basis: Integer = 0]): Double;
Duration(Settlement: System.DateTime; Maturity: System.DateTime; CouponRate: double; YieldP: double; Frequency: integer; Basis: integer): double;
Settlement. The payment day on securities. Must be less than Maturity
Maturity. The security's maturity date. Must be greater than Settlement
CouponRate. The security's price per $100 face value. Must be positive
YieldP. The security's redemption price per $100 face value. Must be positive
Frequency. The annual number of coupon payments. The parameter can take the following values:
1. Annual payments.
2. Semi-annual payments.
4. Quarterly payments.
Basis. The day calculation method used. Select a value from 0 to 4:
0. The day calculation method - American/360 days (NSAD method).
1. The day calculation method - Actual/actual.
2. The day calculation method - Actual/360 days.
3. The day calculation method - Actual/365 days.
4. The day calculation method - European 30/360 days.
The Duration method returns Macaulay duration for supposed face value of $100.
The duration is determined as a weighted mean of present value of cash flows and is used as a measure of reaction of bond prices to change in yield.
The agreement date is the date of selling a coupon, for example, a bond, to the buyer. The payment date is the coupon expiry date. For example, a bond with duration of 30 years was issued on Jan 1 2008 and was acquired by a buyer in 6 months after the issue date. The issue date is Jan 1 2008, the settlement date - July 1 2008, and the maturity date is Jan 1 2038, that is 30 years after the issue date.
Add a link to the MathFin system assembly.
Sub UserProc;
Var
r: Double;
Begin
r := Finance.Duration(DateTime.ComposeDay(2008, 01, 01), DateTime.ComposeDay(2008, 06, 01), 0.28, 0.82, 4, 3);
Debug.WriteLine(r);
End Sub UserProc;
Imports Prognoz.Platform.Interop.MathFin;
…
Public Shared Sub Main(Params: StartParams);
Var
r: double;
Finance: FinanceClass = New FinanceClass();
DateTime1, DateTime2: System.DateTime;
Begin
DateTime1 := New DateTime(2008,01,01);
DateTime2 := New DateTime(2008,06,01);
r := Finance.Duration(DateTime1, DateTime2, 0.28, 0.82, 4, 3);
System.Diagnostics.Debug.WriteLine(r);
End Sub;
After executing the example the console window displays the Macaulay duration equal to 0.3968006367813.
See also: