Price given option-adjusted spread
Price = mbsoas2price(ZeroCurve, OAS, Settle, Maturity, IssueDate,
GrossRate, CouponRate, Delay, Interpolation, PrepaySpeed,
A matrix of three columns:
Option-adjusted spreads in basis points.
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.
Price = mbsoas2price(ZeroCurve, OAS, Settle, Maturity, IssueDate, GrossRate, CouponRate, Delay, Interpolation, PrepaySpeed, PrepayMatrix) computes the clean price of a pass-through security for each $100 face value of outstanding principal.
Given an option-adjusted spread, a spot curve, and a prepayment assumption, compute theoretical price of a mortgage pool. 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:
OAS = [26.0502; 28.6348; 31.2222]; Maturity = datenum('02-Jan-2030'); IssueDate = datenum('02-Jan-2000'); GrossRate = 0.08125; CouponRate = 0.075; Delay = 14; Interpolation = 1; PrepaySpeed = [0 50 100];
Calculate the theoretical price from the option-adjusted spread.
Price = mbsoas2price(ZeroCurve, OAS, Settle, Maturity, ... IssueDate, GrossRate, CouponRate, Delay, Interpolation, ... PrepaySpeed)
Price = 95.0006 95.0006 95.0006