NQ · LIVE ENGINE Algomyth
Markets

Contract rollover explained (and how it breaks bots)

OCT 21, 2026 · 9 MIN READ

On the third Friday of December, the Micro E-mini Nasdaq contract that thousands of traders used all quarter simply stops existing. It expires. If your chart, your data feed and your automated strategy are all still pointed at it, they are now pointed at nothing. This happens four times a year, on a schedule published years in advance, and it still catches automated traders off guard every single quarter.

The event is called contract rollover, and it is one of the few purely mechanical things in futures that can quietly break an otherwise working bot. Here is what a futures contract rollover is, why futures work this way, and how automation goes wrong when a contract rolls.

What contract rollover is

A futures contract is an agreement to settle at a set date. It does not run forever. US index futures like the E-mini and Micro E-mini Nasdaq (MNQ) and S&P (MES) expire on a quarterly cycle: March, June, September and December, on the third Friday of the expiration month. As one contract nears expiry, trading migrates to the next one out. Rollover is the act of moving your position and your attention from the expiring contract (the front month) to the new one (the back month).

Because the two contracts trade at slightly different prices, the later one reflecting the cost of carry, the handoff is not seamless. Volume drains out of the old contract over a few days and pours into the new one, usually about a week before expiration.

The one thing to remember

A futures contract expires on a fixed quarterly date. Your chart, your data feed and your strategy all have to be pointed at the same live contract on the same day, or the bot is trading a ghost. Rollover is not optional maintenance. It is a scheduled event you plan around.

The quarterly cycle, in codes

Every futures contract carries a month code and a year. Learn four letters and you can read any index future at a glance.

MonthCodeExample (Micro Nasdaq)Expires
MarchHMNQ 03-26Third Friday of March 2026
JuneMMNQ 06-26Third Friday of June 2026
SeptemberUMNQ 09-26Third Friday of September 2026
DecemberZMNQ 12-26Third Friday of December 2026

NinjaTrader 8 writes these as MM-YY, so "MNQ 12-25" is the December 2025 Micro Nasdaq. The older exchange notation puts the same contract as MNQZ25. Two spellings, one instrument. What matters is that only one of the four is the busy, liquid front month at any time, and every quarter the crown passes to the next.

Why continuous contracts exist

If contracts expire every quarter, how does anyone chart years of history or run a test over many months? The answer is a continuous contract: a stitched-together series that splices each expiring contract onto the next so the chart runs unbroken. Without it, a Nasdaq chart would be a graveyard of three-month stubs.

The stitching is not free. Because consecutive contracts trade at different absolute prices, joining them raw would leave a visible jump at every roll, a gap that never happened inside any single contract. To remove it, platforms back-adjust: they shift the older data up or down so the seam lines up. NinjaTrader 8 handles this with its merge policy, and the setting you choose there changes what your historical prices look like. The platform side is covered in NinjaTrader 8 explained, and the underlying contract details in futures and micro contracts.

A continuous chart is a convenience, not a real instrument. Nobody ever traded the seam.

Where a bot breaks at rollover

Rollover breaks automation in a handful of predictable ways. Every one of them is avoidable, and every one of them still happens.

  • Trading the dead month. The most common failure. Your strategy is still attached to the expiring contract while the volume has already left for the next one. Fills get worse, spreads widen, and after expiry the contract does not trade at all. The bot is technically running and doing nothing.
  • The phantom gap. On the roll date, a raw price series can jump from the old contract's price to the new one's. To a strategy reading those prices, that looks like an enormous move that never happened. A stop can be triggered, a signal manufactured, an indicator thrown off, all by a jump that exists only in the data stitching.
  • Split volume and lookbacks. Indicators that lean on volume, or on an average of recent bars, read garbage across the seam, because during the roll days half the volume sat in one contract and half in the other.
  • Backtest and live disagreeing. If your test ran on a back-adjusted continuous series and your live bot trades the raw front month, the two are not looking at the same prices. Levels that were exact in the test are off by the roll adjustment.

These are not exotic bugs. They are the boring, scheduled kind, which makes them the easiest to prevent and the most embarrassing to be caught by. They belong on the short list of automation mistakes that have nothing to do with the strategy and everything to do with plumbing.

See a system built around the schedule, not surprised by it

Neither Algomyth system holds overnight, so neither is ever caught in an expiry. The full mechanics are laid out step by step.

An MNQ rollover, step by step

Walk through a single December roll on the Micro Nasdaq. Say it is early December and you have been trading MNQ 12-25 all quarter.

  1. About a week before the third Friday, volume begins draining from 12-25 into 03-26. For a day or two both are busy, then the new one clearly leads.
  2. On the roll date, you move your chart, your data subscription and your strategy to MNQ 03-26. If you hold no position, this is clean. If you held one, you would close it in the old contract and reopen it in the new one, paying the spread twice.
  3. The third Friday arrives, 12-25 settles and expires, and anyone still pointed at it is watching a flat line.

Notice how much simpler step two is when there is no open position to carry. A system that never holds overnight is never long or short through a roll, so the only thing that has to roll is the data series, not a live position. Which contract to trade in the first place is its own question, covered in MNQ versus NQ.

How to handle it without drama

Rollover is a solved problem if you treat it as routine.

  • Know the dates. They are fixed: the third Friday of March, June, September and December, with the volume roll about a week before. Put them in a calendar once a year.
  • Follow the volume, not the date. Roll when the next contract's volume overtakes the current one's, which is the market telling you where trading has moved. That is usually a few days before expiry, not on it.
  • Match your live contract to your backtest. Use the same continuous-contract and merge settings live that you used to test, so the prices your strategy sees are the prices it was validated on. The testing side is in what a backtest is.
  • Confirm the front month before the session. A ten-second check that your chart shows the busy contract, not last quarter's, prevents the entire category of problems above.

The traders who get burned by rollover are almost never the ones who found it hard. They are the ones who forgot it was coming.

Frequently asked questions

How often do index futures roll over?

Four times a year, on a quarterly cycle of March, June, September and December. Each contract expires on the third Friday of its month, and the active trading volume moves to the next contract about a week before that. So in practice you roll four times a year, a little ahead of each third Friday.

What happens if my bot keeps trading the expired contract?

Before expiry it trades a contract that is emptying out, so you get wider spreads, thinner liquidity and worse fills. After expiry the contract no longer trades at all, so the strategy sits there attached to a dead series, taking no trades while appearing to run normally. Neither state is dramatic, but both quietly cost you the edge you were trying to capture.

Does a continuous contract change my backtest results?

Yes, and the way it is built matters. A back-adjusted continuous series shifts historical prices so the roll seams line up, which changes absolute price levels even though it preserves the shape of the moves. If you backtest on one merge setting and trade live on another, your live prices will not match the ones your strategy was validated on. Keep the settings identical across test and live.

Do I have to roll manually in NinjaTrader 8?

NinjaTrader 8 can build and update a continuous contract for charting and backtesting, but you still have to point your live strategy and orders at the correct front-month contract for the session. Confirming the active contract takes seconds and prevents the single most common rollover failure, which is a bot left running on last quarter's ticker.

Do the Algomyth systems hold positions through a rollover?

No. The only thing that has to be on the correct contract is the data each system reads before its window. That removes an entire class of rollover risk that affects strategies which hold positions for days or weeks at a time.

In short: US index futures expire quarterly, on the third Friday of March, June, September and December, and trading rolls to the next contract about a week before each expiry. A continuous, back-adjusted contract lets you chart and test across those seams, but it also introduces phantom gaps and price shifts that can trip a bot into trading a dead month, reacting to a jump that never happened, or seeing different prices live than it saw in the test. The fixes are boring and reliable: know the dates, follow the volume, match your live settings to your backtest, and check the front month before the session. Both Algomyth systems sidestep the worst of it by never holding overnight, so only the data has to roll, never a live position.
Sources and further reading
  • CME Group, "Micro E-mini Equity Index Futures" contract specifications and quarterly expiration calendar.
  • CME Group, "Rolling Futures Contracts" and equity index roll date methodology.
  • NinjaTrader 8, "Merge Policy" and continuous contract documentation.

Watch the engine, not the promises

Everything we write comes back to one idea: verify, then decide. The live terminal exists for exactly that.

Unlock Algomyth Live