Execution & Instruments

How to Backtest Futures Contract Rollovers

A futures backtest must separate adjusted continuous prices from the dated contract, rollover rule and costs an order would actually face.

A continuous futures chart can make a long history readable, but it is not itself a contract you could have traded. To test a futures strategy honestly, keep the signal series, the actual dated contract, the rollover decision and its costs separate.

First decide what the continuous series means

A continuous series stitches successive expiries together. Vendors can adjust earlier prices to reduce the visible gap at a contract change. TradingView documents a back-adjustment method based on the difference between the old and new contracts near the switch; its adjustment is optional (TradingView: back-adjustment for continuous futures). That makes a chart easier to analyse, but the transformed history is not a record of fills at those adjusted prices.

Write down the exact instrument and data convention before testing: contract family, expiry selection, switch rule, adjustment method, session and price field. “Front month” is not a complete rule if your implementation switches on volume, open interest, a calendar date or a provider-specific mapping.

Keep signal prices and tradable contracts distinct

QuantConnect’s futures documentation distinguishes a continuous symbol from its currently mapped dated contract: the continuous series can be adjusted, while orders must be placed on a specific contract. It also exposes mapping and normalization choices, and rollover events identify the outgoing and incoming symbols (QuantConnect: Futures universes and continuous contracts). These are implementation details of that platform, not universal defaults for every backtester.

Use a small audit table for every simulated roll:

CheckRecord
SelectionWhich dated expiry is active, and what rule selects the next one?
Signal inputRaw contract price or adjusted continuous series?
Order handlingHow are positions closed, opened or carried across the switch?
CostsWhich fees, bid/ask assumptions and slippage apply to both legs?
TimingWhen does the roll decision occur relative to the bar and session?

If the strategy calculates indicators on adjusted history, make sure its simulated orders still use the corresponding dated contract and executable price. Otherwise, the test can quietly mix a synthetic signal level with a different contract’s fills.

Run tests that expose the roll assumption

Compare a baseline with at least one alternative mapping rule or roll date, keeping all other settings fixed. Inspect trades near each switch, not just the final equity curve. Check for duplicate entries, positions left in an expiring contract, missing bars, and a signal that changes because the back-adjusted history was revised.

Then compare results with and without the roll-related costs your data and broker model can support. If your platform cannot model an important part of the handoff, label that limitation and avoid treating the result as a live-fill estimate. For a broader reproducibility checklist, see how to verify a cTrader backtest and how we document backtest costs.

Make the roll rule part of the strategy

Save the contract-selection rule, adjustment setting, roll timestamps and per-roll trade record with the backtest. If changing one of them changes the conclusion, that sensitivity belongs in the report. A smooth joined chart cannot prove the rollover was handled correctly; the dated-contract ledger can.

Published Oct 28, 2026 · realbacktesting · Educational content and market commentary — not financial advice. Trading involves risk; past performance does not guarantee future results.