BGM Monte Carlo Simulation
Brace-Gatarek-Musiela (BGM) model, also called LIBOR Market Model, is a multi-factor log-normal model for pricing interest rate derivatives. The model is usually solved by Monte Carlo simulation.
Last updated
Brace-Gatarek-Musiela (BGM) model, also called LIBOR Market Model, is a multi-factor log-normal model for pricing interest rate derivatives. The model is usually solved by Monte Carlo simulation.
Last updated
BGM Monte Carlo Simulation
Brace-Gatarek-Musiela (BGM) model, also called LIBOR Market Model, is a multi-factor log-normal model for pricing interest rate derivatives. The model is usually solved by Monte Carlo simulation.
The generated simulation must satisfy certain requirements. These properties fall into two categories. First, there are no arbitrage conditions, which are to be satisfied exactly. Second, there is a requirement to reproduce input calibration data as accurately as possible with selected types of analytical parameterizations of model parameters.
The set of exactly satisfied requirements is
§ (1/nPaths) Numeraire (path,diffDate) Df (ccy=0,diffDate,forwDate) PathWeights =
Df (ccy=0,diffDate=0,forwDate)
§ (1/nPaths) Numeraire (path,diffDate) Df (ccy=1,diffDate,forwDate) FX(diffDate) PathWeights =
Df (ccy=1,diffDate=0,forwDate) FX (diffDate=0)
The requirement that is satisfied exactly in the limit of large number of the Monte Carlo paths, is
§ Logarithm of the simple rate between any two consecutive forward dates in both currencies is normally distributed
Requirements of the second type are that certain averages computed using generated simulation match as close as possible specified input values. These are used to define root mean square error (RMSE) functions to be minimized during different calibration steps. These RMSE functions are computed as
The specific set of conditions to sum over depends on particular calibration step, like volatility triangle calibration, HJM factors calibration, FX correlations calibration (to be discussed in details later). First, I describe the model Values and input values which can be used in building RMSE functions. I will give the precise formulas used below (when each calibration function is implemented)
Generally speaking, all diffusions will be considered between diffusion dates, whereas discounting will be performed between spot dates.
It is important to notice that these dates should be absolutely the same in both currencies. In particular, the spot dates are computed in the same way as those of an FX option.
Discount factors are computed as follows:
The numeraire is the product of short discount factors:
At each diffusion date, only a certain number of discount factors are provided. For the purpose of rate diffusion, one may need other discount factors. An interpolation procedure is thus necessary. Currently, we have implemented a linear interpolation of the logarithm of encompassing available maturities. Assume for instance that these maturities are in the following order:
This interpolation, which is very commonly used, means that forward spot rates are piecewise constant. It is similar to, but not quite the same as making a linear interpolation of the yields to maturity. It has been chosen because accuracy is the same and formulas are simpler.
Forward discount factors are simply ratios of spot ones:
In the sequel, forward rates (Libor and CMS rates) are computed with this interpolation technique.
RMSE = (1/nConditions)Importance (condition) (modelValue (modelParameters) – inputValue)
Diffusion is performed over a period . This period is divided into time steps . The dates are called Diffusion Dates. They may or may not be regularly spaced. The interval between two consecutive diffusion dates is called a Diffusion Step.
The model is aimed to calibrate its parameters on the market price of a list of at-the-money FX options, with increasing maturities , which we call Calibration Dates. An interval is a Calibration Interval or a Slice.
Diffusion dates are set in such a way that all calibration dates are diffusion dates. Then the diffusion step is specified on each slice. Diffusion dates are business days, approximately spaced by the diffusion step (except the last step that can be shorter). We define the indices by .
Calibration dates and diffusion dates are dates at which the FX and interest rate values are observed. Corresponding Spot Dates are denoted and .
Forward Libor rates are settled at fixed dates , called Future Dates, which do not depend on the diffusion dates and are regularly spaced by the BGM tenor (usually 3 months): (up to non business days).
For a given diffusion date and corresponding spot date there is a unique index such that:
The interval is called the Stub Interval and the rate that applies on this period is the Stub Rate.
At each diffusion date , the Spot Libor Rate applies on the interval (or, to be more precise, until the first business day greater than or equal to ). Spot Libor rate is not used in the diffusion procedure of discount factor of other maturities. It is only displayed to price exotic options with a barrier on the Libor, or similar structures.
At a given diffusion date , the curve structure is constituted of several rates (ref. https://finpricing.com/lib/IrCurveIntroduction.html):
· Short rate on
· Stub rate on
· Spot Libor on
· Future Libor on
·
·
·
· By induction:
It is known at date (and is deterministic if ).
This rate structure is duplicated at each diffusion date: one structure for the domestic currency and the other for the foreign one, specified by superscripts and .
When computed at a diffusion date other than , these rates and discount factors are random variables that are materialized as Monte-Carlo arrays. Each index corresponds to a path and expectations will be replaced by averages over all paths.
(the position of depends on the diffusion step and on the stub period). Then, for any maturity date , we check encompassing maturities, say , and we set:
Note that and is not available if .
The curve diffusion procedure computes the rates at date with respect to . First, one computes the forward Libor rate starting at from the function:
Then the BGM diffusion equation is discretized to get the spot Libor rate from its forward value and the future rates from . Let:
and be independent Gaussian random variables with standard deviation (in practice, arrays of real numbers indexed by the Monte-Carlo path index). We first write:
The drift is here stated to make and other future rates have their forward value as expectation. This is slightly wrong because of an Ito term, due to a discrepancy between the risk-neutral probability and the forward neutral one, but the error is smaller than the Monte-Carlo error and will anyway be adjusted as explained in sect. II.9 to make actualized expectation of discount factors and numeraires match exactly the initial discount factors.
The volatility triangle is an array that reflects the function . However, it is provided by the HJM sheet, with a different mesh than our original mesh . Therefore, is interpolated from values in the volatility triangle, and so is when itself is interpolated.
The volatility applies on the period to a rate that corresponds to a loan on the period , with (the spot date corresponding to ). The date can be either one of the future dates and then or it can be any interpolated date. Let be the HJM mesh (typically both and are 3 months spaced and ). We assume that for a given date , is linearly interpolated between encompassing maturities and that, as a function of , it is constant on intervals , which implies that the square of the volatility is linearly interpolated with respect to .
Suppose for instance that and . We first set:
Then is given by the formula:
In the situation where , then the second linear interpolation has to be modified, because does not exist. We set in this case:
If , this may be considered as a linear interpolation of the s-volatility.