1
$\begingroup$

CME has a gold future expiration calendar: http://www.cmegroup.com/trading/metals/precious/gold_product_calendar_futures.html , which lists future contracts and their corresponding expiration date.

Is it possible to calculate the expiration dates by a set of rules, without reading this calendar page?

$\endgroup$
  • 2
    $\begingroup$ I believe the Settlement date is the "minus three" business day of the month. Last business day of the month is -1, day before that -2, and day before is -3. Business day means weekday (Mon-Fri) but excluding business holidays. (For example May has 31 days, but Monday 2017 May 29 is Holiday, that is why Settlement date is Friday May 26). $\endgroup$ – noob2 Mar 9 '17 at 12:45
  • $\begingroup$ Thanks! But what about months? No contracts for July, September, and November in 2017. It appears 2018 has an inconsistent schedule. $\endgroup$ – He Shiming Mar 9 '17 at 12:59
  • 2
    $\begingroup$ There are rules for this as well, although I don't know the details. The rules are of the form "at time T such and such contracts must exist". As time moves forward new contracts are introduced. That is why the far months are sparse, those contracts do not exist yet, will be introduced later. My guess is that when March expires the JULY contract will be introduced, and will expire July 27, 2017 But that is only MY GUESS. I don;t know the details of the rules, sorry. $\endgroup$ – noob2 Mar 9 '17 at 13:11
  • $\begingroup$ @noob2: You should put these comments into an answer. $\endgroup$ – Gordon Mar 9 '17 at 16:58
  • $\begingroup$ It's tricky calculating these for all different futures types, although maybe you have a reason to. For a historical backtest, I rolled my futures in advance of expiry. For real (algorithmic) trading, and particularly for calculate carry trades, I estimated the days to expiry if 'close enough' was sufficient, or you could actually read the expiry from the API in Interactive Brokers. $\endgroup$ – cjm2671 Sep 21 '18 at 21:14
1
$\begingroup$

I believe the Settlement date is the "minus three" business day of the month. Last business day of the month is -1, day before that -2, and day before is -3. Business day means weekday (Mon-Fri) but excluding business holidays. (For example May has 31 days, but Monday 2017 May 29 is Holiday, that is why Settlement date is Friday May 26). It can be calculated by a program but you may need to enter, at the start of each year, a list of holidays for the coming year.

But what about months? No contracts for July, September, and November in 2017. It appears 2018 has an inconsistent schedule.

There are rules for this as well, although I don't know the details. The rules are of the form "at time T such and such contracts must exist". As time moves forward new contracts are introduced. That is why the far months are sparse, those contracts do not exist yet, will be introduced later. My guess is that when March expires the JULY contract will be introduced, and will expire July 27, 2017 But that is only MY GUESS. I don't know the details of the rules, sorry. You can probably find them somewhere on the Cmegroup web site.

$\endgroup$
5
$\begingroup$

The rules are pretty straightforward. I keep this rulebook on my office computer as a reference but it can be found on the CME website in the NYMEX area I believe. Below is straight from the rulebook. http://www.cmegroup.com/rulebook/NYMEX/

  1. TRADING SPECIFICATIONS Trading in Gold futures is regularly conducted in the following months: (1) the current calendar month; (2) the next two calendar months; (3) each February, April, August and October falling within a 23-month period beginning with the current calendar month; and (4) each June and
    December falling within a 72- month period beginning with the current calendar month . The
    number of months open for trading at a given time shall be determined by the Exchange.
$\endgroup$
1
$\begingroup$

Futures contracts become physically deliverable or cash settled upon expiration. Gold is a physically deliverable contract.

There two two very important dates for traders:

First notice date - this is the date on which the counterparty to your contract can request delivery. Unless you are involved in the physical production/consumption of the commodity, most traders avoid this trading period. There is a lot of additional paperwork and costs required to avoid physical delivery and most futures brokers will automatically keep you away from this period anyway.

Last trading date - this is the last date on which trading can occur on the exchange.

Where do you find this information? It's in the contract specifications and trading rules published by the exchange.

For gold, the first notice date is determined by: http://www.cmegroup.com/rulebook/NYMEX/1/7.pdf "The first day during which an Assignment Notification can be issued shall be the last business day of the month prior to the delivery month and shall be referred to as “First Notice Day”

In the case of Gold, last trading date is determined by: http://www.cmegroup.com/rulebook/NYMEX/1a/113.pdf "No trades in Gold futures deliverable in the current month shall be made after the third last business day of that month"

To determine business days you'll need a trading holiday calendar.

It's possible to do all of this algorithmically - however, it's quite a job doing this across many markets with differing holidays.

CME publish their holiday schedule here: http://www.cmegroup.com/tools-information/holiday-calendar.html

Note that trading holidays vary by market. For example, some futures will trade on certain holidays.

$\endgroup$
0
$\begingroup$

Try this in Excel. If any date for a given month is in cell A5, then

=DATE(YEAR(A5),MONTH(A5),14+CHOOSE(WEEKDAY(DATE(YEAR(A5),MONTH(A5),1)),6,5,4,3,2,1,7))

should give you the expiration date for the month, i.e. the third Friday of the month.

By convention at CME, rollover is eight (8) calendar days before expiration. (see https://www.cmegroup.com/trading/equity-index/rolldates.html)

This formula does not account for holidays. No guarantees but it has worked for me.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.