Four times a year, every NQ strategy running in NinjaTrader 8 has to move from one contract to the next. The chart you trade on says something like NQ 09-26 today and needs to say NQ 12-26 after the roll. Most traders handle this by clicking a button in the Database Management window and assuming the job is done. For manual charts, it mostly is. For an automated strategy, it is not.
We have watched strategies sit on an expired contract for days, printing no signals, while the trader wondered why the bot "stopped working." We have also seen backtests change shape after a roll because the merge policy quietly rewrote the price history underneath them. This guide walks through how rollover actually works in NinjaTrader 8, using NinjaTrader's own documentation, and gives you a repeatable checklist for rolling a live strategy without surprises.
Why Futures Have to Roll at All
A futures contract has an expiration date. The E-mini Nasdaq-100 (NQ) expires quarterly, in March, June, September and December, with the last trading day on the third Friday of the contract month, according to NinjaTrader's NQ contract specification page. NQ is financially settled, and the same page notes there is no first notice date for it.
Here is what that means in practice for 2026. The September contract (09-26) had its last trading day on Friday, September 18, 2026. The December contract (12-26) is now the one that matters, and its third Friday falls on December 18, 2026. As expiration gets closer, trading activity moves to the next contract month, so the contract you want your strategy on changes before the old one actually stops trading.
A continuous stock chart never has this problem. A futures strategy has to deal with it every quarter, and every piece of NinjaTrader that touches an instrument (charts, the SuperDOM, instrument lists, and strategies) has to be pointed at the new expiry.
How NinjaTrader 8 Decides When to Roll
NinjaTrader stores a list of contract months and rollover dates for each futures instrument. You can see it by opening Control Center, Tools, Instruments, editing an instrument, and looking at the Contract months section. The help guide says this section "shows the contract months with associated rollover dates," and that the information "is automatically downloaded from the NinjaTrader server whenever you are connected to your live data feed or the Simulated Data Feed."
One detail in that page is worth reading twice: "The rollover date is the date to roll into the selected contract month and NOT out of." When you look at the row for December, the date beside it is the day NinjaTrader considers December to be the active month. It is not the date September stops trading.
The batch rollover tool uses those dates. According to the NinjaTrader 8 help guide, "A contract is eligible to be rolled when today's date is greater then or equal to the rollover date defined for the instruments next contract month." Before that date, the instrument will not show up as eligible in the rollover grid.
The Batch Rollover: What It Updates
The standard way to roll is the batch rollover in Database Management. The steps from the help guide are short:
- In the Control Center, open the Tools menu and select Database Management.
- The Rollover futures instruments grid "will show each instrument that is eligible to be rolled over."
- Click Rollover. Any instrument "with a check mark in the Update column will be updated to the contract month in the New Expiry column."
NinjaTrader describes the scope of that action this way: "Rolling over futures instruments will update the expiry of the instruments across all instrument lists and windows using the instruments on all open workspaces."
Two limits are hiding in that sentence. First, it only touches open workspaces. A workspace you did not have open at the time keeps the old expiry. Second, the help guide adds that "these changes on workspaces will need to be saved should you wish to preserve them." Roll, forget to save the workspace, restart the platform the next morning, and you are back on the old contract.
The Part That Breaks Automated Traders
The rollover help page contains one line that every algo trader should know by heart:
"NinjaScript strategies are not rolled forward and must be manually rolled over." (NinjaTrader 8 Help Guide, Rolling Over Futures Contracts)
Your charts move to December. Your strategy does not. A strategy running from the Strategies tab, or one whose instrument was set when it was enabled, is still pointed at September. Once September stops trading, that strategy receives no new market data, so it takes no new trades. It does not throw a dramatic error. It just goes quiet.
If your bot suddenly stopped trading around the third week of March, June, September or December, rollover is the first thing to check. It is one of the most common causes on our list in why your NinjaTrader 8 strategy stopped trading.
What Happens to an Open Position During the Roll
Rolling the instrument does not move a position. If your strategy is long one NQ September contract, changing the chart to December leaves that September position exactly where it was. It is still a September contract in your account, and NQ is financially settled at expiration.
The bigger issue is what happens when you restart the strategy on the new contract. A NinjaTrader strategy tracks its own Strategy Position, separate from your Account Position, and the Start Behavior setting decides how the two get reconciled at startup. The help guide lists the options:
- Wait until flat: the default, described as "the least disruptive in terms of handling your current Account Position."
- Immediately submit: "should only be used when you are sure your Account Position is the way you want it to be in relation to the Strategy Position prior to strategy start."
- Adopt account position: for when you want the strategy "to disregard the historical virtual Strategy Position and to start in the same position as the real-world Account Position."
- Both "Wait until flat" and "Immediately submit" also come in a "synchronize account" variant that can submit orders to line up the account with the strategy.
Put a strategy on a new contract with the wrong combination and it can calculate a historical position you do not hold, or try to sync an account that is sitting in a different contract month entirely. The clean answer for almost everyone is simple: roll while flat. Pick a time between trades, confirm the account shows no open position in either contract month, then roll.
A hypothetical example
Suppose you run a 5-minute NQ strategy with "Immediately submit, synchronize account" as the start behavior. On roll day you disable it, switch the instrument to December, and enable it again. The strategy processes its historical bars on the December data, decides it "should" be long from a signal three bars ago, and sends an order to match. You never chose that entry. It came from replayed history on a contract you just switched to. Rolling while flat, with "Wait until flat," avoids this entire class of problem.
Merge Policy: The Rollover Setting That Changes Your Backtest
The second half of rollover is historical data. When you load a year of NQ on a chart, that year spans four or five contract months. The Merge Policy setting, found in the Market data category of Tools, Options, decides how NinjaTrader stitches them together. There are three choices:
| Merge Policy | What NinjaTrader loads | What it means for a backtest |
|---|---|---|
| MergeBackAdjusted | Data from each expiry month in the requested range, with offset values used to back adjust older prices to match the next front month | Smooth continuous history with no roll gaps, but older prices are shifted away from where they actually traded |
| MergeNonBackAdjusted | Data from each expiry month, with offsets NOT used, so history stays as raw data | Real historical prices, but a price jump can appear at each roll that a strategy may read as a move |
| DoNotMerge | Data from ONLY the selected expiry month | Clean single contract, but a long lookback may cover less time than you asked for |
The offset is the piece most people never look at. NinjaTrader's instrument documentation says "the Offset value is used to connect the last value of a contract month with the next one." It will try to download offsets from the data server, and "if they do not exist on the data server, they will be calculated locally," which requires historical data for both the old and new contract near the rollover date. Local calculation only happens with Merge Back Adjusted selected.
Why this matters for strategy results
Back adjustment changes the prices on every older bar so they line up with the current contract. That is what makes the chart continuous, and it also means the older bars no longer show the prices that actually traded at the time. A strategy that trades round numbers, a fixed price level, or a percentage of price can produce different signals on back adjusted data than it did live.
The other side of the tradeoff is the gap. On non-back-adjusted data, the step between the old and new contract shows up as a price jump on the roll bar. A breakout or volatility filter can treat that jump as a real move and fire a trade that never could have happened.
Neither choice is universally correct. The rule we use: know which one your backtests ran on, and do not change it halfway through a research project. If you optimized with Merge Back Adjusted and then validate with Do Not Merge, the two runs are testing different price histories. Our post on walk-forward optimization in NinjaTrader 8 covers why consistent test conditions matter so much, and why your NinjaTrader 8 backtest doesn't match live trading covers the other data traps.
A Rollover Checklist for Automated Strategies
This is the process we follow every quarter. It takes a few minutes and removes most of the rollover surprises we have seen.
- Check the date. Open Tools, Instruments, edit NQ (and MNQ, ES or anything else you trade) and look at the rollover date on the next contract month. Put it in your calendar.
- Pick a flat moment. Do the roll between sessions or when every strategy on that instrument is flat. Confirm in the Accounts and Positions tabs that nothing is open in the expiring month.
- Disable the strategies that trade the instrument you are rolling.
- Run the batch rollover in Tools, Database Management. Check the Update column and the New Expiry column before you click.
- Save every workspace the rollover changed. Then open any workspace that was closed and roll its charts by hand.
- Re-point each strategy. For chart-based strategies, confirm the chart shows the new expiry. For strategies launched from the Strategies tab, remove and re-add them on the new contract with the same parameters. Screenshot your parameters first.
- Check the Start Behavior before you enable. For most traders, "Wait until flat" is the safe choice after a roll.
- Reload historical data on each chart so indicators calculate on the merged series you expect.
- Watch the first signal. Confirm the strategy is receiving data on the new contract and that its first order shows the new expiry in the Orders tab.
If you run the platform on a remote machine, do the roll there, not on a copy of the workspace on your laptop. A strategy only follows the workspace it lives in. We covered remote setups in do you need a VPS to run a NinjaTrader 8 algo.
Run an NQ strategy that is already built for this
NQ Ultra is a ready-to-run NinjaTrader 8 strategy for NQ futures, built and tested for prop firm accounts. You still roll the contract each quarter. You do not have to rebuild the strategy to do it.
Get NQ Ultra on WhopRollover Mistakes We See Every Quarter
- Assuming the batch rollover moved the strategy. NinjaTrader says in plain words that strategies are not rolled forward.
- Rolling with an open position. The position stays in the old month while the strategy starts fresh on the new one. Roll flat.
- Not saving the workspace. The roll lives in memory until you save. A restart undoes it.
- Forgetting closed workspaces. Only open workspaces get updated. Any workspace you open later still points at the old month.
- Mixing merge policies between tests. A backtest on back adjusted data and one on raw data are not the same test.
- Trusting the roll bar. On non-back-adjusted charts, the step at the roll can look like a real breakout. Check what your strategy did around each roll in the backtest trade list.
- Only checking NQ. Every futures instrument you trade has its own contract months and rollover dates. Look up each one in the Instruments window.
Rollover is not glamorous, and it will never show up in a strategy's feature list. It is still one of the few maintenance jobs that can silently turn a working algo into one that does nothing, or worse, one that takes a trade you never intended. Put the date on your calendar, roll while flat, re-point every strategy by hand, and save the workspace. Four times a year, that is the whole job.