Main Content

# blackvolbyrebonato

Compute Black volatility for LIBOR Market Model using Rebonato formula

## Description

example

outVol = blackvolbyrebonato(ZeroCurve,VolFunc,CorrMat,ExerciseDate,Maturity) computes the Black volatility for a swaption using a LIBOR Market Model.

example

outVol = blackvolbyrebonato(___,Name,Value) adds optional name-value pair arguments.

## Examples

collapse all

Define the input maturity and tenor for a LIBOR Market Model (LMM) specified by the cell array of volatility function handles, and a correlation matrix for the LMM.

Settle = datetime(2004,8,11);

% Zero Curve
CurveTimes = (1:10)';
CurveDates = daysadd(Settle,360*CurveTimes,1);

ZeroRates = [0.03 0.033 0.036 0.038 0.04 0.042 0.043 0.044 0.045 0.046]';

% Construct an IRCurve
irdc = IRDataCurve('Zero',Settle,CurveDates,ZeroRates);

LMMVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
LMMVolParams = [.3 -.02 .7 .14];

numRates = length(ZeroRates);
VolFunc(1:numRates-1) = {@(t) LMMVolFunc(LMMVolParams,t)};

Beta = .08;
CorrFunc = @(i,j,Beta) exp(-Beta*abs(i-j));
CorrMat = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),Beta);

ExerciseDate = datetime(2009,8,11);
Maturity = daysadd(ExerciseDate,360*[3;4],1);

Vol = blackvolbyrebonato(irdc,VolFunc,CorrMat,ExerciseDate,Maturity,'Period',1)
Vol = 2×1

0.2210
0.2079

## Input Arguments

collapse all

Zero-curve for the LiborMarketModel, specified using IRDataCurve or RateSpec.

Data Types: struct

Function handle for volatility, specified by a NumRates-by-1 cell array of function handles. Each function handle must take time as an input and return a scalar volatility

Data Types: cell | function_handle

Correlation matrix, specified by NumRates-by-NumRates.

Data Types: double

Swaption exercise dates, specified by a NumSwaptions-by-1 vector using a datetime array, string array, or date character vectors.

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

Swap maturity dates, specified using a NumSwaptions-by-1 vector using a datetime array, string array, or date character vectors.

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

### 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: Vol = blackvolbyrebonato(irdc,VolFunc,CorrMat,ExerciseDate,Maturity,'Period',1)

Compounding frequency of curve and reset of swaptions, specified as the comma-separated pair consisting of 'Period' and a positive integer for the values 1,2,4,6,12 in a NumSwaptions-by-1 vector.

Data Types: single | double

## Output Arguments

collapse all

Black volatility, returned as a vector for the specified swaptions.

## Algorithms

The Rebonato approximation formula relates the Black volatility for a European swaption, given a set of volatility functions and a correlation matrix

${\left({\upsilon }_{{}_{\alpha ,\beta }}^{LFM}\right)}^{2}=\sum _{i,j=\alpha +1}^{\beta }\frac{{w}_{i}\left(0\right){w}_{j}\left(0\right){F}_{i}\left(0\right){F}_{j}\left(0\right){\rho }_{i,j}}{{S}_{\alpha ,\beta }{\left(0\right)}^{2}}\underset{0}{\overset{{T}_{\alpha }}{\int }}{\sigma }_{i}\left(t\right){\sigma }_{j}\left(t\right)dt$

where:

${w}_{i}\left(t\right)=\frac{{\tau }_{i}P\left(t,{T}_{i}\right)}{\sum _{k=\alpha +1}^{\beta }{\tau }_{\kappa }P\left(t,{t}_{\kappa }\right)}$

## References

[1] Brigo, D. and F. Mercurio. Interest Rate Models - Theory and Practice. Springer Finance, 2006.

## Version History

Introduced in R2013a

expand all