bndspread

Static spread over spot curve

Syntax

Spread = bndspread(SpotInfo, Price, Coupon, Settle, Maturity)
Spread = bndspread(SpotInfo, Price, Coupon, Settle, Maturity,
Period, Basis, EndMonthRule, IssueDate, FirstCouponDate,
LastCouponDate, StartDate, Face)
Spread = bndspread(SpotInfo, Price, Coupon, Settle, Maturity,
'ParameterName', 'ParameterValue ...)

Description

Spread = bndspread(SpotInfo, Price, Coupon, Settle, Maturity) computes the static spread (Z-spread) to benchmark in basis points.

Spread = bndspread(SpotInfo, Price, Coupon, Settle, Maturity,
Period, Basis, EndMonthRule, IssueDate, FirstCouponDate,
LastCouponDate, StartDate, Face)
computes the static spread (Z-spread) to benchmark in basis points including optional inputs.

Spread = bndspread(SpotInfo, Price, Coupon, Settle, Maturity,
'ParameterName', 'ParameterValue ...)
accepts optional inputs as one or more comma-separated parameter/value pairs. 'ParameterName' is the name of the parameter inside single quotes. ParameterValue is the value corresponding to 'ParameterName'. Specify parameter/value pairs in any order. Names are case-insensitive.

Input Arguments

SpotInfo

This input can either be a matrix of two columns, or an annualized term structure created by intenvset.

  • Matrix of two columns— The first column is the SpotDate, and the second column, ZeroRates, is the zero-rate corresponding to maturities on the SpotDate. It is recommended that the spot-rates are spaced as evenly apart as possible, perhaps one that is built from 3-months deposit rates. For example, using the 3-month deposit rates:

    SpotInfo = ...
    [datenum('2-Jan-2004') ,  0.03840;
    datenum('2-Jan-2005') ,  0.04512;
    datenum('2-Jan-2006') ,  0.05086];
  • Annualized term structure — Refer to intenvset to create an annualized term structure. For example:

    Settle = datenum('1-Jan-2004');
    Rates = [0.03840; 0.04512; 0.05086];
    EndDates = [datenum('2-Jan-2004'); datenum('2-Jan-2005');...
                 datenum('2-Jan-2006')];
    SpotInfo = intenvset('StartDates' , Settle  ,...
                          'Rates'      , Rates   ,...
                          'EndDates'   , EndDates,...
                          'Compounding', 2       ,...
                          'Basis'      , 0);
    

Price

Price for every $100 notional amount of bonds whose spreads are computed. This is the clean price of the bond (current price without accrued interest).

Coupon

Annual coupon rate of bonds whose spreads are computed.

Settle

Settlement date. A vector of serial date numbers or date strings. Settle must be earlier than Maturity.

Maturity

Maturity date. A vector of serial date numbers or date strings.

Ordered Input or Parameter–Value Pairs

Enter the following inputs using an ordered syntax or as parameter/value pairs. You cannot mix ordered syntax with parameter/value pairs.

Period

Coupons per year of the bond. A vector of integers. Values are 0, 1, 2, 3, 4, 6, and 12.

Default: 2

Basis

Day-count basis of the instrument. A vector of integers.

  • 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 (ISMA)

  • 9 = actual/360 (ISMA)

  • 10 = actual/365 (ISMA)

  • 11 = 30/360E (ISMA)

  • 12 = actual/365 (ISDA)

  • 13 = BUS/252

For more information, see basis.

Default: 0

EndMonthRule

End-of-month rule. A vector. This rule applies only when Maturity is 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.

Default: 1

IssueDate

Issue date for a bond.

FirstCouponDate

Date when a bond makes its first coupon payment; used when bond has an irregular first coupon period. When FirstCouponDate and LastCouponDate are both specified, FirstCouponDate takes precedence in determining the coupon payment structure.

Default: If you do not specify a FirstCouponDate, the cash flow payment dates are determined from other inputs.

LastCouponDate

Last coupon date of a bond before the maturity date; used when bond has an irregular last coupon period. In the absence of a specified FirstCouponDate, a specified LastCouponDate determines the coupon structure of the bond. The coupon structure of a bond is truncated at the LastCouponDate, regardless of where it falls, and is followed only by the bond's maturity cash flow date.

Default: If you do not specify a LastCouponDate, the cash flow payment dates are determined from other inputs.

StartDate

Date 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 StartDate, the effective start date is the Settle date.

Face

Face or par value.

Default: 100

Parameter–Value Pairs

Enter the following inputs only as parameter/value pairs.

CompoundingFrequency

Compounding frequency for yield calculation. By default, SIA bases (0-7) and BUS/252 use a semiannual compounding convention and ISMA bases (8-12) use an annual compounding convention.

DiscountBasis

Basis used to compute the discount factors for computing the yield. The default behavior is for SIA bases to use the actual/actual day count to compute discount factors. If you use ISMA day counts and BUS/252, the specified bases are used.

Output Arguments

Spread

Static spread to benchmark, in basis points.

Examples

expand all

Compute the Static Spread Over a Spot Curve

This example shows how to compute a Federal National Mortgage Association (FNMA) 4 3/8 spread over a Treasury spot curve and plot the results.

RefMaturity = [datenum('02/27/2003');
               datenum('05/29/2003');
               datenum('10/31/2004');
               datenum('11/15/2007');
               datenum('11/15/2012');
               datenum('02/15/2031')];

RefCpn = [0;
          0;
          2.125;
          3;
          4;
          5.375] / 100;

RefPrices =  [99.6964;
              99.3572;
             100.3662;
              99.4511;
              99.4299;
             106.5756];

RefBonds = [RefPrices, RefMaturity, RefCpn];
Settle   = datenum('26-Nov-2002');
[ZeroRates, CurveDates] = zbtprice(RefBonds(:, 2:end), ...
RefPrices, Settle)

% FNMA 4 3/8 maturing 10/06 at 4.30 pm Tuesday
Price    = 105.484;
Coupon   = 0.04375;
Maturity = datenum('15-Oct-2006');

% All optional inputs are supposed to be accounted by default,
% except the accrued interest under 30/360 (SIA), so:
Period = 2;
Basis  = 1;
SpotInfo = [CurveDates, ZeroRates];

% Compute static spread over treasury curve, taking into account
% the shape of curve as derived by bootstrapping method embedded
% within bndspread.

SpreadInBP = bndspread(SpotInfo, Price, Coupon, Settle, ...
Maturity, Period, Basis)

plot(CurveDates, ZeroRates*100, 'b', CurveDates, ...
ZeroRates*100+SpreadInBP/100, 'r--')
legend({'Treasury'; 'FNMA 4 3/8'})
xlabel('Curve Dates')
ylabel('Spot Rate [%]')
grid;
ZeroRates =

    0.0121
    0.0127
    0.0194
    0.0317
    0.0423
    0.0550


CurveDates =

      731639
      731730
      732251
      733361
      735188
      741854


SpreadInBP =

   18.5669

References

Krgin, Dragomir, Handbook of Global Fixed Income Calculations, John Wiley & Sons, 2002.

Mayle, Jan, "Standard Securities Calculations Methods: Fixed Income Securities Formulas for Analytic Measures", SIA, Vol 2, Jan 1994.

Stigum, Marcia, and Franklin Robinson, Money Market and Bond Calculations, McGraw-Hill, 1996.

See Also

|

Was this topic helpful?