# blackvolbyrebonato

Compute Black volatility for LIBOR Market Model using Rebonato formula

## Syntax

``outVol = blackvolbyrebonato(ZeroCurve,VolFunc,CorrMat,ExerciseDate,Maturity)``
``outVol = blackvolbyrebonato(___,Name,Value)``

## 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)}$`

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