# optstocksensbybaw

Calculate American options prices and sensitivities using Barone-Adesi and Whaley option pricing model

## Syntax

``PriceSens = optstocksensbybaw(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike)``
``PriceSens = optstocksensbybaw(___,Name,Value)``

## Description

````PriceSens = optstocksensbybaw(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike)` calculates American options prices using the Barone-Adesi and Whaley option pricing model.```

````PriceSens = optstocksensbybaw(___,Name,Value)` adds optional name-value pair arguments.```

## Examples

collapse all

Consider an American call option with an exercise price of \$120. The option expires on Jan 1, 2018. The stock has a volatility of 14% per annum, and the annualized continuously compounded risk-free rate is 4% per annum as of Jan 1, 2016. Using this data, calculate the price of the American call, assuming the price of the stock is \$125 and pays a dividend of 2%.

```StartDate = 'Jan-1-2016'; EndDate = 'jan-1-2018'; Basis = 1; Compounding = -1; Rates = 0.04;```

Define the `RateSpec`.

```RateSpec = intenvset('ValuationDate',StartDate,'StartDate',StartDate,'EndDate',EndDate, ... 'Rates',Rates,'Basis',Basis,'Compounding',Compounding)```
```RateSpec = struct with fields: FinObj: 'RateSpec' Compounding: -1 Disc: 0.9231 Rates: 0.0400 EndTimes: 2 StartTimes: 0 EndDates: 737061 StartDates: 736330 ValuationDate: 736330 Basis: 1 EndMonthRule: 1 ```

Define the `StockSpec`.

```Dividend = 0.02; AssetPrice = 125; Volatility = 0.14; StockSpec = stockspec(Volatility,AssetPrice,'Continuous',Dividend)```
```StockSpec = struct with fields: FinObj: 'StockSpec' Sigma: 0.1400 AssetPrice: 125 DividendType: {'continuous'} DividendAmounts: 0.0200 ExDividendDates: [] ```

Define the American option.

```OptSpec = 'call'; Strike = 120; Settle = 'Jan-1-2016'; Maturity = 'jan-1-2018';```

Compute the price and sensitivities for the American option.

```OutSpec = {'price';'delta';'theta'}; [Price,Delta,Theta] = optstocksensbybaw(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike,'OutSpec',OutSpec)```
```Price = 14.5180 ```
```Delta = 0.6672 ```
```Theta = -3.1861 ```

## Input Arguments

collapse all

Interest-rate term structure (annualized and continuously compounded), specified by the `RateSpec` obtained from `intenvset`. For information on the interest-rate specification, see `intenvset`.

Data Types: `struct`

Stock specification for the underlying asset. For information on the stock specification, see `stockspec`.

`stockspec` handles several types of underlying assets. For example, for physical commodities the price is `StockSpec.Asset`, the volatility is `StockSpec.Sigma`, and the convenience yield is `StockSpec.DividendAmounts`.

Data Types: `struct`

Settlement date for the American option, specified as a `NINST`-by-`1` matrix using a serial date number, a date character vector, or a datetime object.

Data Types: `double` | `char` | `datetime`

Maturity date for the American option, specified as a `NINST`-by-`1` matrix using a serial date number, a date character vector, or a datetime object.

Data Types: `double` | `char` | `datetime`

Definition of the option as `'call'` or `'put'`, specified as a `NINST`-by-`1` cell array of character vectors or string arrays with values `'call'` or `'put'`.

Data Types: `char` | `string`

American option strike price value, specified as a nonnegative scalar or `NINST`-by-`1` matrix of strike price values. Each row is the schedule for one option.

Data Types: `single` | `double`

### Name-Value Arguments

Specify optional pairs of arguments as `Name1=Value1,...,NameN=ValueN`, where `Name` is the argument name and `Value` is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose `Name` in quotes.

Example: `[Price,Delta,Theta] = optstocksensbybaw(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike,'OutSpec',OutSpec)`

Define outputs, specified as the comma-separated pair consisting of `'OutSpec'` and a `NOUT`- by-`1` or a `1`-by-`NOUT` cell array of character vectors with possible values of `'Price'`, `'Delta'`, `'Gamma'`, `'Vega'`, `'Lambda'`, `'Rho'`, `'Theta'`, and `'All'`.

`OutSpec = {'All'}` specifies that the output is `Delta`, `Gamma`, `Vega`, `Lambda`, `Rho`, `Theta`, and `Price`, in that order. This is the same as specifying `OutSpec` to include each sensitivity.

Example: `OutSpec = {'delta','gamma','vega','lambda','rho','theta','price'}`

Data Types: `char` | `cell`

## Output Arguments

collapse all

Expected prices or sensitivities for American options, returned as a `NINST`-by-`1` matrix.

Note

All sensitivities are evaluated by computing a discrete approximation of the partial derivative. This means that the option is revalued with a fractional change for each relevant parameter. The change in the option value divided by the increment is the approximated sensitivity value.

collapse all

### Vanilla Option

A vanilla option is a category of options that includes only the most standard components.

A vanilla option has an expiration date and straightforward strike price. American-style options and European-style options are both categorized as vanilla options.

The payoff for a vanilla option is as follows:

• For a call: $\mathrm{max}\left(St-K,0\right)$

• For a put: $\mathrm{max}\left(K-St,0\right)$

where:

St is the price of the underlying asset at time t.

K is the strike price.

## References

[1] Barone-Aclesi, G. and Robert E. Whaley. “Efficient Analytic Approximation of American Option Values.” The Journal of Finance. Volume 42, Issue 2 (June 1987), 301–320.

[2] Haug, E. The Complete Guide to Option Pricing Formulas. Second Edition. McGraw-Hill Education, January 2007.

## Version History

Introduced in R2017a