Main Content

bndkrdur

Bond key rate duration given zero curve

Description

example

KeyRateDuration= bndkrdur(ZeroData,CouponRate,Settle,Maturity)computes the key rate durations for one or more bonds given a zero curve and a set of key rates.

example

KeyRateDuration= bndkrdur(___,Name,Value)adds optional name-value pair arguments.

Examples

collapse all

This example shows how to compute the key rate duration of a bond for key rate times of 2, 5, 10, and 30 years.

ZeroRates = [0.0476 .0466 .0465 .0468 .0473 .0478....0493 .0539 .0572 .0553 .0530]'; ZeroDates = daysadd('31-Dec-1998',[30 360 360*2 360*3 360*5...360*7 360*10 360*15 360*20 360*25 360*30],1); ZeroData = [ZeroDates ZeroRates]; krdur = bndkrdur(ZeroData,.0525,'12/31/1998',...'11/15/2028','KeyRates',[2 5 10 30])
krdur =1×40.2986 0.8791 4.1353 9.5814

This example shows how to usedatetimeinputs forSettleandMaturityand also use a table forZeroData计算关键利率期限债券的关键rate times of 2, 5, 10, and 30 years.

ZeroRates = [0.0476 .0466 .0465 .0468 .0473 .0478....0493 .0539 .0572 .0553 .0530]'; ZeroDates = daysadd('31-Dec-1998',[30 360 360*2 360*3 360*5...360*7 360*10 360*15 360*20 360*25 360*30],1); ZeroData = table(datetime(ZeroDates,'ConvertFrom','datenum','Locale','en_US'), ZeroRates); krdur = bndkrdur(ZeroData,.0525,datetime('12/31/1998','Locale','en_US'),...datetime('11/15/2028','Locale','en_US'),'KeyRates',[2 5 10 30])
krdur =1×40.2986 0.8791 4.1353 9.5814

Input Arguments

collapse all

Zero Curve, specified as anumRates-by-2matrix or anumRates-by-2table.

IfZeroDatais represented as anumRates-by-2matrix, the first column is a MATLAB®串行日期号码和第二列是交流companying zero rates.

IfZeroDatais a table, the first column can be serial date numbers, date character vectors, or datetime arrays. The second column must be numeric data corresponding to the zero rates.

Data Types:double|table

Annual percentage rate used to determine the coupons payable on a bond, specified as decimal value using a scalar or aNUMBONDS-by-1vector.

Data Types:double

Settlement date for all bonds and zero curve, specified as a scalar using a serial date number, date character vector, or datetime array.Settlemust be the same settlement date for all the bonds and the zero curve.

Data Types:double|char|datetime

Maturity date for bonds, specified as a scalar or aNUMBONDS-by-1vector using serial date numbers, date character vectors, or datetime arrays.

Data Types:double|char|datetime

Name-Value Arguments

Specify optional pairs of arguments asName1=Value1,...,NameN=ValueN, whereNameis the argument name andValueis the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and encloseNamein quotes.

Example:KeyRateDuration = bndkrdur(ZeroData,.0525,'12/31/1998','11/15/2028','KeyRates',[2 5 10 30])

Interpolation method used to obtain points from the zero curve, specified as the comma-separated pair consisting of'InterpMethod'and a character vector using one of the following values:

  • 'linear'(default)

  • 'cubic'

  • 'pchip'

Data Types:char

Value that zero curve is shifted up and down to compute duration, specified as the comma-separated pair consisting of'ShiftValue'and a scalar numeric value.

Data Types:double

Rates to perform the duration calculation, specified as the comma-separated pair consisting of'KeyRates'and a time to maturity using a scalar or aNUMBONDS-by-1vector.

Data Types:double

Compounding frequency of the curve, specified as the comma-separated pair consisting of'CurveCompounding'and a scalar using one of the following values:

  • 1— Annual compounding

  • 2— Semiannual compounding

  • 3— Compounding three times per year

  • 4— Quarterly compounding

  • 6— Bimonthly compounding

  • 12— Monthly compounding

.

Data Types:double

Basis of the curve, specified as the comma-separated pair consisting of'CurveBasis'and a scalar using one of the following values:

  • 0 = actual/actual

  • 1 = 30/360 (SIA)

  • 2 = actual/360

  • 3 = actual/365

  • 4 = 30/360 (PSA)

  • 5 = 30/360 (ISDA)

  • 6 = 30/360 (European)

  • 7 = actual/365 (Japanese)

  • 8 = actual/actual (ICMA)

  • 9 = actual/360 (ICMA)

  • 10 = actual/365 (ICMA)

  • 11 = 30/360E (ICMA)

  • 12 = actual/365 (ISDA)

  • 13 = BUS/252

For more information, seeBasis.

Data Types:double

Number of coupon payments per year, specified as the comma-separated pair consisting of'Period'and a scalar or aNUMBONDS-by-1vector using the values:0,1,2,3,4,6, or12.

Data Types:double

Day-count of the instrument, specified as the comma-separated pair consisting of'Basis'and a scalar or aNUMBONDS-by-1vector using a supported value:

  • 0 = actual/actual

  • 1 = 30/360 (SIA)

  • 2 = actual/360

  • 3 = actual/365

  • 4 = 30/360 (PSA)

  • 5 = 30/360 (ISDA)

  • 6 = 30/360 (European)

  • 7 = actual/365 (Japanese)

  • 8 = actual/actual (ICMA)

  • 9 = actual/360 (ICMA)

  • 10 = actual/365 (ICMA)

  • 11 = 30/360E (ICMA)

  • 12 = actual/365 (ISDA)

  • 13 = BUS/252

For more information, seeBasis.

Data Types:double

End-of-month rule flag, specified as the comma-separated pair consisting of'EndMonthRule'and a scalar or aNUMBONDS-by-1vector. This rule applies only whenMaturityis an end-of-month date for a month having 30 or fewer days.

  • 0= Ignore rule, meaning that a bond coupon payment date is always the same numerical day of the month.

  • 1= Set rule on, meaning that a bond coupon payment date is always the last actual day of the month.

Data Types:logical

Bond Issue date, specified as the comma-separated pair consisting of'IssueDate'and a scalar or aNUMBONDS-by-1vector using serial date numbers, date character vectors, or datetime arrays.

If you do not specify anIssueDate, the cash flow payment dates are determined from other inputs.

Data Types:double|char|datetime

Irregular or normal first coupon date, specified as the comma-separated pair consisting of'FirstCouponDate'and a scalar or aNUMBONDS-by-1vector using serial date numbers, date character vectors, or datetime arrays.

If you do not specify aFirstCouponDate, the cash flow payment dates are determined from other inputs.

Data Types:double|char|datetime

Irregular or normal last coupon date, specified as the comma-separated pair consisting of'LastCouponDate'and a scalar or aNUMBONDS-by-1vector using serial date numbers, date character vectors, or datetime arrays.

If you do not specify aLastCouponDate, the cash flow payment dates are determined from other inputs.

Data Types:double|char|datetime

开工日期payments, specified as the comma-separated pair consisting of'StartDate'and a scalar or aNUMBONDS-by-1vector using serial date numbers, date character vectors, or datetime arrays. TheStartDateis when a bond actually starts (the date from which a bond cash flow is considered). To make an instrument forward-starting, specify this date as a future date.

If you do not specify aStartDate, the effective start date is theSettledate.

Data Types:double|char|datetime

Face value of the bond, specified as the comma-separated pair consisting of'Face'and a scalar or aNUMBONDS-by-1vector.

Data Types:double

Output Arguments

collapse all

Key rate durations, returned as anumBonds-by-numRatesmatrix.

Algorithms

bndkrdurcomputes the key rate durations for one or more bonds given a zero curve and a set of key rates. By default, the key rates are each of the zero curve rates. For each key rate, the duration is computed by shifting the zero curve up and down by a specified amount (ShiftValue) at that particular key rate, computing the present value of the bond in each case with the new zero curves, and then evaluating the following:

k r d u r i = ( P V d o w n - P V u p ) ( P V × S h i f t V a l u e × 2 )

Note

The shift to the curve is computed by shifting the particular key rate by theShiftValueand then interpolating the values of the curve in the interval between the previous and next key rates. For the first key rate, any curve values before the date are equal to theShiftValue; likewise, for the last key rate, any curve values after the date are equal to theShiftValue.

References

[1] Golub, B., Tilman, L.Risk Management: Approaches for Fixed Income Markets.Wiley, 2000.

[2] Tuckman, B.Fixed Income Securities: Tools for Today's Markets.Wiley, 2002.

Version History

Introduced before R2006a