# agencyoas

## Syntax

``OAS = agencyoas(ZeroData,Price,CouponRate,Settle,Maturity,Vol,CallDate)``
``OAS = agencyoas(___,Name,Value)``

## Description

example

````OAS = agencyoas(ZeroData,Price,CouponRate,Settle,Maturity,Vol,CallDate)` computes OAS of a callable bond given price using the Agency OAS model.```

example

````OAS = agencyoas(___,Name,Value)` specifies options using one or more name-value pair arguments in addition to the input arguments in the previous syntax.```

## Examples

collapse all

This example shows how to compute the agency `OAS` value.

```Settle = datenum('20-Jan-2010'); ZeroRates = [.07 .164 .253 1.002 1.732 2.226 2.605 3.316 ... 3.474 4.188 4.902]'/100; ZeroDates = daysadd(Settle,360*[.25 .5 1 2 3 4 5 7 10 20 30],1); ZeroData = [ZeroDates ZeroRates]; Maturity = datenum('30-Dec-2013'); CouponRate = .022; Price = 99.155; Vol = .5117; CallDate = datenum('30-Dec-2010'); OAS = agencyoas(ZeroData, Price, CouponRate, Settle, Maturity, Vol, CallDate)```
```OAS = 8.5837 ```

## Input Arguments

collapse all

Zero curve, specified as an `numRates`-by-`2` matrix where the first column is zero dates and the second column is the accompanying zero rates.

Data Types: `double`

Prices specified as an `numBonds`-by-`1` vector.

Data Types: `double`

Coupon rates, specified as an `numBonds`-by-`1` vector in decimals.

Data Types: `double`

Settlement date, specified as a scalar serial date number.

Note

The `Settle` date must be an identical settlement date for all the bonds and the zero curve.

Data Types: `double`

Maturity date, specified as a `numBonds`-by-`1` vector.

Data Types: `double`

Volatilities specified as a scalar or an `numBonds`-by-`1` vector in decimals. `Vol` is the volatility of interest rates corresponding to the time of the `CallDate`.

Data Types: `double`

Call dates, specified as an `numBonds`-by-`1` vector.

Data Types: `double`

### Name-Value Arguments

Specify optional comma-separated pairs of `Name,Value` arguments. `Name` is the argument name and `Value` is the corresponding value. `Name` must appear inside quotes. You can specify several name and value pair arguments in any order as `Name1,Value1,...,NameN,ValueN`.

Example: ```OAS = agencyoas(ZeroData,Price,CouponRate,Settle,Maturity,Vol,CallDate,'Basis',7,'Face',1000)```

Day-count basis, specified as the comma-separated pair consisting of `'Basis'` and a `N`-by-`1` vector using the following values:

• 0 = actual/actual

• 1 = 30/360 (SIA)

• 2 = actual/360

• 3 = actual/365

• 4 = 30/360 (PSA)

• 5 = 30/360 (ISDA)

• 6 = 30/360 (European)

• 7 = actual/365 (Japanese)

• 8 = actual/actual (ICMA)

• 9 = actual/360 (ICMA)

• 10 = actual/365 (ICMA)

• 11 = 30/360E (ICMA)

• 12 = actual/365 (ISDA)

• 13 = BUS/252

Data Types: `double`

Curve basis, specified as the comma-separated pair consisting of `'CurveBasis'` and a `N`-by-`1` vector using the following values:

• 0 = actual/actual

• 1 = 30/360 (SIA)

• 2 = actual/360

• 3 = actual/365

• 4 = 30/360 (PSA)

• 5 = 30/360 (ISDA)

• 6 = 30/360 (European)

• 7 = actual/365 (Japanese)

• 8 = actual/actual (ICMA)

• 9 = actual/360 (ICMA)

• 10 = actual/365 (ICMA)

• 11 = 30/360E (ICMA)

• 12 = actual/365 (ISDA)

• 13 = BUS/252

Data Types: `double`

Compounding frequency of the zero curve, specified as the comma-separated pair consisting of `'CurveCompounding'` and a `N`-by-`1` vector using the supported values: `–1`, `0`, `1`, `2`, `3`, `4`, `6`, and `12`.

Data Types: `double`

End-of-month rule flag, specified as the comma-separated pair consisting of `'EndMonthRule'` and a nonnegative integer [`0`, `1`] using a `N`-by-`1` vector.

• `0` = Ignore rule, meaning that a payment date is always the same numerical day of the month.

• `1` = Set rule on, meaning that a payment date is always the last actual day of the month.

Data Types: `logical`

Face value of bond, specified as the comma-separated pair consisting of `'Face'` and an `N`-by-`1` vector of numeric values.

Data Types: `double`

Irregular first coupon date, specified as the comma-separated pair consisting of `'FirstCouponDate'` and a `NINST`-by-`1` vector using a serial date numbers.

When `FirstCouponDate` and `LastCouponDate` are both specified, `FirstCouponDate` takes precedence in determining the coupon payment structure.

Data Types: `double`

Interpolation method, specified as the comma-separated pair consisting of `'InterpMethod'` and a `N`-by-`1` vector using a supported value. For more information on interpolation methods, see `interp1`.

Data Types: `char`

Bond issue date, specified as the comma-separated pair consisting of `'IssueDate'` and a `N`-by-`1` vector using serial date numbers.

Data Types: `double`

Irregular last coupon date, specified as the comma-separated pair consisting of `'LastCouponDate'` and a `N`-by-`1` vector using serial date numbers

In the absence of a specified `FirstCouponDate`, a specified `LastCouponDate` determines the coupon structure of the bond. The coupon structure of a bond is truncated at the `LastCouponDate`, regardless of where it falls, and is followed only by the bond's maturity cash flow date.

Data Types: `double`

Coupons per year, specified as the comma-separated pair consisting of `'Period'` and an `N`-by-`1` vector. Values for `Period` are `0`, `1`, `2`, `3`, `4`, `6`, and `12`.

Data Types: `double`

Forward starting date of payments (the date from which a bond cash flow is considered), specified as the comma-separated pair consisting of `'StartDate'` and a `N`-by-`1` vector using serial date numbers.

If you do not specify `StartDate`, the effective start date is the `Settle` date.

Data Types: `double`

## Output Arguments

collapse all

Option-adjusted spreads, returned as an `numBonds`-by-`1` matrix.

collapse all

### Agency OAS Model

The BMA European Callable Securities Formula provides a standard methodology for computing price and option-adjusted spread for European Callable Securities (ECS).

 SIFMA, The BMA European Callable Securities Formula, `https://www.sifma.org`.