Main Content

optsensbysabr

Calculate option sensitivities using SABR model

Description

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.

example

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 = datetime(2013,9,15); 
ExerciseDate = datetime(2015,9,15); 
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 = datetime(2016,3,1);
ExerciseDate = datetime(2017,3,1);
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 = datetime(2018,3,7);
ExerciseDate = datetime(2020,3,7);
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 = datetime(2018,4,11);
ExerciseDate = datetime(2019,4,11);
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 datetime, string, or date character vector.

To support existing code, optsensbysabr also accepts serial date numbers as inputs, but they are not recommended.

Option exercise date, specified as a scalar datetime, string, or date character vector.

To support existing code, optsensbysabr also accepts serial date numbers as inputs, but they are not recommended.

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 σB is the SABR implied Black volatility.

V=B(F,K,T,σB(α,β,ρ,ν,F,K,T))

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

SABR Delta=VF=BF+BσBσBF

SABR Vega=Vα=BσBσBα

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

Modified SABR Delta=BF+BσB(σBF+σBαρυFβ)

Modified SABR Vega=BσB(σBα+σBFρFβυ)

where BF is the classic Black Delta and BσB is the classic Black Vega. The Black implied volatility σB is computed internally by calling blackvolbysabr, while its partial derivatives σBF and σBα 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

expand all