13 minutes reading time (2629 words)

# Sonia OIS Relative Carry and Roll-Down in Excel. Has Bloomberg got it Wrong?

I have discussed the generic concepts of Carry and Roll-Down in relation to the expected cash flows of any financial instrument in my post titled Carry and Roll-Down of USD Interest Rate Swaps in Excel with Bloomberg Comparison.

The emphasis there was placed on their absolute (dollar) definition and a USD Libor interest rate swap was used as example.

The corresponding relative Carry and Roll-Down rates were also defined as ratios formed by dividing the absolute values with the forward DV01s and approximating formulas used by the industry - and Bloomberg in particular - were derived from first principles.

In this post I will focus only on the relative Carry and Roll-Down rates and assume they are defined by the mentioned approximating formulas as described in Bloomberg. I will further restrict my analysis on Overnight Index Swaps (OIS) and use an example of a 5-year GBP OIS on the Sonia overnight index, as shown in the diagram below:

It will quickly become apparent that the definitions are not precise in the case when the assumed horizon period is not an exact year multiple, Then one is forced to make further assumptions that lead to different numerical outputs. The exact calculations will be carried out in Excel using Bloomberg market data as of the 17th of June 2022 and spreadsheet formulas powered by the Deriscope Add-In.

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

### Relative Carry and Roll-Down Definitions for Interest Rate Swaps

In the case of interest rate swaps – of which OIS are a special case – the following links provide the definitions for the relative Carry C and Roll-Down RD, as these are used in the industry.

The definitions' starting point is the following Bloomberg screenshot:

Accordingly, the Carry C is calculated as the par swap rate from horizon date to maturity minus the par rate from swap start to maturity, in bps per annum.

Assuming today is denoted as T₀ and the horizon date as , the formal definition is:

C = rʰ - r₀

where:

r₀ is the swap's fair rate as of T₀ using the supplied yield curves, which is defined as the rate the swap's fixed leg ought to have so that its PV at T₀ equals 0

and

is the fair rate as of T₀ of a forward swap that starts at , which is defined as the rate the forward swap's fixed leg ought to have so that its PV at T₀ equals 0.

Similarly, RD is calculated as the par rate from swap start to maturity minus the par rate from start to (maturity minus horizon date), in bps per annum.

Formally:

RD = r₀ - rˢʰ

where:

rˢʰ is the fair rate as of T₀ of a shortened swap that starts at the same time as the original swap, but matures at the earlier time Tˢʰ, where Tˢʰ = Tᵐ - Δʰ

Here Tᵐ is the maturity date of the original swap and Δʰ = Tʰ - T₀ is the time interval from T₀ to the horizon date .

### Lack of Clarity in the Bloomberg's Carry Definition

The equation C = rʰ - r₀ is well defined only when the horizon date falls on a date when a swap's accrual period starts. While this is always the case with spot Libor swaps and horizon periods that are exact multiples of the Libor's tenor, it is hardly valid with spot OIS that have maturities longer than a year.

If falls on a date somewhere inside some accrual period, it is not at all clear how the forward swap "from horizon date to maturity" is defined!

The following illustration shows the two possible definition methods discussed below for a spot 5Y OIS and the case where the horizon is in 3 months from today:

A natural assumption would be that the forward swap should have cash flows that are as close as possible to those of the original spot swap that fall in the time interval after . But this would lead to a "dirty" definition of Carry, in the sense that if were even only one day before the end of an accrual period, the forward swap would have a front stub period of one day and nevertheless pay a fully accrued amount on both of its legs. This would be consistent with a "dirty" definition, but as I discussed in my earlier post, market practitioners prefer the "clean" definition, whereby the rates on the forward swap's legs start accruing from , rather than before .

It is therefore natural to assume that the forward swap is so constructed that its first accrual period on either its fixed or floating leg starts accruing on .

While this assumption suffices for the fixed leg where the rate is given, a question remains regarding the floating leg. There the rate is not given, and is not yet clear how it should be defined if the forward swap's first period does not match one of the spot swap's periods.

I believe that the rate should be the same as that referenced by the corresponding period of the spot swap, i.e., a rate that is fixed prior to . I base my preference on the economics behind the traders' interest on the notion of Carry which has to do with the PnL expected under a scenario of unwinding on their position on the spot swap. Unwinding means taking on a short position on the remaining alive portion of the original spot swap, and that short position would necessarily reference the same floating rate as that in the spot swap. Furthermore, the market does not generally publish a floating rate that starts on and has a spanning period of reduced length.

In order to deal with this lack of clarity in the Bloomberg definition, Deriscope has implemented both approaches by means of a Boolean flag named Keep Reset Dates. If that flag is set to TRUE, the reference rate of the first floating period of the forward swap is defined to equal the corresponding rate of the initial spot swap. Otherwise, it is defined so that it is fixed on and its spanning period still ends on the same date as the spanning period of the corresponding rate of the initial spot swap.

As we will see, it seems that Bloomberg follows the latter approach.

Note that in the OIS case the floating rate associated with a given period is the compounded average of the daily overnight index values observed over that period.

So, for example, Bloomberg seems to calculate the 3-month Carry of a 1-year OIS by constructing a forward OIS that starts in 3 months, has a length of 9 months and the rate on its floating leg is calculated as the average of the overnight index values observed in that 9-month period, a calculation that corresponds to Keep Reset Dates = FALSE.

On the other hand, setting Keep Reset Dates = TRUE would mean that the rate on its floating leg would be calculated as the average of the overnight index values over the whole one-year period.

As we will see below, the two methods lead to Carry outputs for a specific 5y OIS that differ by about 6 basis points.

### Lack of Clarity in the Bloomberg's Roll-Down Definition

The equation RD = r₀ - rˢʰ does not involve a forward swap since rˢʰ is defined as the rate of a shortened swap "from start to (maturity minus horizon date)", which is still a spot swap at least if the original swap were spot. At any case, the start of the shortened swap is the same as the start of the original swap and there is therefore no ambiguity on how to define the floating rate associated with its first period.

The problem here is deeper and lies with the construction of all periods,

The sentence "from start to (maturity minus horizon date)" only specifies the beginning and end of the swap but leaves open the question how the periods of the resulting swap should be put together.

The following illustration shows the two possible definition methods discussed below for a spot 5Y OIS and the case where the horizon is in 3 months from today:

According to the meaning of the Roll-Down concept, the shortened swap's schedule of cash flows ought to look to an observer standing at time T₀ the same as that of the original swap would look to an observer standing at time . This could be achieved by constructing the shortened swap by time shifting the forward swap used in the Carry calculation to the left by the amount of Tʰ - T₀. This construction would lead to a shortened swap having the same back end as the original swap but a different front end, at least when does not fall on the start of a period of the original swap.

An alternative, conceptually wrong but much simpler, construction would keep the original swap and only chop off enough of its tail to make sure its length is reduced by Tʰ - T₀. Contrary to the previous method, this one would lead to a shortened swap that may differ from the original swap only regarding its last period.

Here again Deriscope implements both approaches by means of an input parameter that may be set to either Fwd as Spot or Shorten Spot, where Spot indicates the original swap, which is often a spot swap but not necessarily so.

As we will see below, the two methods lead to practically same Roll-Down outputs for a specific 5y OIS.

### Building the Yield Curve using Market Rates as of 17 June 2022

The formula =ds(C5:D11,C13:C15) in cell C4 returns the

handle name &Curve.1 that uniquely identifies a corresponding Deriscope Object of Deriscope Type Yield Curve.

The shown OIS rates are market data read of Bloomberg as of 17 June 2022.

### Building the 5Y spot Sonia OIS

The formula =ds(C5:D12) in cell C4 returns the

handle name &Spot Ois.1, which this time refers to an object of type OIS.

It can be easily seen that it is defined on the Sonia overnight index, starts on 17 Jun 2022 and has a 5Y tenor.

### Carry Calculation using the Method 1 corresponding to Keep Reset Dates = TRUE

The Deriscope Local Function Carry expects an optional parameter represented by the input key Keep Reset Dates shown below in the highlighted cell C10.

When the Boolean value in cell D10 is set to TRUE, the formula =ds(C5:D12) in cell C4 returns 0.94. This is the relative Carry in basis points for the shown horizon date of 21 Sep 2022.

It will be instructive to also calculate the Carry by applying the formula C = rʰ - r₀. For that, I would first need to construct the appropriate forward swap that starts on 21 Sep 2022. To that end I can use the Deriscope Local Function Change Dates, as shown below. As usually, the meaning of the various inputs can be read off the wizard by selecting the cells containing the corresponding keys.

Before proceeding with the fair rate calculation of this forward swap, it is important to ensure the constructed swap truly represents the intended forward swap.

The cash flows can be produced by applying the Deriscope Local Function Price on the forward swap with its Output input parameter set to CashFlows.

Below are the produced cash flow tables for the spot and forward swap:

The highlighted cells refer to the affected dates.

The first period of the forward swap starts accruing on 21 Sep 2022, but the corresponding floating rate references the same period as that referenced by the floating rate in the spot swap, namely from 17 Jun 2022 to 19 Jun 2023.

This is exactly what one would expect by the setting Keep Reset Dates = TRUE.

Now I can calculate the fair rates of the two swaps by applying the Deriscope Local Function Fair Rate.

For example, below in cell I5 is shown the formula =ds("Fair Rate",I4,"Disc Crv=",curve!\$C\$4) that returns the fair rate of the original spot swap.

Next comes the cell I7 that returns the fair rate of the forward swap.

Finally, the formula =(I7-I5)*10000 in cell I8 returns the difference of the two rates as 0.94 bps, which exactly matches the Carry returned directly by the Deriscope formula.

The corresponding Bloomberg values are shown in the screenshot below, although it should be noted that these values have been computed at some time after the market OIS rates were captured for the purpose of building the discounting curve. This explains why the Bloomberg spot rate does not exactly match the Deriscope spot rate.

We observe that the Bloomberg Carry is 7.50 bp and thus higher than the Deriscope 0.94 bp by 6.56 bp.

### Carry Calculation using the Method 2 corresponding to Keep Reset Dates = FALSE

The sheet that explores this case has a similar structure to the one analyzed already so that I can skip the details. It is as follows:

Now Bloomberg is very close to Deriscope, with the difference attributed to the different timing involved in the Bloomberg carry calculation and the capture of the market rates. As already mentioned, the 0.80 bp spot rate discrepancy is attributed to this timing difference.

The proximity of the results indicates that Bloomberg applies the logic associated with Keep Reset Dates = FALSE.

As before, the columns H and I are used for the manual replication of the direct Deriscope result in cell C4. This time, the forward swap is constructed using the Deriscope Local Function Clone and differs from the previous forward swap in that the floating rate of its first period references an interval that starts on the horizon date of 21 Sep 2022.

The difference between the two forward swaps is clear by inspecting their cash flows, shown below. Please pay attention to the yellow-highlighted cells.

### Roll-Down Calculation using the Method 1 corresponding to Fwd as Spot

Without further ado, below is the sheet that computes the swap's relative Roll-Down under the Fwd as Spot assumption. The difference between Deriscope and Bloomberg is only -0.44 bp.

### Roll-Down Calculation using the Method 2 corresponding to Shorten Spot

Below is the sheet that computes the swap's relative Roll-Down under the Shorten Spot assumption. The difference between Deriscope and Bloomberg is only -0.51 bp.

We also observe that this method produces an almost identical result with that of the previous method. But this could be only due to the given structure of the OIS as well as the shape of the discounting yield curve.