# optsensbysabr

Calculate option sensitivities using SABR model

## Syntax

``Sens = optsensbysabr(ZeroCurve,Alpha,Beta,Rho,Nu,Settle,ExerciseDate,ForwardValue,Strike,OptSpec)``
``Sens = optsensbysabr(___,Name,Value)``

## Description

example

````Sens = optsensbysabr(ZeroCurve,Alpha,Beta,Rho,Nu,Settle,ExerciseDate,ForwardValue,Strike,OptSpec)` returns the sensitivities of an option value by using the SABR stochastic volatility model. ```

example

````Sens = optsensbysabr(___,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

Define the interest rate and the model parameters.

```SwapRate = 0.0357; Strike = 0.03; Alpha = 0.036; Beta = 0.5; Rho = -0.25; Nu = 0.35; Rates = 0.05;```

Define the `Settle`, `ExerciseDate`, and `OptSpec` for an interest-rate swaption.

```Settle = datenum('15-Sep-2013'); ExerciseDate = datenum('15-Sep-2015'); OptSpec = 'call';```

Define the `RateSpec` for the interest-rate curve.

```RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', ExerciseDate, 'Rates', Rates, 'Compounding', -1, 'Basis', 1)```
```RateSpec = struct with fields: FinObj: 'RateSpec' Compounding: -1 Disc: 0.9048 Rates: 0.0500 EndTimes: 2 StartTimes: 0 EndDates: 736222 StartDates: 735492 ValuationDate: 735492 Basis: 1 EndMonthRule: 1 ```

Calculate the `Delta` and `Vega` sensitivity values for the interest-rate swaption.

```[SABRDelta, SABRVega] = optsensbysabr(RateSpec, Alpha, Beta, Rho, Nu, Settle, ... ExerciseDate, SwapRate, Strike, OptSpec, 'OutSpec', {'Delta', 'Vega'})```
```SABRDelta = 0.7025 ```
```SABRVega = 0.0772 ```

Define the interest rate and the model parameters.

```SwapRate = 0.0002; Strike = -0.001; % -0.1% strike. Alpha = 0.01; Beta = 0.5; Rho = -0.1; Nu = 0.15; Shift = 0.005; % 0.5 percent shift Rates = 0.0002;```

Define the `Settle`, `ExerciseDate`, and `OptSpec` for the swaption.

```Settle = datenum('1-Mar-2016'); ExerciseDate = datenum('1-Mar-2017'); OptSpec = 'call';```

Define the `RateSpec` for the interest-rate curve.

```RateSpec = intenvset('ValuationDate',Settle,'StartDates',Settle, ... 'EndDates',ExerciseDate,'Rates',Rates,'Compounding',-1,'Basis', 1)```
```RateSpec = struct with fields: FinObj: 'RateSpec' Compounding: -1 Disc: 0.9998 Rates: 2.0000e-04 EndTimes: 1 StartTimes: 0 EndDates: 736755 StartDates: 736390 ValuationDate: 736390 Basis: 1 EndMonthRule: 1 ```

Calculate the `Delta` and `Vega` sensitivity values for the swaption.

```[ShiftedSABRDelta,ShiftedSABRVega] = optsensbysabr(RateSpec, ... Alpha,Beta,Rho,Nu,Settle,ExerciseDate,SwapRate,Strike,OptSpec, ... 'OutSpec',{'Delta','Vega'},'Shift',Shift)```
```ShiftedSABRDelta = 0.9628 ```
```ShiftedSABRVega = 0.0060 ```

This example shows how to use `optsensbysabr` to calculate sensitivities for an interest-rate swaption using the Normal model for the case where the `Beta` parameter is > `0` and where `Beta` = `0`.

For the case where the `Beta` parameter is > `0`, select the Normal (Bachelier) implied volatility model in `optsensbysabr`, specify the `'Model'` name-value pair to `'normal'`.

```% Define the interest rate and the model parameters. SwapRate = 0.025; Strike = 0.02; Alpha = 0.044; Beta = 0.5; Rho = -0.21; Nu = 0.31; Rates = 0.028; % Define the Settle, ExerciseDate, and OptSpec for the swaption. Settle = datenum('7-Mar-2018'); ExerciseDate = datenum('7-Mar-2020'); OptSpec = 'call'; % Define the RateSpec for the interest-rate curve. RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', ExerciseDate, 'Rates', Rates, 'Compounding', -1, 'Basis', 1); % Calculate the Delta and Vega sensitivity values for the swaption. Set the % 'Model' name-value pair to 'normal' in order to select the Normal % (Bachelier) implied volatility model. [SABRDelta, SABRVega] = optsensbysabr(RateSpec, Alpha, Beta, Rho, Nu, ... Settle, ExerciseDate, SwapRate, Strike, OptSpec, ... 'OutSpec', {'Delta', 'Vega'}, 'Model', 'normal')```
```SABRDelta = 0.7171 ```
```SABRVega = 0.0686 ```

Calculate Sensitivities for a Swaption with Normal Implied Volatility Using the Normal SABR Model

When the `Beta` parameter is set to zero, the SABR model becomes the Normal SABR model. Negative interest rates are allowed when the Normal SABR model is used in combination with Normal (Bachelier) implied volatility. To select the Normal (Bachelier) implied volatility model in `optsensbysabr`, specify the 'Model' name-value pair to 'normal'.

```% Define the interest rate and the model parameters. SwapRate = -0.00254; Strike = -0.002; Alpha = 0.0047; Beta = 0; % Set the Beta parameter to zero to use the Normal SABR model Rho = -0.20; Nu = 0.28; Rates = 0.0001; % Define the Settle, ExerciseDate, and OptSpec for the swaption. Settle = datenum('11-Apr-2018'); ExerciseDate = datenum('11-Apr-2019'); OptSpec = 'call'; % Define the RateSpec for the interest-rate curve. RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', ExerciseDate, 'Rates', Rates, 'Compounding', -1, 'Basis', 1); % Calculate the Delta and Vega sensitivity values for the swaption. Set the % 'Model' name-value pair to 'normal' in order to select the Normal % (Bachelier) implied volatility model. [SABRDelta, SABRVega] = optsensbysabr(RateSpec, Alpha, Beta, Rho, Nu, ... Settle, ExerciseDate, SwapRate, Strike, OptSpec, ... 'OutSpec', {'Delta', 'Vega'}, 'Model', 'normal')```
```SABRDelta = 0.4644 ```
```SABRVega = 0.3987 ```

## Input Arguments

collapse all

Annualized interest-rate term structure for zero-coupon bonds, specified by using the `RateSpec` obtained from `intenvset` or an `IRDataCurve` with multiple rates using the `IRDataCurve` constructor.

Data Types: `struct`

Current SABR volatility, specified as a scalar numeric.

Data Types: `double`

SABR CEV exponent, specified as a scalar numeric.

Data Types: `double`

Correlation between forward value and volatility, specified as a scalar numeric.

Data Types: `double`

Volatility of volatility, specified as a scalar numeric.

Data Types: `double`

Settlement date, specified as a scalar using a serial nonnegative date number or date character vector.

Data Types: `double` | `char`

Option exercise date, specified as a scalar using a serial nonnegative date number or date character vector.

Data Types: `double` | `char`

Current forward value of the underlying asset, specified as a scalar numeric or vector of size `NINST`-by-`1`.

Data Types: `double`

Option strike price values, specified as a scalar numeric or a vector of size `NINST`-by-`1`.

Data Types: `double`

Definition of the option, specified as `'call'` or `'put'` using a character vector.

Data Types: `char`

### 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: ```ModifiedSABRDelta = optsensbysabr(RateSpec,Alpha,Beta,Rho,Nu,Settle,ExerciseDate,ForwardValue,Strike,OptSpec,'OutSpec','ModifiedDelta')```

Sensitivity outputs, specified as the comma-separated pair consisting of `'OutSpec'` and an `NOUT`- by-`1` or `1`-by-`NOUT` cell array of character vectors with possible values of `'Delta'`, `'Vega'`, `'ModifiedDelta'`, `'ModifiedVega'`, `'dSigmadF'`, and `'dSigmadAlpha'` where:

• `'Delta'` is SABR Delta by Hagan et al. (2002).

• `'Vega'` is SABR Vega by Hagan et al. (2002).

• `'ModifiedDelta'` is SABR Delta modified by Bartlett (2006).

• `'ModifiedVega'` is SABR Vega modified by Bartlett (2006).

• `'dSigmadF'` is the sensitivity of implied volatility with respect to the underlying current forward value, F. The implied volatility type depends on `Shift` and `Model`.

• `'dSigmadAlpha'` is the sensitivity of implied volatility with respect to the `Alpha` parameter. The implied volatility type depends on `Shift` and `Model`.

Example: ```OutSpec = {'Delta','Vega','ModifiedDelta','ModifiedVega','dSigmadF','dSigmadAlpha'}```

Data Types: `char` | `cell`

Shift in decimals for the shifted SABR model (to be used with the Shifted Black model), specified as the comma-separated pair consisting of `'Shift'` and a scalar positive decimal value. Set this parameter to a positive shift in decimals to add a positive shift to `ForwardValue` and `Strike`, which effectively sets a negative lower bound for `ForwardValue` and `Strike`. For example, a `Shift` value of `0.01` is equal to a 1% positive shift.

Note

If the `Model` is set to `'normal'`, the `Shift` parameter must be `0`.

Data Types: `double`

Model used by the implied volatility sigma, specified as the comma-separated pair consisting of `'Model'` and a character vector with a value of `'lognormal'` or `'normal'`, or a string with a value of `"lognormal"` or `"normal"`.

Note

The setting for `Model` affects the interpretation of the implied volatility “sigma”. Depending on the setting for `Model`, the “sigma” has the following interpretations:

• If `Model` is `'lognormal'` (default), “sigma” can be either Implied Black (no shift) or Implied Shifted Black volatility.

• If `Model` is `'normal'`, “sigma” is the Implied Normal (Bachelier) volatility and `Shift` must be zero.

Data Types: `char` | `string`

## Output Arguments

collapse all

Sensitivity values, returned as an `NINST`-by-`1` array as defined by the `OutSpec`.

## Algorithms

In the SABR model, an option with value V is defined by the modified Black formula B, where ${\sigma }_{B}$ is the SABR implied Black volatility.

`$V=B\left(F,K,T,{\sigma }_{B}\left(\alpha ,\beta ,\rho ,\nu ,F,K,T\right)\right)$`

The `Delta` and `Vega` sensitivities under the SABR model are expressed in terms of partial derivatives in the original paper by Hagan (2002).

Later, Bartlett (2006) made better use of the model dynamics by incorporating the correlated changes between F and α

where $\frac{\partial B}{\partial F}$ is the classic Black `Delta` and $\frac{\partial B}{\partial {\sigma }_{B}}$ is the classic Black `Vega`. The Black implied volatility ${\sigma }_{B}$ is computed internally by calling `blackvolbysabr`, while its partial derivatives $\frac{\partial {\sigma }_{B}}{\partial {F}_{}}$ and $\frac{\partial {\sigma }_{B}}{\partial \alpha }$ are computed using closed-form expressions by `optsensbysabr`.

Similar expressions apply to the implied Normal volatility σN. For more information, see `normalvolbysabr`.

## References

[1] Hagan, P. S., D. Kumar. A. S. Lesniewski, and D. E. Woodward. “Managing Smile Risk.” Wilmott Magazine, 2002.

[2] Bartlett, B. “Hedging under SABR Model.” Wilmott Magazine, 2006.

## Version History

Introduced in R2014b