IMM Dates and Eurodollar Futures Rate Helpers
Summary
The document explains why a QuantLib futures rate helper rejects a Monday date supplied for a Eurodollar contract when configured to use IMM dates. IMM dates are Wednesdays, and the dates given in the question are therefore not valid IMM dates. QuantLib provides methods to check whether a date is an IMM date and to find the next one.
The key contract detail is that the Monday before the third Wednesday is generally the last trading day, while the underlying three-month rate period starts on the third Wednesday. The helper’s date argument should represent that rate start date, not the earlier trading date. The examples show the supplied September, December, and March dates mapping to their respective IMM Wednesdays. This guidance addresses date selection for the described contract convention; it does not cover other futures contracts or calendar variations.
Key ideas
- IMM dates fall on Wednesdays, so Monday trading dates fail an IMM date check.
- Eurodollar futures generally stop trading two business days before the IMM date.
- The futures helper date should be the underlying rate period’s start date, which is the third Wednesday.
- QuantLib can check IMM dates and calculate the next IMM date.
Tags
Full text
# How to make futuresHelpers in Quantlib work with monday settlement day not IMM?
# How to make futuresHelpers in Quantlib work with monday settlement day not IMM?
My EuroDollar futures have monday of third week expiration and settlement date from CME exchange how ever Python Quantlib doesn't seem to like it. Anyway I can get away with IMM check?
futures = { ql.Date(14,9,2020): 99.700, ql.Date(14,12,2020): 99.67, ql.Date(15,3,2021): 99.76 }
futuresHelpers = [ ql.FuturesRateHelper(ql.QuoteHandle(futures[d]), d, months, calendar, ql.ModifiedFollowing, True, dayCounter, ql.QuoteHandle(ql.SimpleQuote(0.0)), ql.Futures.IMM) for d in futures.keys() ]
error message:
RuntimeError: September 14th, 2020 is not a valid IMM date
## Answer by David Duarte (score 2)
https://quant.stackexchange.com/a/55177
IMM dates are actually Wednesdays and not Mondays...
There are several methods to work with IMM dates in the ql.IMM class.
To check if dates are IMM dates, use `ql.IMM.isIMMdate(date, mainCycle=True)`
In your example:
```
futures = { ql.Date(14,9,2020): 99.700, ql.Date(14,12,2020): 99.67, ql.Date(15,3,2021): 99.76 }
list(map(ql.IMM.isIMMdate, futures.keys()))
```
[False, False, False]
You can also check what is the next IMM date:
```
list(map(ql.IMM.nextDate, futures.keys()))
```
[Date(16,9,2020), Date(16,12,2020), Date(17,3,2021)]
## Answer by Soheel Haque-Everding (score 1)
https://quant.stackexchange.com/a/68980
Eurodollars futures contracts stop trading on 2 business days (usually a Monday) before the third Wednesday of the expiry month.
BUT that is not the date that the reference 3 month interest rate, 3M USD Libor, starts. That date is actually the third Wednesday itself, which is the IMM date (see contract specification here)
So in your example, liborStartDate (which is "d", the second argument to FuturesRatesHelper() in your example) should be set to 16 Sep 2020, not 14 Sep 2020. This is why you get an error.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.