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.
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.
Assume these clean prices for the bonds.
Prices = [ 98.97467; 98.58044; 100.10534; 98.18054; 101.38136; 99.25411];
Use this 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];
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.0502 28.6348 31.2222