# 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.

### Table Of Contents

- Building the Implied Discounting (Basis) Curve
- Building the Implied Forecasting Curve
- Effect of Curve Bootstrapping Choice on the Pricing of the 5-year Market MXN Swap
- Effect of Multi-Curve Bootstrapping on the NPV and Flat DV01 of Spot Swaps
- Effect of Multi-Curve Bootstrapping on the Forward Swap Rate
- Full Risk, Cash Flows, Trading Blotter and Book Management
- Download Spreadsheet

Recommended for Deriscope starters: The Overview and Quick Guide pages.

Get a free Deriscope activation code that enables you to run the accompanied spreadsheet!

### 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 f*lat 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 Erro**r 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 20^{th} *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