Contract specifications, front month and expiry rules
A table of 53 CME, CBOT, NYMEX and COMEX futures gives each root its tick size, multiplier, tick value, valid delivery months and expiry rule. From it the app computes the front-month contract, keeps the expiring contract listed during the roll window, and refreshes an expired saved symbol on open.
Senzoukria · Documentation · Updated September 2026
Where to find it
- Where
- Symbol picker (Rithmic): front month per root, plus the expiring contract while the roll window is open; SIM trading P&L; Automatic backtest "Point value ($)"
- Roll buffer
- 8 days before the last trading day for third-Friday contracts (indices), 4 days for every other rule
- Symbol format
- Root + month code + last digit of the year, e.g. MNQZ6; month codes F G H J K M N Q U V X Z
- Unknown root
- Falls back to tick 0.25, multiplier 1, third-Friday rule, no valid months
What it does
Each specification carries root, name, category (indices, treasuries, currencies, metals, energy, grains, livestock, crypto), exchange, tick size, multiplier, tick value (= tick size × multiplier), valid months and an expiry rule. Examples: ES 0.25 × 50 = $12.50, MNQ 0.25 × 2 = $0.50, CL 0.01 × 1,000 = $10, GC 0.1 × 100 = $10, ZN 0.015625 × 1,000 = $15.625, 6E 0.00005 × 125,000 = $6.25, MBT 5 × 0.1 = $0.50.
The front month is the first valid delivery month whose last trading day minus the roll buffer is still in the future, scanning up to 36 months ahead. During the buffer the previous contract stays in the list, carrying its contract-month label and an "exp DD/MM" badge whose tooltip reads "Last trading day {date}"; it drops out the day after that date. Simulated P&L is (price difference) × multiplier × quantity.
When a saved symbol (last symbol in the footprint, heatmap preference, preflight probe symbol, journal-to-replay link) is past its last trading day, refreshIfExpired replaces it by the current front month of the same root. The year digit is resolved to the closest decade, so a 6 read in 2026 means 2026, not 2036.
Expiry rules
| Rule | Contracts | Date computed |
|---|---|---|
| third-friday | ES, MES, NQ, MNQ, RTY, M2K, YM, MYM | Third Friday of the delivery month; roll buffer 8 days |
| fx-third-wednesday | 6E, 6B, 6J, 6A, 6C, 6S, 6N, M6E, M6B | Two business days before the third Wednesday |
| treasury-first-notice | ZB, UB, TN, ZN, ZF, ZT | Last business day of the month before delivery (first notice day, earlier than the official LTD) |
| crude-25th | CL, MCL, QM | Three business days before the 25th of the month preceding delivery (25th snapped back to a business day) |
| natgas-month-start | NG, MNG | Three business days before the first day of the delivery month |
| refined-month-end | RB, HO | Last business day of the month before delivery |
| brent-2m | BZ | Last business day two months before delivery |
| comex-metal | GC, MGC, SI, SIL, HG, MHG, PL, PA | Two business days before the last business day of the month preceding delivery (first-notice roll, earlier than the official LTD) |
| grain-15th | ZC, ZS, ZW, ZL, ZM, ZO, ZR | Business day before the 15th of the delivery month |
| cattle-month-end / hogs-10th-bd / feeder-last-thursday | LE / HE / GF | Last business day of the month / 10th business day / last Thursday |
| crypto-last-friday | BTC, MBT, ETH, MET | Last Friday of the delivery month |
How to use it
- Pick the front month from the symbol picker; during the roll window both contracts are listed so you can stay on the one still carrying volume.
- In the Automatic backtest, "Point value ($)" defaults to 2 (MNQ); set it to the multiplier of the contract you test (ES 50, NQ 20, CL 1,000).
- Contract-month labels such as "Dec 2026" come from the same computation as the symbol; if a label looks wrong, the root's valid months or rule is the place to check.
Limits and pitfalls
- Expiry rules approximate exchange calendars with weekday arithmetic; exchange holidays are not modelled, so a computed date can be off by one around holidays. For treasuries and COMEX metals the date is deliberately the first-notice roll, which is earlier than the official last trading day: past first notice a metal contract is deliverable and liquidity collapses.
- The roll buffer is a display choice (8 or 4 days), not the volume roll; check the actual traded volume before switching.
- Roots absent from the table get generic defaults (tick 0.25, multiplier 1); P&L and point value are then wrong until the spec is added.
- Contract details are used for simulation and display; broker-side contract definitions and margins are not read from here.
Related pages
- Bars cache and history pipeline
- Filling long history for backtests
- Glossary: front month contract
- Glossary: contract specifications
- Glossary: point value
This page in other languages
Frequently asked questions
- Why does the picker show two ES contracts in March?
- From 8 days before the third Friday through that Friday itself, the expiring contract stays listed next to the new front month, with an "exp DD/MM" badge. It drops out the day after its last trading day.
- What happens to my last symbol after expiry?
- On the next open it is replaced by the current front month of the same root and saved again; the preflight probe and journal replay links do the same.
- Where does the point value in the backtest come from?
- It is a field you set, defaulting to 2 for MNQ; the contract table gives the multiplier to enter for other roots.