Pricing of Cross-Currency Collateralized Swaps using OIS vs non-OIS Discounting: The Mexican case.
Last week I described the unique problem faced by interest rate swap traders when the collateral is kept in a currency different than the one where the swaps are denominated. You may want to visit that post for details on how the appropriate discounting (basis) curve in the Mexican case is constructed out of several market rates that include the USD OIS rates and the USD vs MXN cross-currency basis swap spreads.
In the current post, I go one step further and use the thus constructed implied OIS curve to calculate the price and DV01 of specific deals. This step requires the prior construction of the forecasting curve for the floating index, which in the Mexican case is the TIIE28.
I also repeat the pricing using the old fashioned single-curve bootstrapping and compare the results.
Building the Implied Discounting (Basis) Curve
The following diagram illustrates the steps involved in the creation of the implied discounting Yield Curve object MXN-DISC, as explained in my above-mentioned post.
The colored boxes represent constructed Deriscope objects of type Yield Curve and the curly brackets point to collections of market rates.
The above diagram indicates the construction of the three Yield Curve objects USD-OIS, USD-3M and USD-1M prior to constructing the final MXN-DISC.
For technical reasons, the two rightmost curly bracketed market rates, i.e. the TIIE28 swap rates and the USD vs MXN XCCY basis spreads, are being first transformed into the respective Yield Curve objects MXN-TIIE and USD-MXN, which are then fed into the construction of the final MXN-DISC curve.
The following diagram shows the dependency upon the various curves:
Since I am going to calculate the flat DV01 of various deals with respect to the TIIE28 swap rates, I display below the part of the spreadsheet where the MXN-TIIE curve is created. More details are available in my previous post.
Building the Implied Forecasting Curve
In order to price an MXN-denominated interest rate swap I will also need the forecasting curve, the job of which is to calculate the forward TIIE28 rates that are in turn needed to calculate the cash flow amounts paid in the floating leg of the swap.
Given an already constructed discount curve, the construction of the forecasting curve is a straightforward process, fully explained in my post about Exogenously Bootstrapping the Discounting and Forecasting USD Libor curve.
This process involves the bootstrapping over the market-quoted TIIE28 swap rates and normally requires the explicit input of those rates.
But since these rates are already part of the already constructed MXN-TIIE Yield Curve object, I may use the convenient Deriscope type ImpYC Forc that represents the collection of the needed market rates through a corresponding Yield Curve object rather than the rates directly.
Below is the section of my spreadsheet dedicated in the construction of the forecasting curve:
The Yield Curve object in cell C4 with the handle name &MXN-FORC.1, is produced by the formula =ds(C5:D15).
The important entry in this formula is the pair Market Data= &ImpForcData.1.
The shown value &ImpForcData.1 in cell D11 is the handle name of the object created by the formula =ds(F5:G9) in cell F4.
The pair Type= ImpYC Forc indicates that the latter object is of the mentioned type ImpYC Forc.
It is created with the input of the two already constructed curves &MXN-TIIE.1 and &MXN-DISC.1, the first of which contains the market TIIE28 swap rates.
Diagrammatically, this construction of the forecasting curve looks as:
Note that the above diagram hides the dependencies already embedded inside the MXN-DISC curve. Replacing the latter curve with its own dependency diagram shown above, the full dependency diagram of the forecasting curve MXN-FORC looks as follows:
Effect of Curve Bootstrapping Choice on the Pricing of the 5-year Market MXN Swap
Now I would like to use the discounting and forecasting curves towards pricing the same 5-year MXN swap, the rate of which was used as input in the creation of the MXN-TIIE curve. If the curves have been bootstrapped correctly, the price of that swap should be very close to zero.
I start by setting up the formula that creates an interest rate swap as an object of type Vanilla IRS, as shown below.
More details can be found on my post about creating a custom fixed-to-floating swap.
The entries that make this swap equaling the 5-year swap traded in the market are explained below.
Note that several text inputs are prefixed by the symbol %, which indicates these are handle names of trivial objects.
Start Date= 23/05/2019 because the trade date is May 22, 2019 and a spot swap owes to start one business day later due to the T+1 convention.
Tenor= %65L, where L is the Lunar month symbol denoting a period of 4 weeks.
Step= %1L because each period in both legs of a Mexican swap has a length of 4 weeks.
Calendar= %MX, where MX is the Deriscope (QuantLib also) code for the Mexican calendar.
DayCount= %ACT/360 because both legs follow the ACT/360 daycount convention.
Index= %MXNTiie|1L because the index of the floating leg is the TIIE over a 28-day period. The latter period is denoted by the suffix 1L after the separator symbol |.
Fixed Rate(%)= 7.87 because the market rate of the 5-year swap is 7.87%. The value is entered as 7.87 but is interpreted as 0.0787 due to the suffix (%) added to the key Fixed Rate.
Now I can set up the pricing formula in the usual way as shown below.
Note I use the two curves &MXN-DISC.1 and &MXN-FORC.1 as input next to the key Markets=. This is crucial as it instructs Deriscope to calculate the forward TIIE rates using the &MXN-FORC.1 curve, while discounting all cash flows using the &MXN-DISC.1 curve!
The pricing output is returned in cell M4 by the formula =ds(M5:N9,M10:O10).
It is not returned as a number but as an object with handle name &PriceDual.1 due to the input Output= Full, which instructs Deriscope to return an object that contains the price of the swap together with additional information.
I have used Handle= PriceDual as a reminder that this object contains the pricing output when "dual" curve bootstrapping is used.
The contents of that object are visible in the taskpane on the right because the cell M4 is currently selected.
There one can see the Value= -0.000007, which is practically zero and agrees with the expected result since this swap is a par swap.
But one can also see the NPV of the fixed and floating leg.
The pricing with single curve bootstrapping is achieved with essentially the same formula apart from supplying only one curve – the curve &MXN-TIIE.1 - as input next to the key Market=, as shown below:
I have used Handle= PriceMono as a reminder that this object contains the pricing output when single (mono) curve bootstrapping is used.
Note, the swap price is calculated as -0.0001113, which is essentially equal to zero, as it should.
But the value of each leg is now different.
Let me setup a small table that shows on the spreadsheet these output numbers:
The formula bar shows the formula I used in cell T5 in order to extract the price from the &PriceDual.1 object.
The remaining cells contain similar formulas, except of the last column where the differences Mono - Dual are displayed.
The important result here is that the Mono (single curve) pricing undervalues the fixed leg by 396,072 MXN while overvalues the floating leg by the same amount.
Given the swap's notional of 100,000,000 MXN, this represents a leg misvaluation of 396,072 / 100,000,000 = 0.0039 or 39 bps.
This represents a significant difference between the two pricing approaches that stays hidden when one views only the NPV of the swap because the contributions from each leg cancel each other.
It can be explained by the fact that the single curve bootstrapping leads to higher zero rates and therefore lower discount factors that reflect the higher risk premium of the curve &MXN-TIIE.1 as opposed to that of &MXN-DISC.1.
It follows that the fixed leg's cash flows are discounted with lower discount factors under Mono pricing than under Dual pricing => Mono NPV of fixed leg < Dual NPV of fixed leg.
The reverse should happen on the floating leg in order for the swap NPV to stay zero.
More specifically, in absolute terms its Mono NPV is reduced by the same amount – i.e. 396,072 – in relation to its Dual NPV, primarily due to the lower Mono discount factors. In general, there is also an effect on the floating cash flows from the different forecasting curve &MXN-FORC.1, which typically – but not necessarily – implies slightly higher forward rates than the Mono curve &MXN-TIIE.1.
Effect of Multi-Curve Bootstrapping on the NPV and Flat DV01 of Spot Swaps
The swap studied above was a par swap destined to have zero NPV under any bootstrapping model.
The situation is different with regard to its flat DV01, i.e. the change in its NPV when the underlying market TIIE28 swap rates increase by one bp. You may want to look at this section on how to get the flat DV01 in Excel.
It is also different with non-par spot swaps, i.e. swaps with a fixed rate different than the corresponding market rate.
In order to investigate the effect of the bootstrapping choice in the later cases, I set up the table below, where the NPV and flat DV01 for various OTM (Out of The Money), ATM (At The Money) and ITM (In The Money) swaps are calculated.
I consider only the 2Y, 5Y, 10Y, 20Y and 30Y maturities with all swaps being receivers – i.e. the fixed leg is received – and the OTM swaps are defined by its fixed rate being 1% below par and the ITM swaps are defined by its fixed rate being 1% above par.
I do not consider here the valuation of forward starting swaps because of the uncertainty regarding the par forward swap rate, as this depends on the bootstrapping choice.
I also do not consider the valuation of swaps with cash flow dates not coinciding with those of the market swaps, such as swaps that have started in the past. The reason is that such swaps are affected much more by the curve interpolation scheme than the curve bootstrapping choice. It is a very interesting subject that affects the valuation of books of existing trades and will be handled in a subsequent post.
The table's 15 rows are divided in three bands, each with 5 rows.
The upper band corresponds to the OTM swaps, the middle band to the ATM swaps and the lower band to the ITM swaps.
The two columns titled NPV Error and DV01 Error contain the overvaluation implied by the wrong Mono curve approach.
Specifically, the NPV Error column contains the differences NPV Mono – NPV Dual.
I notice that the error changes sign as I move from the OTM band to the ITM band but keeps the same absolute value.
In fact, the error has an initial exponential and later linear dependence on maturity, as the following graph of the NPV Error of the OTM band betrays:
The DV01 Error column contain the differences DV01 Mono – DV01 Dual.
Here we observe an error that is significant even for ATM swaps, of which the graph is displayed below:
I would now like to find out the dependence of both the NPV and flat DV01 on the moneyness of a specific swap maturity.
The next table displays the NPV and flat DV01 of a spot 30Y swap when I vary the swap's fixed rate within a ±1% of the market rate of 8.58%, i.e. from 7.58% to 9.58%:
This table reveals a perfect linear dependence of both the NPV and flat DV01 on the fixed rate of the swap.
It is fascinating to observe how the error in NPV increases from 0 MXN to almost 1 million MXN as the gap between the swap's fixed rate and the corresponding market rate reaches 1%. This amount represents 1% (100 bps) of the swap's notional of 100 million MXN!
On the contrary, we observe that the error in DV01 undergoes a much less dramatic variation.
Below are the two charts showing the dependence of the NPV Error and DV01 Error on the swap's fixed rate:
Effect of Multi-Curve Bootstrapping on the Forward Swap Rate
Finally, I turn my attention on the very important question:
How does the curve bootstrapping choice affect the forward swap rate?
In order to answer this question, I build a series of 20 forward starting swaps, all with an underlying swap tenor of 10 years.
The first swap starts in 1 year, the second in 2 years and so on until the 20th swap that starts in 20 years.
Since I am valuing Mexican swaps, the "year" in fact represents a period of 13 Lunar months, i.e. exactly 52 weeks.
Below is the final table:
The last column contains the difference Fwd Rate Mono – Fwd Rate Dual, expressed in basis points
It represents the overvaluation of the forward swap rate as a function of the time to the forward start date due to applying (wrongly) a single curve bootstrapping.
We observe an almost linear dependence of that error on the time to the forward start date.
The following two charts depict the table relations:
Full Risk, Cash Flows, Trading Blotter and Book Management
The NPV of an MXN fixed-to-floating swap depends on the market rates of the MXN curve MXN-TIIE, the three USD curves USD-OIS, USD-3M, USD-1M and the USD vs MXN cross currency curve USD-MXN.
Traders are interested primarily in the DV01 risk against the MXN-TIIE curve, both flat and by-bucket.
While I have only dealt with the flat DV01 so far, it is also straightforward to get the maturity-dependent DV01 as explained at this section on displaying the by-bucket DV01 of USD swaps.
The exact same formulas can be used to compute and display the DV01 against the market rates of the remaining four curves by substituting the referenced curve objects as needed.
The detailed cash flows paid through the life of the MXN swap can be inspected as described here.
Finally, it is possible to set up a spreadsheet that deals with hundreds or even thousands of MXN swaps, on a row-by-row basis, as described in my post about trade blotters and book management of USD interest rate swaps.
Click on IntRateSwapMXNPriceDualMono.xlsx to download the spreadsheet produced with the above steps.
Feel free to contact me if you want to share any thoughts with regard to this product or if you want to request any particular features. Contact info and social media links are available at my web site https://www.deriscope.com