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

See Also

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

Related Examples

More About