Libor Cessation: Price and Risk of existing Vanilla Interest Rate Swaps by applying the ISDA Fallback Protocol
Today, the sum of the notional amounts of all financial products referencing the USD LIBOR is estimated to $400 trillion. These are diverse products ranging from derivatives such as interest rate swaps to consumer products such as student loans and home mortgages. About $170 trillion are in outstanding swaps, of which one third have maturities beyond 2021 according to the Wall Street Journal.
Every day at around 11:55 a.m. London time the ICE Benchmark Administration (IBA) - an authorized administrator owned by the Intercontinental Exchange (ICE) and regulated and supervised by the Financial Conduct Authority (FCA) – publishes 35 rates (referred as LIBORs) that represent interbank lending interest rates on 5 currencies and 7 tenors. The currencies are USD, EUR, GBP, CHF, JPY and the tenors are 1D, 1W, 1M, 2M, 3M, 6M, 12M. All 7 tenors apply to each currency.
According to this document by FCA as of March 5, 2021, all these rates will either not be published or cease to be representative after either December 31, 2021 or June 30, 2023. A published rate is deemed as not being representative if it is not derived according to the current poll practices but is instead calculated in a synthetic manner according to rules specified in the above link. Due to its synthetic production a non-representative LIBOR rate does not reflect the economic relations as expected by existing financial contracts that reference that rate and cannot therefore be used as an automatic replacement for LIBOR in existing contracts. It is made nevertheless available by ISDA because it can be useful as a last resort if both counterparties agree to using it.
The following table shows the cessation date for each currency and tenor, which is defined as the date, immediately after which the respective LIBOR is either not published or published only as non-representative in a synthetic manner.
This cessation timetable obviously poses a challenge on the pricing and risk management of existing swaps that mature beyond the applicable cessation date. Such swaps oblige the contracting parties to exchange future floating payments of which the amount must be determined by the fixing of the referenced LIBOR on the appropriate LIBOR reset date. Quite logically, no such amount can be determined on the absence of a LIBOR fixing as of that date.
To resolve this huge problem, the International Swaps and Derivatives Association (ISDA) has run public consultations with various analytics providers in the hope of coming up with a synthetic rate that resembles from an economic viewpoint the missing LIBOR and may therefore be a suitable candidate for its replacement.
Bloomberg Index Services Limited (BISL) was selected as the vendor to calculate and distribute the replacement rate. Its ISDA-approved methodology is described in the IBOR Fallback Rate Adjustments Rule Book published on April 22, 2020 and most recently updated on October 8, 2020.
So, with the help of Bloomberg, ISDA put together the ISDA 2020 IBOR Fallbacks Protocol published on October 23, 2020 that serves as a legal document that - when adopted by the counterparties to any LIBOR-referencing financial contract - governs the LIBOR-linked cash exchanges between them. Note the counterparties are not obliged to adopt the ISDA protocol. They may agree to some other protocol or even resolve the matter in court.
In this post I will explain the main features of the Bloomberg Fallback rules and then I will apply them in a concrete case of a 5-year Interest Rate Swap referencing the 3-month USD LIBOR. In particular, the price and DV01 of this swap will be computed in Excel with the help of the Deriscope Add-In and its cash flows before and after the cessation date will be presented.
Recommended for Deriscope starters: The Overview and Quick Guide pages.
The ISDA-Bloomberg IBOR Fallback Rules
The rules outlined in the IBOR Fallback Rate Adjustments Rule Book concern not only LIBOR but all similar rates administered by various financial authorities around the world and referred collectively as IBOR.
The replacement rate is referred as fallback rate F and given by:
F = mR + s
where m is a fixed multiplier constructed as the ratio DCᴸ/DCᴿ where:
DCᴸ is the denominator of the daycount convention of the ibor rate, eg 360
DCᴿ is the denominator of the daycount convention of the overnight rate, eg 360
and s is a fixed constant known as Spread Adjustment and must be supplied as exogenous input.
Note the product mR is referred in Bloomberg as Adjusted Reference Rate.
The rate R is a properly defined term overnight rate, i.e. the appropriate risk-free overnight rate (RFR) compounded over a time interval constructed from L according to the streps outlined further below.
For example, if L is a USD LIBOR of any tenor, the rate R is the compounded SOFR.
The conversion formula is displayed in the ISDA document as:
Let Tᴸ the time when the ibor rate L is set, which is usually 2 business days before the respective accrual period.
The following diagram is taken from Bloomberg and may assist in understanding the steps below. The time Tᴸ corresponds to day 16:
Step 1:
Define the time T' as:
T' = Tᴸ + Δᴿ
where Δᴿ is a fixed number of business days according to the overnight index calendar and referred by Bloomberg as Reference Spot Lag.
In the diagram, T' equals the day 20.
Step 2:
Define the time T₁ as:
T₁ = T' - Δᴼ
where Δᴼ is a fixed number of business days according to the overnight index calendar and referred by Bloomberg as Offset Lag.
In the diagram, T₁ equals the day 15.
Step 3:
Define the time T₂ as:
T₂ = T₁ + Δᴸ
where Δᴸ is the tenor of the ibor rate according to the ibor index calendar and ibor index date bump convention.
In the diagram, T₂ equals the day 15 at the far right.
Step 4:
Define the time Tᴾ as:
Tᴾ = T₂ + Δᴾ
where Δᴾ is a fixed number of business days according to a given payment calendar and referred as Payment Lag
In the diagram, Tᴾ equals the day 17 at the far right
Step 5 (conditional and iterated):
If T is equal or less than the actual payment time associated with the initial ibor cash flow, the constructed times T₁ and T₂ are the times that define the beginning and end of the overnight index accrual period.
Otherwise, T₁ is shifted backwards by one business day according to the overnight index calendar and the end time T₂ is recalculated.
This step is repeated until the produced time Tᴾ is equal or less than the actual payment time of the referenced cash flow.
Setup of the 5-Year Vanilla Interest Rate Swap
The following image indicates the cash flow dates of a 5-year receiver swap referencing the 3-month LIBOR entered on 06-Oct-2021. It can be seen that the floating payment on 09-Oct-2023 is expected to be linked to the SOFR rather than the LIBOR index, due to the cessation of the latter after the 30-Jun-2023.
The following image shows the spreadsheet formulas that produce the above swap as an object of the Deriscope type Vanilla IRS.
These formulas have been mostly automatically created by the Deriscope wizard, as described in my previous posts, for example in this post about interest rate swaps.
The red-colored cells contain the Deriscope formulas. Details on the meaning of the shown colors and the syntax of the Deriscope spreadsheet formulas can be found in this introductory post about the spreadsheet Deriscope function.
The main formula here is the =ds(V5:W13) in cell V4 that returns the handle name &IrsOrig.1 which acts a naming tag of an Excel memory object that holds the exact specifications of a 5-year swap.
I have only manually edited a few inputs so that the produced swap is a Receiver swap that references the USD 3-month LIBOR, starts accruing on 08-Oct-2021 - which is in two business days from today's date of 06-Oct-2021 - matures in 5 years, has a fixed rate of 1.0654% and a notional of 10,000 USD. This particular notional was chosen for convenience because all prices and DV01s can be then ascribed the Basis Point meaning. For that reason, all such output numbers will be displayed only up to 2 decimal points, which then corresponds to a displayed precision of 0.01 BP.
While the remaining conventions have been generated by the wizard, I took the liberty to also insert the optional key-value pair Handle= IrsOrig so that the produced object is displayed as &IrsOrig.1 for easier reference, since this is my original IRS before applying the fallback conversion.Setup of the Risk-Free Discounting Curve
To price this swap, I will need a yield curve that will supply the discount factors by which all future cash flow amounts must be multiplied in order to compute the swap's NPV as the sum of the discounted cash flows.
The following shows the spreadsheet formulas that create such a curve out of OIS market rates captured from TWEB on October 6, 2021.
The main formula here is the =ds(F5:G11,F12:F14) in cell F4 that returns the handle name &DiscCurve.1 which points to the discounting curve as an object of the Deriscope type Yield Curve.
As before, these formulas have been initially created by the Deriscope wizard. For more details, you may want to visit my earlier post on OIS curve generation.
Setup of the Forecasting Curve
To price this swap, I will also need a yield curve that can be used to "forecast" the floating LIBORs. In reality, no forecasting is involved. Only the forward 3-month rates need to be calculated because the amounts of the floating leg's cash flows are computed from these rates.
The following shows the spreadsheet formulas that create such a curve out of market FRAs and 3-month USD LIBOR IRS rates captured from TWEB on October 6, 2021.
The main formula here is the =ds(F5:G11,F12:F14) in cell Q4 that returns the handle name &ForcCurve.1 which points to the forecasting curve as an object of the Deriscope type Yield Curve.
For more details, you may want to visit my earlier post on curve generation out of deposit, futures and swaps and curve generation out of FRAs.
Pricing the Swap (without the Fallback assumption)
Next, I want to calculate the price and risk of my swap by pretending it is contractually bound to receive fixed and pay 3-month LIBOR over a 5-year course, even though I know that no 3-month LIBOR will be available beyond June 30, 2023.
To be fair, the Fallback assumption is already embedded in the shown market rates of those swaps that are long enough to bear exposure on the transition date of June 30, 2023. For example, the shown 5Y rate of 1.0654% is the mid quote of traders who are – more or less – aware of the fact that they enter into contracts that reference LIBOR only during the first two years and switch to referencing SOFR during the remaining 3 years. In fact, the swap dealers do not need to take into account the intricacies of this switch. They still trade the swaps as if they were based on LIBOR for the … eternity! So far, the only people who seem to worry about the LIBOR -> SOFR switch are those in the back office, who must make sure that their pricing systems adopt to a non-LIBOR environment after the switch date. But right now, all existing and newly booked trades can be priced with the conventional methods since the LIBOR is still available.
As we will see, there is a catch with this – currently widespread – approach.
While all spot traded swaps are priced correctly due to the fact that the market swap rates incorporate the information about the future LIBOR cessation, the off-market swaps and the DV01s are being mispriced! I will show you why in the next chapters, where I attempt to calculate my 5-year swap after having converted it according to the ISDA protocol.
Below is the spreadsheet formula that produces the swap's NPV of 0.00 in cell AB4:
The main formula here is the =ds(AA7:AB12,AA14:AB16) in cell AA6 that returns the handle name &VanIRSVal_AA6:2.1 which points to an object of the Deriscope type Variant that holds not only the swap's NPV, but also its cash flows and bucket risk.
For more details on this basic IRS pricing, you may want to visit my earlier post on calculating the price of a custom USD fixed-to-floating swap.
I notice the swap's price comes out as 0.00 in cell AB4. This is a good thing and shows that the pricing is self-consistent. It must be 0 because the swap's fixed rate had been intentionally set to 1.0654% in cell W11 to match with the 5-year market swap rate.
Viewing the Cash Flows (without the Fallback assumption)
It would be instructive to see the cash flows so that we can compare them against those resulting from the Fallback treatment later.
They are shown below.
More details about its production can be found at the cash flows section of the above link.
Note the Ibor index is paid every 3 months until the swap maturity on 08-Oct-2026.
Under #Fixing is shown the date when the index is set.
Under #FixingStart and #FixingEnd are shown the two dates that define the accruing period over which the index is defined. Note this period is not necessarily the same as that over which the final floating rate accrues its interest to be paid through the floating leg. The latter period is defined by the two dates shown under #AccrStart and #AccrEnd.
Viewing the Bucket DV01s (without the Fallback assumption)
Finally, I display on the spreadsheet the bucket DV01 sensitivity relative to both the market LIBOR swap rates and the market OIS rates.
More details about its production can be found at the Bucket DV01 section of the above link.
Up to the chosen display precision of two decimals, the DV01s wrt the OIS rates is zero. The only material risk exposure comes from the LIBOR swap rates, where a peak of -4.92 is observed for the 5Y market swap rate. Nothing surprising so far!
Setup of the 5-Year Vanilla Interest Rate Swap with the Fallback assumption
My task now is to create a swap that pays LIBOR as long as the index fixing date is not later than June 30, 2023 and the ISDA-converted Fallback rate afterwards.
Deriscope provides a function called Fallback that transforms the original swap into a new swap, the index of which is LIBOR during the first two years and an appropriately constructed OI term rate afterwards.
Below is the spreadsheet formula that carries out this conversion:
The formula here is the =ds(C5:D9) in cell C4 that returns the handle name &IrsFback.1 which points to the new swap object.
Before examining the contents of this new swap, I observe that the function Fallback takes as input the key-value pair:
Model= &FbackModel.1
The object &FbackModel.1 is created in cell H4 by a formula that takes as input the two key-value pairs:
Market Params= &FbackSpreads.1
Spec Table=&FbackConvs.1
The associated values appear green because they are simple links to handle names of objects that are created by separate formulas elsewhere in the spreadsheet.
The Spec Table value &FbackConvs.1 is an object that contains all ISDA conventions that are needed to carry out the conversion. It is created by the spreadsheet formula below:
As shown, the table includes several ibor indices on the left column.
Exceptionally, the USDLibor appears three times because of the need to apply different cessation dates on different LIBOR tenors.
The two rows at the bottom refer to the 1-week and 2-month LIBORs that will exist only until 31-Dec-2021. The row with the blank Tenor entry applies to all remaining LIBOR tenors and is associated with the cessation date of 30-Jun-2023. It is marked in red because this is the only row that is relevant to our current Fallback conversion.
The Market Params value &FbackSpreads.1 is an object that contains the applicable Bloomberg Spread Adjustments. It is created by the spreadsheet formula below:
The two left columns are similar with the corresponding columns of the previous table.
The right column bears the spread adjustments. Deriscope initializes this column with 0s. It is up to the user to set the correct spreads here, presumably by reading them off Bloomberg.
For the same reasons as above, only the red-marked row is relevant in the current conversion.
Pricing the Swap (with the Fallback assumption)
Next, I want to calculate the price and risk of this converted swap using the same discounting and forecasting curves as with my original swap.
Below is the pricing formula with the NPV result of 1.40 showing in cell X4.
The result is not 0 as before, but perhaps this is due to the unnatural zero setting for the spread adjustment.
It turns out the reason is different!
While the spread adjustment setting in the input table does make a huge difference on the NPV, a simple goal-seek method solves for the very small value of a spread adjustment of only 0.436 BPs that brings the NPV down to zero. Clearly the Bloomberg-published spread adjustment must be much bigger than half a basis point!
A bit of thinking makes me realize that the current floating leg that pays for almost 3 years the compounded SOFR must cost far less than the original leg that paid only LIBOR. Since the swap is Receiver, its NPV ought to be much higher than the 0 NPV of the original swap!
In fact, the market rates I used for OIS and LIBOR swaps display a spread of about 20 bps. Assuming a spread adjustment of 0, the difference between the two NPVs should be more than 3 times this amount, or 60 bps.
So, something else must be wrong!
The culprit lies with the spreadsheet formula above, to which is given as input a market collection represented by the object &MktSet.1 that contains the two curves &DiscCurve.1 and &ForcCurve.1. These two curves have been defined with the following key-value pairs:
&DiscCurve.1 è Issuer= %Riskless Issuer
&ForcCurve.1 è Issuer=%Risky Issuer
The Issuer input in the definition of a yield curve is very important because it tells the Deriscope Pricer for what purposes the curve should be used.
By default, the Deriscope Pricer grabs the riskless curve whenever it needs to discount a cash flow and the risky curve whenever it needs to calculate ("forecast") a forward rate.
Here is where the problem occurred. The floating payments well after 30-Jun-2023 are linked to the compounded forward SOFR. According to the stated default rule, the Deriscope Pricer tries to calculate the forward SOFR using the risky curve, which is the &ForcCurve.1. This is clearly wrong because the correct curve for this purpose should be the OIS curve, i.e. the &DiscCurve.1.
Now that I know the problem, the solution is very simple. All I need is tell Deriscope that it should override its default rule and use the curve &DiscCurve.1 for computing the forward SOFR. The vehicle for doing so is to create an object of type Yld Crv Pick Model and pass it as input to the pricing function.
Now the swap is calculated correctly and displays a reasonable NPV of 82.03.
This NPV could be now brought down to 0 with the appropriate spread adjustment input.
For example, the following image shows how the NPV drops to almost 0 when the spread adjustment is set to 26 bps.
Viewing the Cash Flows (with the Fallback assumption)
It is very interesting to see the cash flows so that I can verify they link to SOFR and have the correct dates as expected by the ISDA rules.
They are shown below.
In a green frame is shown the first original LIBOR flow that has been converted to the corresponding compounded SOFR flow.
At the #Spread column at the far right, the spread adjustment of 26 bps is also shown.
Viewing the Bucket DV01s (with the Fallback assumption)
Below is the bucket DV01 sensitivity of the converted swap relative to both the market LIBOR swap rates and the market OIS rates.
The above DV01 profile is significantly different from that of the original swap. In a way, it should not come as a surprise that the new swap experiences an exposure peak at the 5Y OIS rate and is insensitive to the 5Y LIBOR Swap rate.
An important missing ingredient in the current treatment is the way the LIBOR curve is constructed. The market swaps being used as calibration instruments are assumed to pay LIBOR until their maturity. This is clearly suboptimal, as they should be treated on the same footing as the ISDA-converted swap here.
In fact, had I built my LIBOR curve taking into account the cessation date in the same way I did with the converted swap, the DV01 profile would have looked practically identical to that of the original swap, i.e. its LIBOR DV01 would have exhibited a peak at 5Y and its OIS DV01 would have been almost flat 0!
The justification for the above theoretical prediction is as follows:
The market LIBOR swap rates for tenors > 2Y are not fully independent from the corresponding market OIS rates. In fact, the respective LIBOR swaps are derivatives of the more primitive underlying OIS rates and spread adjustments. The ideal approach therefore would be to quote the LIBOR swap rates only for the short tenors < 2Y and quote only the corresponding spread adjustments for tenors > 2Y. The current practice of quoting the LIBOR swap rates for tenors > 2Y amounts to quoting – approximately - the … sum of the corresponding OIS rates and spread adjustments.
The last sentence provides the hint to understanding the stated prediction about the DV01 outcome.
Take for example the LIBOR swap 5Y DV01. This is defined as the NPV change caused by a change of the market LIBOR swap 5Y rate by 1 bp, assuming all other rates fixed. The latter means that also the OIS 5Y rate stays fixed. But the LIBOR swap 5Y rate is – approximately – the sum of the OIS 5Y rate and its corresponding spread adjustment. This means that the assumed 1bp shift translates wholly to a shift of the spread adjustment. Therefore, even though the OIS 5Y rate stays fixed, the spread adjustment changes. This causes the NPV to change and as a result a significant DV01 shows up!
A similar argument explains why the OIS 5Y DV01 should be close to 0.
This is defined as the NPV change caused by a change of the market OIS 5Y rate by 1 bp, assuming all other rates fixed. The latter means that also the LIBOR swap 5Y rate stays fixed. But the LIBOR swap 5Y rate is – approximately – the sum of the OIS 5Y rate and its corresponding spread adjustment. This means that the spread adjustment must go down to cancel out the shifted OIS 5Y rate. The NPV should thus get two mutually cancelling contributions. One from the higher OIS 5Y rate and an offsetting one from the lower spread adjustment. The result would be a very small – or almost zero – overall change.
The above analysis indicates that the current traders' practice of relying on the LIBOR swap DV01s calculated with the traditional methods that do not take into account the LIBOR cessation date and the corresponding spread adjustment must be sound from a practical perspective.
For now, at least, the most important practical application of this Fallback treatment pertains to the pricing and risk management of books with existing positions pegged to LIBOR after the respective LIBOR cessation date. Then the situation is much simpler because the Bloomberg spread adjustment will be known and constant and the converted swap will involve only term OI rates, except perhaps of the first future cash flow that might be pegged on the still existing past LIBOR fixing.
My next post on Libor Transition Impact on Portfolio Pricing will deal with the important subject of pricing and risk managing portfolios of existing trades after the cessation date of the applicable IBOR indices.
Click on IntRateSwapFallback.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