STIR Futures Convexity Adjustments: Model Estimates and Market Calibration
Summary
The document discusses adjusting short-term interest rate (STIR) futures rates when calibrating a curve that also uses interest rate swaps. It outlines theoretical approaches based on short-rate models or volatility and covariance estimates, as well as methods that infer adjustments from market prices. The question emphasizes that reliable short-tenor swap quotes can be scarce, limiting direct calibration.
The accepted response argues that model-based estimates may miss supply, demand, positioning, margin, venue, and clearing basis effects. It favors calibrating a smoothed convexity curve to traded short swaps, then combining that curve with the futures curve to price swaps. The accompanying example illustrates this architecture, but its sample setup and output are not independent empirical validation. The market-driven approach also depends on liquid, credible swap inputs and an appropriate smoothing model.
Key ideas
- Mixed STIR futures and swap curve calibration requires a convexity adjustment to futures rates.
- Short-rate models and volatility or covariance heuristics estimate theoretical convexity.
- Market pricing can also reflect positioning, margin, exchange, and clearing basis effects.
- The response recommends fitting a smoothed convexity curve to traded short swaps.
- The quality of market calibration depends on available short-tenor swap quotes and model choices.
Tags
Full text
# STIR Futures convexity adjustment
# STIR Futures convexity adjustment
If you are fitting a curve which includes both STIR futures and IRS as calibrating instruments, you need to make a convexity adjustment to the STIR futures rates.
I can think of several ways to estimate the size of such an adjustment -
- Using a short-rate model (e.g. Ho-Lee, Hull-White) calibrated to market data, e.g. futures or IRS rates and/or swaptions.
- Using heuristics derived from the convexity PnL of a hedged IMM IRS vs. STIR futures portfolio, together with covariance assumptions derived from swaption prices.
- Using heuristics as above, but with covariance assumptions derived from historic forward rates (e.g. realized volatility and correlation from futures rates)
- Attempting to imply the market-implied convexity adjustment from STIR Futures and IRS rates directly.
It seems that 1. is the most common approach, although it seems much more involved than the other three approaches. Is there a good reason to prefer one of these approaches over the others, or are any of them particularly bad and should not be used?
Edit: To go into a little more detail on what I mean by finding the market-implied convexity, it seems that if you have enough calibrating instruments, you could calibrate a curve using IRS only and then read the prices of STIR futures off that curve, and the difference between those prices and the market prices would be exactly the convexity adjustment required (in the sense that using these adjustments to calibrate a curve with mixed STIR Futures/IRS input instruments, you would correctly reprice the IRS for short tenors that were not used as input instruments).
The main difficulty here is the lack of high quality market rates for short-tenor IRS, especially when you want to include many nodes in the short end of the curve.
I wondered if the inverse would be possible - to calibrate a curve using STIR Futures only and price the IRS using this curve - it feels as though it should then be possible to use the difference between the priced IRS and the market IRS rates to derive the adjustments to the STIR Futures prices that are necessary to reproduce the IRS market rates, although admittedly I have not figured out exactly how to do this.
## Answer by Attack68 (score 3, accepted)
https://quant.stackexchange.com/a/83639
`1. 2. and 3.` are theoretical using vol, covariance and models. The problem with all three of them is that they don't include supply and demand dynamics. I have experienced numerous markets, in GBP and EUR, where STIR convexity is just not based on those models. It depends upon positioning, clearing house margin, where the futures tend to trade (EUREX, ICE-liffe, CME) and what are the respective swaps clearing house basis markets. These effects can engulf the theoretical prices. I've also seen real market positive convexity prices, which are impossible theoretically.
I have always adopted approach `4` generally calibrating my convexity inputs to major traded short swaps inputs, with some simple parameter model for smoothing the convexity over the contracts.
I don't do exactly the below in practice, but it is basically the same principle with the same result.
> Setup your swaps and futures curves via convexity
```
from rateslib import * # rateslib 2.0, python 3.12
stir_curve = Curve(
nodes={dt(2000, 1, 1): 1.0, dt(2000, 2, 1): 1.0, dt(2000, 3, 1): 1.0, dt(2000, 4, 1): 1.0, dt(2000, 5, 1): 1.0, dt(2000, 6, 1): 1.0, dt(2000, 7, 1): 1.0, dt(2000, 8, 1): 1.0, dt(2000, 9, 1): 1.0, dt(2000, 10, 1): 1.0, dt(2000, 11, 1): 1.0, dt(2000, 12, 1): 1.0, dt(2001, 1, 1): 1.0}
)
convexity = Curve(
nodes={dt(2000, 1, 1): 1.0, dt(2000, 7, 1): 1.0, dt(2001, 1, 1): 1.0},
interpolation="spline",
)
swaps_curve = CompositeCurve([stir_curve, convexity])
```
> Solve your curve relative to market instruments prices
```
solver = Solver(
curves=[stir_curve, convexity, swaps_curve],
instruments=[
# STIR PROXY instruments
IRS(dt(2000, 1, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 2, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 3, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 4, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 5, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 6, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 7, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 8, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 9, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 10, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 11, 1), "1m", "A", curves=stir_curve),
IRS(dt(2000, 12, 1), "1m", "A", curves=stir_curve),
# SWAPS
IRS(dt(2000, 1, 1), "6m", "A", curves=swaps_curve),
IRS(dt(2000, 1, 1), "12m", "A", curves=swaps_curve),
],
s=[2.3, 2.2, 2.05, 1.93, 1.94, 1.98, 2.02, 2.09, 2.15, 2.25, 2.32, 2.37, 2.070, 2.146]
)
```
> Now you have an heuristic model for convexity that can be used to derive swap based market instrument prices.
```
for future in solver.instruments[:12]:
print(float(future[0].rate(curves=convexity)))
###
-0.003867533154249832
-0.004124170133401605
-0.004637442503942974
-0.0054173163792192724
-0.00646096935165833
-0.007765535595627427
-0.009244030058451792
-0.010567096097501677
-0.011607910720368153
-0.012387808800557796
-0.012909634790236879
-0.013170544225162768
```
```
swaps_curve.plot("1b", comparators=[stir_curve])
```
```
convexity.plot("1b")
```
If you are interested in STIR future risk representations consider: Building a Risk Model with STIR Futures and ConvexityShown 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.