# mbsprice2oas

## Syntax

``OAS = mbsprice2oas(ZeroCurve,Price,Settle,Maturity,IssueDate,GrossRate)``
``OAS = mbsprice2oas(___,CouponRate,Delay,Interpolation,PrepaySpeed,PrepayMatrix)``

## Description

example

````OAS = mbsprice2oas(ZeroCurve,Price,Settle,Maturity,IssueDate,GrossRate)` computes the option-adjusted spread in basis points.```

example

````OAS = mbsprice2oas(___,CouponRate,Delay,Interpolation,PrepaySpeed,PrepayMatrix)` specifies options using one or more optional arguments in addition to the input arguments in the previous syntax. ```

## Examples

collapse all

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 = 6×3 105 × 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;```

```OAS = mbsprice2oas(ZeroCurve, Price, Settle, Maturity, ... IssueDate, GrossRate, CouponRate, Delay, Interpolation, ... PrepaySpeed)```
```OAS = 3×1 26.0508 28.6355 31.2232 ```

## Input Arguments

collapse all

Zero curve, specified as a three-column matrix, where:

• Column 1 is dates using datetimes.

• Column 2 is spot rates with maturities corresponding to the dates in Column 1, in decimal (for example, 0.075).

• Column 3 is the compounding value of the rates in Column 2. (This is the agency spot rate on the settlement date.) Allowable compounding values are: `1` (annual), `2` (semiannual, `3` (three times per year), `4` (quarterly), `6` (bimonthly), `12` (monthly), and `-1` (continuous).

For example:

```[datetime(2003,1,1) 0.0154 12; datetime(2004,1,1) 0.0250 12; ...... datetime(2020,1,1) 0.0675 2]; ```

Data Types: `datetime` | `cell`

Clean price for every \$100 face value of bond issue, specified as an `NMBS`-by-`1` vector.

Data Types: `double`

Settlement date, specified as an `NMBS`-by-`1` vector using a string array, date character vectors, or serial date numbers. `Settle` must be earlier than `Maturity`.

Data Types: `double` | `char` | `string`

Maturity date, specified as an `NMBS`-by-`1` vector using a string array, date character vectors, or serial date numbers.

Data Types: `double` | `char` | `string`

Issue date, specified as an `NMBS`-by-`1` vector using a string array, date character vectors, or serial date numbers.

Data Types: `double` | `char` | `string`

Gross coupon rate (including fees), specified as an `NMBS`-by-`1` vector of decimal values.

Data Types: `double`

(Optional) Net coupon rate, specified as an `NMBS`-by-`1` vector of decimal values.

Data Types: `double`

(Optional) Delay (in days) between payment from homeowner and receipt by bondholder, specified as an `NMBS`-by-`1` vector.

Data Types: `double`

(Optional) Interpolation method to compute the corresponding spot rates for the bond's cash flow, specified as an `NMBS`-by-`1` vector. Available methods are (`0`) nearest, (`1`) linear, and (`2`) cubic spline. For more information on the supported interpolation methods, see `interp1`.

Data Types: `double`

(Optional) Speed relative to PSA standard, specified as an `NMBS`-by-`1` vector. The PSA standard is `100`.

Note

Set the `PrepaySpeed` to `[]` if you input a customized `PrepayMatrix`.

Data Types: `double`

(Optional) Customized prepayment vector, specified as a `NaN`-padded matrix of size `max(TermRemaining)`-by-`NMBS`. Each column corresponds to each mortgage-backed security, and each row corresponds to each month after settlement.

Note

Use `PrepayMatrix` only when `PrepaySpeed` is unspecified.

Data Types: `double`

## Output Arguments

collapse all

Zero volatility OAS, in basis point (bp), returned as a `NMBS`-by-`1` vector.

## References

[1] PSA Uniform Practices, SF-49

## Version History

Introduced before R2006a