blackvolbyrebonato

Compute Black volatility for LIBOR Market Model using Rebonato formula

Syntax

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

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)` computes the Black volatility for a swaption using a LIBOR Market Model with optional name-value pair arguments.```

Examples

collapse all

Price Swaption for LIBOR Market Model Using the Rebonato Formula

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 = datenum('11-Aug-2004'); % 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 = datenum('11-Aug-2009'); Maturity = daysadd(ExerciseDate,360*[3;4],1); Vol = blackvolbyrebonato(irdc,VolFunc,CorrMat,ExerciseDate,Maturity,'Period',1) ```
```Vol = 0.2113 0.1990 ```

Input Arguments

collapse all

`ZeroCurve` — Zero-curve for `LiborMarketModel` modelstructure

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

Data Types: `struct`

`VolFunc` — Function handle for volatilitycell array of function handles

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`

`CorrMat` — Correlation matrixvector

Correlation matrix, specified by `NumRates`-by-`NumRates`.

Data Types: `single` | `double`

`ExerciseDate` — Swaption exercise datenonnegative integer | vector of nonnegative integers | string of dates

Swaption exercise dates, specified by a `NumSwaptions`-by-`1` vector of serial date numbers or date strings.

Data Types: `single` | `double` | `cell`

`Maturity` — Swap maturity datenonnegative integer | vector of nonnegative integers | string of dates

Swap maturity dates, specified using a `NumSwaptions`-by-`1` vector of dates or date strings.

Data Types: `single` | `double` | `cell`

Name-Value Pair Arguments

Specify optional comma-separated pairs of `Name,Value` arguments. `Name` is the argument name and `Value` is the corresponding value. `Name` must appear inside single quotes (`' '`). You can specify several name and value pair arguments in any order as `Name1,Value1,...,NameN,ValueN`.

Example: `Vol = blackvolbyrebonato(irdc,VolFunc,CorrMat,ExerciseDate,Maturity,'Period',1)`

`'Period'` — Compounding frequency of curve and reset of swaptions`2` (default) | positive integer from the set `[1,2,3,4,6,12]` | vector of positive integers from the set `[1,2,3,4,6,12]`

Compounding frequency of curve and reset of swaptions, specified as 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

`outVol` — Black volatility for specified swaptionscalar | vector

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

collapse all

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.

Get trial now