Main Content

## Computing Equity Instrument Sensitivities

Sensitivities can be reported either as dollar price changes or percentage price changes. The delta, gamma, and vega sensitivities that the toolbox computes are dollar sensitivities.

The functions `crrsens`, `eqpsens`, `ittsens`, and `sttsens` compute the delta, gamma, and vega sensitivities of instruments using a stock tree. They also optionally return the calculated price for each instrument. The sensitivity functions require the same two input arguments used by the pricing functions (`CRRTree` and `CRRInstSet` for CRR, `EQPTree` and `EQPInstSet` for EQP, `ITTTree` and `ITTInstSet` for ITT, and `STTTree` and `STTInstSet` for STT).

As with the instrument pricing functions, the optional input argument `Options` is also allowed. You would include this argument if you want a sensitivity function to generate a price for a barrier option as one of its outputs and want to control the method that the toolbox uses to perform the pricing operation. See Pricing Options Structure or the `derivset` function for more information.

For path-dependent options (lookback and Asian), delta and gamma are computed by finite differences in calls to `crrprice`, `eqpprice`, `ittprice`, and `sttprice`. For the other options (stock option, barrier, and compound), delta and gamma are computed from the CRR, EQP, ITT, and STT trees and the corresponding option price tree. (See Chriss, Neil, Black-Scholes and Beyond, pp. 308–312.)

### CRR Sensitivities Example

The calling syntax for the sensitivity function is:

```[Delta, Gamma, Vega, Price] = crrsens(CRRTree, InstSet, Options)```

Using the example data in `deriv.mat`, calculate the sensitivity of the instruments.

```load deriv.mat [Delta, Gamma, Vega, Price] = crrsens(CRRTree, CRRInstSet); ```

You can conveniently examine the sensitivities and the prices by arranging them into a single matrix.

```format bank All = [Delta, Gamma, Vega, Price]```
```All = 0.59 0.04 53.45 8.29 -0.31 0.03 67.00 2.50 0.69 0.03 67.00 12.13 -0.12 -0.01 -98.08 3.32 -0.40 -45926.32 88.18 7.60 -0.42 -112143.15 119.19 11.78 0.60 45926.32 49.21 4.18 0.82 112143.15 41.71 3.42 ```

As with the prices, each row of the sensitivity vectors corresponds to the similarly indexed instrument in `CRRInstSet`. To view the per-dollar sensitivities, divide each dollar sensitivity by the corresponding instrument price.

```All = [Delta ./ Price, Gamma ./ Price, Vega ./ Price, Price] ```
```All = 0.07 0.00 6.45 8.29 -0.12 0.01 26.78 2.50 0.06 0.00 5.53 12.13 -0.04 -0.00 -29.51 3.32 -0.05 -6041.77 11.60 7.60 -0.04 -9522.02 10.12 11.78 0.14 10987.98 11.77 4.18 0.24 32771.92 12.19 3.42```

### ITT Sensitivities Example

The calling syntax for the sensitivity function is:

```[Delta, Gamma, Vega, Price] = ittsens(ITTTree, ITTInstSet, Options)```

Using the example data in `deriv.mat`, calculate the sensitivity of the instruments.

```load deriv.mat ```
```warning('off', 'fininst:itttree:Extrapolation'); [Delta, Gamma, Vega, Price] = ittsens(ITTTree, ITTInstSet); ```

You can conveniently examine the sensitivities and the prices by arranging them into a single matrix.

```format bank All = [Delta, Gamma, Vega, Price]```
```All = 0.24 0.03 19.35 1.65 -0.43 0.02 49.69 10.68 0.35 0.04 12.29 2.41 -0.07 0.00 6.73 3.23 0.63 142945.66 38.90 0.54 0.60 22703.21 68.92 6.18 0.32 -142945.66 18.48 3.21 0.67 -22703.21 17.75 6.61```

As with the prices, each row of the sensitivity vectors corresponds to the similarly indexed instrument in `ITTInstSet`.

Note

In this example, the extrapolation warnings are turned off before calculating the sensitivities to avoid displaying many warnings on the Command Window as the sensitivities are calculated.

If the extrapolation warnings are turned on

`warning('on', 'fininst:itttree:Extrapolation');`
and `ittsens` is rerun, the extrapolation warnings scroll as the command executes:
`[Delta, Gamma, Vega, Price] = ittsens(ITTTree, ITTInstSet)`
```Warning: The option set specified in StockOptSpec was too narrow for the generated tree. This made extrapolation necessary. Below is a list of the options that were outside of the range of those specified in StockOptSpec. Option Type: 'call' Maturity: 01-Jan-2007 Strike=67.2897 Option Type: 'put' Maturity: 01-Jan-2007 Strike=37.1528 Option Type: 'put' Maturity: 01-Jan-2008 Strike=27.6066 Option Type: 'put' Maturity: 31-Dec-2008 Strike=20.5132 Option Type: 'call' Maturity: 01-Jan-2010 Strike=164.0157 Option Type: 'put' Maturity: 01-Jan-2010 Strike=15.2424 > In itttree>InterpOptPrices (line 680) In itttree (line 285) In stocktreesens>stocktreevega (line 193) In stocktreesens (line 94) In ittsens (line 79) Delta = 0.24 -0.43 0.35 -0.07 0.63 0.60 0.32 0.67 Gamma = 0.03 0.02 0.04 0.00 142945.66 22703.21 -142945.66 -22703.21 Vega = 19.35 49.69 12.29 6.73 38.90 68.92 18.48 17.75 Price = 1.65 10.68 2.41 3.23 0.54 6.18 3.21 6.61```

These warnings are a consequence of having to extrapolate to find the option price of the tree nodes. In this example, the set of inputs options was too narrow for the shift in the tree nodes introduced by the disturbance used to calculate the sensitivities. As a consequence extrapolation for some of the nodes was needed. Since the input data is quite close the extrapolated data, the error introduced by extrapolation is fairly low.

#### STT Sensitivities Example

The calling syntax for the sensitivity function is:

```[Delta, Gamma, Vega, Price] = sttsens(STTTree, InstSet, Name, Value)```

Using the example data in `deriv.mat`, calculate the sensitivity of the instruments.

```load deriv.mat [Delta, Gamma, Vega, Price] = sttsens(STTTree, STTInstSet); ```

You can conveniently examine the sensitivities and the prices by arranging them into a single matrix.

```format bank All = [Delta, Gamma, Vega, Price]```
```All = 0.53 0.02 52.90 4.50 -0.09 0.00 42.44 3.06 0.47 0.03 25.98 3.80 -0.06 0.00 -9.53 1.71 0.23 -186495.25 70.38 11.73 0.33 -191186.43 92.92 12.91 0.57 186495.25 25.81 1.69 0.66 191186.43 37.88 2.62```

Download ebook