Option-adjusted spread given price
OAS = mbsprice2oas(ZeroCurve, Price, Settle, Maturity, IssueDate,
GrossRate, CouponRate, Delay, Interpolation PrepaySpeed,
A matrix of three columns:
Clean price for every $100 face value of bond issue.
Settlement date (scalar only). A serial date number or date string. Date when option-adjusted spread is calculated. Settle must be earlier than Maturity.
Maturity date. Scalar or vector in serial date number or date string format.
Issue date. A serial date number or date string.
Gross coupon rate (including fees), in decimal.
(Optional) Net coupon rate, in decimal. Default = GrossRate.
(Optional) Delay (in days) between payment from homeowner and receipt by bondholder. Default = 0 (no delay between payment and receipt.
Interpolation method. Computes the corresponding spot rates for the bond's cash flow. Available methods are (0) nearest, (1) linear, and (2) cubic spline. Default = 1. See interp1 for more information.
(Optional) Relation of the conditional payment rate (CPR) to the benchmark model. Default = end of month's CPR. Set PrepaySpeed to  if you input a customized prepayment matrix.
(Optional) Customized prepayment matrix. A matrix of size max(TermRemaining)-by-NMBS. Missing values are padded with NaNs. Each column corresponds to a mortgage-backed security, and each row corresponds to each month after settlement.
All inputs (except PrepayMatrix) are number of mortgage-backed securities (NMBS) by 1 vectors.
OAS = mbsprice2oas(ZeroCurve, Price, Settle, Maturity, IssueDate, GrossRate, CouponRate, Delay, Interpolation, PrepaySpeed, PrepayMatrix) computes the monthly option-adjusted spread in basis points.
Calculate the option-adjusted spread of a 30-year fixed-rate mortgage with about a 28-year weighted average maturity remaining, given assumptions of 0, 50, and 100 PSA prepayments. First, create the bonds matrix:
Bonds = [datenum('11/21/2002') 0 100 0 2 1; datenum('02/20/2003') 0 100 0 2 1; datenum('07/31/2004') 0.03 100 2 3 1; datenum('08/15/2007') 0.035 100 2 3 1; datenum('08/15/2012') 0.04875 100 2 3 1; datenum('02/15/2031') 0.05375 100 2 3 1];
Choose a settlement date.
Settle = datenum('20-Aug-2002');
Assume the following clean prices for the bonds:
Prices = [ 98.97467; 98.58044; 100.10534; 98.18054; 101.38136; 99.25411];
Use the following formula to compute spot compounding for the bonds:
SpotCompounding = 2*ones(size(Prices));
Compute the zero curve.
[ZeroRatesP, CurveDatesP] = zbtprice(Bonds, Prices, Settle); ZeroCurve = [CurveDatesP, ZeroRatesP, SpotCompounding]
ZeroCurve = 1.0e+05 * 7.3154 0.0000 0.0000 7.3163 0.0000 0.0000 7.3216 0.0000 0.0000 7.3327 0.0000 0.0000 7.3510 0.0000 0.0000 7.4185 0.0000 0.0000
Assign the following parameters:
Price = 95; Maturity = datenum('02-Jan-2030'); IssueDate = datenum('02-Jan-2000'); GrossRate = 0.08125; CouponRate = 0.075; Delay = 14; Interpolation = 1; PrepaySpeed = [0; 50; 100]; Interpolation = 1;
Compute the option-adjusted spread.
OAS = mbsprice2oas(ZeroCurve, Price, Settle, Maturity, ... IssueDate, GrossRate, CouponRate, Delay, Interpolation, ... PrepaySpeed)
OAS = 26.0508 28.6355 31.2232