Skip to content
All library documents

Interpolating Treasury Yields for VIX Risk-Free Rates

Article Quant Q&A · Author: weaver

Summary

The document discusses how to obtain the two risk-free rates used in the CBOE VIX calculation for its near and next expirations. The cited methodology uses U.S. Treasury Constant Maturity Treasury yields and applies a cubic spline to estimate yields at the option expiration dates, whose maturities may fall between published Treasury tenors.

The answer describes using dated CMT curve data as the inputs and interpolating to the target expiration. It points to a package that stores or retrieves Treasury data and implements the interpolation, and illustrates the procedure with a historical date and a four-month maturity. That example demonstrates the kind of output produced, but it does not calculate the rates for the hypothetical maturities posed in the question. Exact results depend on the selected date's Treasury curve and the interpolation conventions used.

Key ideas

  • The VIX methodology uses Treasury CMT yields to derive risk-free rates for its two expiration maturities.
  • A cubic spline interpolates between published Treasury maturities when an expiration falls between them.
  • The calculation requires dated Treasury yield curve inputs and a target expiration date.
  • The example illustrates interpolation for a historical date, while current rates require the corresponding current Treasury curve.

Tags

Full text
# Calculating Risk Free Interest Rates for VIX formula


# Calculating Risk Free Interest Rates for VIX formula












This question pertains to a whitepaper published by the CBOE that explains how the VIX index is calculated.

Near the bottom of page 5 of the whitepaper, it explains that two risk-free interest rates are calculated - R1 and R2. R1 and R2 correspond with expiration dates which are in the future. T1 and T2 represent the time to these expiration dates, measured in years.

The paper reads:

> The risk-free interest rates, R1 and R2, are yields based on U.S. Treasury yield curve rates (commonly referred to as “Constant Maturity Treasury” rates or CMTs), to which a cubic spline is applied to derive yields on the expiration dates...

In the example given in the paper:

T1=0.0683486, R1=0.0305% T2=0.0882686, R2=0.0286%

I’m hoping that someone answering this question can provide more detail as to how R1 and R2 are calculated. For example, if one were to calculate R1 and R2 for T1 and T2 today, where T1= 0.0683486 and T2=0.0882686:

- What inputs would be needed?

- How would one proceed with the calculation using these inputs?

- What would the results be?

## Answer by Martin Georg Haas (score 2, accepted)

https://quant.stackexchange.com/a/70331

I have replicated the complete CBOE VIX calculation approach in my working paper No Model No Cry?. Code and documentation are available in the accompanying `R`-Package R.MFIV, where I also explain the complete VIX-procedure.

> What inputs would be needed?

The CBOE uses CMT rates which you can obtain from the U.S. Treasury Website, e.g: or use the `scrape_cmt_data` function or internal CMT dataset from `R.MFIV`:

```
library(R.MFIV)
cmt_dataset # internally saved data from U.S. Treasury
#>             Date X1.mo  X2.mo  X3.mo  X6.mo  X1.yr  X2.yr  X3.yr  X5.yr  X7.yr ...
#>    1: 1990-01-02    NA     NA 0.0783 0.0789 0.0781 0.0787 0.0790 0.0787 0.0798 ...
#>    2: 1990-01-03    NA     NA 0.0789 0.0794 0.0785 0.0794 0.0796 0.0792 0.0804 ...
#>    3: 1990-01-04    NA     NA 0.0784 0.0790 0.0782 0.0792 0.0793 0.0791 0.0802 ...
#>    4: 1990-01-05    NA     NA 0.0779 0.0785 0.0779 0.0790 0.0794 0.0792 0.0803 ...
#>    5: 1990-01-08    NA     NA 0.0779 0.0788 0.0781 0.0790 0.0795 0.0792 0.0805 ...
#>   ---                                                                         
#> 7700: 2020-10-06 8e-04 0.0009 0.0010 0.0011 0.0014 0.0014 0.0017 0.0032 0.0053 ...
#> 7701: 2020-10-07 8e-04 0.0009 0.0010 0.0012 0.0013 0.0016 0.0021 0.0035 0.0056 ...
#> 7702: 2020-10-08 9e-04 0.0009 0.0009 0.0012 0.0013 0.0013 0.0018 0.0033 0.0054 ...
#> 7703: 2020-10-09 1e-03 0.0011 0.0010 0.0012 0.0015 0.0016 0.0020 0.0034 0.0055 ...
#> 7704: 2020-10-13 9e-04 0.0009 0.0011 0.0012 0.0013 0.0016 0.0018 0.0031 0.0052 ...
```

> How would one proceed with the calculation using these inputs? What would the results be?

Usually you need to calculate the risk-free-rate for a maturity which lies in between the available ones. Simply use a cubic spline to interpolate a rate for a maturity of e.g. 4 months. Or use the `interpolate_rfr` function from `R.MFIV`.

```
library(lubridate)
library(R.MFIV)

interpolate_rfr(cmt_data = cmt_dataset,
                date = as_date("2020-01-02"),
                exp = as_date("2020-04-02"))
#> [1] 0.01540088
```

The result is then a `risk-free-rate` on a given `date` for a certain `expiration` date.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.