How to calculate the Z-Spread of a corporate bond, given the swap curve and the bond price? If you run the following script given a price of 97 I get Spread 720.1 but it should be 735. Please find what is missing to get the correct spread.

4 views (last 30 days)
Settle = datenum('05-Jan-2016');
InstrumentTypes = { 'Deposit'; 'Deposit'; 'Deposit'; 'Deposit'; 'Deposit'; 'Futures'; 'Futures'; 'Futures'; 'Futures'; 'Futures'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; 'Swap'; };
Instruments = [ Settle,datenum('07-Jan-2016'),-0.00249; Settle,datenum('31-Jan-2016'),-0.00205; Settle,datenum('02-Mar-2016'),-0.00165; Settle,datenum('31-Mar-2016'),-0.00131; Settle,datenum('01-Jul-2016'),-0.00040; Settle,datenum('31-Jul-2016'),10007.70000; Settle,datenum('31-Aug-2016'),10009.00000; Settle,datenum('01-Oct-2016'),10008.80000; Settle,datenum('31-Oct-2016'),10008.10000; Settle,datenum('01-Dec-2016'),10007.10000; Settle,datenum('31-Dec-2016'),-0.00056; Settle,datenum('01-Jul-2017'),-0.00052; Settle,datenum('31-Dec-2017'),-0.00029; Settle,datenum('31-Dec-2018'),0.00066; Settle,datenum('31-Dec-2019'),0.00196; Settle,datenum('31-Dec-2020'),0.00331; Settle,datenum('31-Dec-2021'),0.00478; Settle,datenum('31-Dec-2022'),0.00620; Settle,datenum('31-Dec-2023'),0.00757; Settle,datenum('31-Dec-2024'),0.00886; Settle,datenum('31-Dec-2025'),0.01001; Settle,datenum('31-Dec-2026'),0.01097; Settle,datenum('31-Dec-2027'),0.01189; Settle,datenum('31-Dec-2030'),0.01396; Settle,datenum('31-Dec-2035'),0.01565; Settle,datenum('31-Dec-2040'),0.01603; Settle,datenum('31-Dec-2045'),0.01613; Settle,datenum('31-Dec-2050'),0.01610; Settle,datenum('31-Dec-2055'),0.01606; Settle,datenum('31-Dec-2060'),0.01592; Settle,datenum('31-Dec-2065'),0.01567;];
irbo = IRBootstrapOptions('LowerBound',-1);
bootModel = IRDataCurve.bootstrap('zero', Settle, InstrumentTypes, Instruments);
% Compute the RatesSpec using bootModel
Rates = bootModel.Data; ValuationDate = '31-Dec-2015'; StartDates = ValuationDate; EndDates = bootModel.Dates; Compounding = 1;
RS = intenvset('ValuationDate', ValuationDate, 'StartDates', StartDates,'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding);
% Try to calculate the z-spread from the bond price ...
Price = 97; Coupon = 3.75 / 100.0; Maturity = datenum('30-Nov-2016'); Period = 1; % Anual (coupon payment frequecy) Basis = 1; % Day Count (ACT/ACT) EndMonthRule = 0; % No impact (leave it zero) IssueDate = datenum('30-Nov-2009'); % 1st Settle Date FirstCouponDate = datenum('30-Nov-2010'); LastCouponDate = datenum('30-Nov-2016'); % Maturity (last coupon and maturity) StartDate = datenum('30-Nov-2009'); % 1st Settle Date Face = 100; % Face Value
Spread = bndspread(RS, Price, Coupon, Settle, Maturity,Period, Basis, EndMonthRule, IssueDate, FirstCouponDate,LastCouponDate, StartDate, Face);

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!