Bootstrapping is a method used to compute zero rate curves from incremental (in maturity) non zero rate instruments.
Bootstrapping aims at finding incrementally the zero rates using:
The different instruments used to bootstrap a curve are:
In the pre-crisis era, the standard market practice was to construct a single interest rate yield curve (single curve framework). This single interest rate yield curve was constructed using liquid vanilla interest Libor rate instruments based on different tenors (it could mix 1M Libor instruments with 6M Libor instruments, …).
This was possible as every of the Libor rates were risk free.
However the crisis showed that these Libor rates were not risk free.
As shown in the second graph, the spread between a 6M ZC rate on Euribor 3M and Euribor 6M was greater than 0 (same for 12M ZC rate on Euribor 6M vs Euribor 12M).
After the crisis the spread between EURIBOR and OIS curves started to increase, reflecting the risk premium in the EURIBOR rate.
Also, after the crisis the temporal basis swap started to increase showing the greater credit risk associated with greater maturity.
This led to the creation of the multi curve framework where each rate (ESTR, Euribor 1M, Euribor 3M, Euribor 6M, Euribor 12M) induces its own yield curves and its own forward curves (forward curves that can be deducted from the spot yield curve).
Bootstraping Methodology is the same in Single-Curve Framework and Multi-Curve Framework exept that in Multi-Curve Framework the discounted rate used is not the same as the rate of the instrument. This methodology is pretty straighforward.
For each point in time (maturity):
Interest rate instrument are generally discounted using the OIS curve. Hence to bootstrap the OIS curve, the zero rate will appear in the discount factor as well as in the coupon definition.
Let \(DF(t,T) = e^{-r_{(t,T)}*(T-1)}\)
The pricing of the fixed/floating swap is:
\[\begin{cases} NPV_{fixed}(t, T) &&= N * \sum_{T_i}^{T_n=T} C_{fixed} * \Delta\left(T_{i-1}, T_i\right) * DF\left(t, T_i\right)\\ NPV_{OIS}(t, T) &&= N * \sum_{T_i}^{T_n=T} C_i * \Delta\left(T_{i-1}, T_i\right) * DF\left(t, T_i\right)\\ \end{cases}\]Where:
Note that:
\[C_i = \prod_{j=i-1}^{i}(1+f_{T_j})-1\]With:
The optimisation solves the following equation:
\[NPV_{fixed}(t, T) - NPV_{OIS}(t, T) = 0\]By finding the \(C_i\).
Finding the \(C_i\) is equivalent to finding the \(r_{(T_{i-1},T_i)}\) (equivalent to finding the product of the \(f_j\)).
The \(DF(t, T_i)\) are initially unknown and are totally linked to the \(r_{(T_{i-1},T_i)}\).
Generally we can assume a structure for the rates between two time periods \(T_i\) and \(T_{i+1}\) (for example constant rates on the period or using interpolation methods).
Using the Bootstrapping idea:
Using the obtained \(DF\) we can deduct the OIS zero rate curve.
In the multi-curve framework, the discounting curve comes from a different (already bootstraped) curve than the one currently bootstraped.
The pricing of a FRA is:
\[\begin{cases} FRA(t, T_i, T_{i+1}) &&= \left[\frac{DF(t, T_i)}{DF(t, T_{i+1})} - 1\right] \frac{1}{\Delta\left(T_i, T_{i+1}\right)} \\ &&= \left[\frac{\left(1+r_{t,T_{i+1}}*T_{i+1}\right)}{\left(1+r_{t,T_i}*T_i\right)}\right] \frac{1}{\Delta\left(T_i, T_{i+1}\right)} \end{cases}\]To use the Bootstrapping method, the \(FRA(t, T_1, T_2)\) should be quoted (observable).
Then iteratively we find the \(r_{t,T_i}\) assuming \(r_{t,T_{i-1}}\) is known (\(r{t,T_1}\) is the observable value of the rate). The \(DF\) comes from another curve (OIS curve) and are already calculated.
To bootstrap IBOR products using vanilla swaps, the idea is the same than for the Overnight rate but here the discount factor comes for another already know zero rate discounting curve (the OIS discounting curve).
\[\begin{cases} NPV_{fixed}(t, T) &&= N * \sum_{T_i}^{T_n=T} C_{fixed} * \Delta\left(T_{i-1}, T_i\right) * DF_{OIS}\left(t, T_i\right)\\ NPV_{floating}(t, T) &&= N * \sum_{T_i}^{T_n=T} C_i * \Delta\left(T_{i-1}, T_i\right) * DF_{OIS}\left(t, T_i\right)\\ \end{cases}\]Where:
Note that:
\[C_i = \prod_{j=i-1}^{i}(1+f_{T_j})-1\]With:
The optimisation solves the following equation:
\[NPV_{fixed}(t, T) - NPV_{floating}(t, T) = 0\]By finding the \(C_i\).
Finding the \(C_i\) is equivalent to finding the \(r_{(T_{i-1},T_i)}\) (equivalent to finding the product of the \(f_j\)).
The \(DF\) comes from another curve (OIS curve) and are already calculated.
Assume the OIS (ESTR) zero curve is already known.
Let see how the bootstrapping of the Euribor 6M is done.
Use the observable rates of liquid Euribor products such as EUR001W for 1 week, EUR003M for 3 months or EUR006M for 6 months.
Use the observable FRA quotations (from EUFR0AG for FRA(1M, 7M) to EUFR011F for FRA(12M, 18M)) and use the bootstrapping methodology for FRA products.
Use the observable quotation of IRS (from EUSA2 for 2 years IRS to EUSA50 for 50 years IRS) and use the bootstrapping methodology for Vanilla IRS.
When pricing multi devise products, we could simply discount each leg given the discounting curve of its currency and then transform the foreign currency leg present value in the local currency using the spot FX rate.
However a basis spread exist when discounting the foreign leg. This spread expresses the difference in liquidity (balance) and credit risk of the two currency.
From Frontier advisors document on XCCY basis Swap: “In principle, the basis should be zero if access to funding in the two currencies is equal, unless there is a higher degree of credit risk imbedded in one index relative to another. However, companies do not have the same access to funding markets in multiple currencies. Financial and credit conditions differ across markets. The cross-currency basis spread therefore represents equilibrium in the supply of and demand for funding across different currencies, adjusted for the creditworthiness of the banks that generate the underlying floating index.”
A cross-currency basis swap hence represent a floating-for-floating exchange of interest rate payments in two different currencies. Unlike other basis swaps, they also exchange notional principals.
The XCCY Basis Swaps spread is an added value payed by the foreign leg (this spread can be negative).
To bootstrap a XCCY basis swap we should know:
The pricing of a XCCY basis swap is:
\[\begin{cases} NPV_{local}(t, T) &&= N * \sum_{T_i}^{T_n=T} C_i^{local} * \Delta\left(T_{i-1}, T_i\right) * DF_{OIS}^{local}\left(t, T_i\right)\\ NPV_{foreign}(t, T) &&= FX(t) * N * \sum_{T_i}^{T_n=T} \left(C_i^{foreign} + s\right) * \Delta\left(T_{i-1}, T_i\right) * DF_{CSA}\left(t, T_i\right)\\ \end{cases}\]Where:
The optimisation solves the following equation:
\[NPV_{local}(t, T) - NPV_{foreign}(t, T) = 0\]By finding the \(DF_{CSA}\).
In the XCCY basis swap, the \(C_i^{local}\) and \(C_i^{foreign}\) are already known.
See: