summary: futures contracts expire quarterly, and edgeful rolls automatically when the new contract's volume exceeds the current front-month's volume. here's how to manage rollovers in your live trading and what to expect in your reports.
what contract rollovers are
futures contracts have expiration dates. NQ, ES, YM, RTY — they all trade front-month contracts that expire quarterly. when a contract approaches expiration, trading volume naturally shifts to the next quarter's contract.
that shift is called a rollover. edgeful has to track which contract has the liquidity, or your data becomes outdated and your trades get rejected.
if your algo just went silent and you need the quick fix → see contract rollover: why your algo silently stopped trading.
how edgeful handles rollovers (volume-based)
edgeful doesn't roll on calendar dates. it rolls when the upcoming contract's trading volume exceeds the current front-month contract's volume — that's the moment the market itself is rolling.
this is critical: edgeful rolls based on volume, not calendar dates. when you're looking at September YM and the December contract suddenly sees higher volume, edgeful automatically switches to December. the timing shifts based on where the buyers and sellers actually are.
why this matters — liquidity is everything in futures. when volume shifts to the next contract, that's where the real price action happens. spreads tighten, fills are clean, slippage is minimal. if edgeful kept reporting data on an expired or illiquid contract, your numbers would be wrong.
in practice, edgeful's data may roll a day or two before the official CME last trade date, since volume often migrates early. if you see your reports shift and it catches you off guard, that's why.
continuous contracts vs. current (front-month) contracts
TradingView gives you 2 ways to chart a futures instrument: the continuous contract (e.g., ES1!, NQ1!, GC1!) and the specific front-month contract (e.g., ESZ25, NQZ25, GCZ25).
continuous contracts aggregate data across multiple contract expirations, giving you a longer, unbroken price history. they automatically adjust for rollovers, eliminating gaps and artificial price jumps. this makes them ideal for backtesting — you're testing on clean data that reflects real price action without rollover artifacts.
current (front-month) contracts are the actual tradable instruments. your broker executes orders on the front-month contract because that's where the liquidity is.
which contract to use for live trading — by broker
this is the most important call you make when you set up an alert. which symbol you reference depends entirely on which broker you're connected to:
Tradovate → current (front-month) contract (e.g.,
NQM2026). do not use continuous. Tradovate routes to a specific contract and the continuous symbol will mismatch during rolls, causing rejected orders.NinjaTrader → current (front-month) contract (e.g.,
NQM2026). same reasoning as Tradovate.ProjectX (Topstep, TopstepX, and all ProjectX-based prop firms) → continuous contract (e.g.,
NQ1!,ES1!,MGC1!). ProjectX requires the continuous symbol for live trading. do not use the specific front-month — it won't route correctly.
rule of thumb: Tradovate / NinjaTrader = front-month. ProjectX = continuous.
for backtesting — regardless of broker — use the continuous contract in TradingView's strategy tester. it aggregates historical data across all past contracts, so you get the full price history you need. backtest over 2+ years of data to verify your algo performs consistently across multiple market cycles.
Tradovate has a built-in auto-rollover setting. don't rely on it. Tradovate's internal rollover often lags TradingView's by several days. during that window, TradingView is already referencing the new contract while Tradovate is still on the old one — so alerts get rejected.
what to update when a contract rolls
if you're on Tradovate or NinjaTrader (front-month), when you roll to a new contract, you must delete your old alert and create a new one. your alert doesn't auto-update when the contract expires.
when rollover time comes, follow these steps:
delete your current TradingView alert for the expiring contract
switch your chart to the new front-month contract (e.g., from
ESH25toESM25)verify your algo indicator settings look correct on the new chart — they carry over automatically, but it's worth a quick check
create a new TradingView alert using the same settings, now pointed at the new contract with your broker's webhook URL
verify both TradingView and your broker show the same contract before the old one expires
your indicator settings don't reset when you switch contracts. your webhook URL stays the same — it's tied to your edgeful account and broker connection, not to any specific contract.
if you're on ProjectX (continuous), you don't manage the quarterly roll yourself — the continuous symbol handles it. but you should still verify your alert is firing through each rollover window.
how to find rollover dates
the CME Group website publishes last trade dates for every futures contract. search for your instrument on cmegroup.com and look for the product calendar or contract specifications page.
you can also watch for rollover indicators on your TradingView chart — an arrow or hourglass icon signals that rollover is approaching. for ES and NQ, the front month typically rolls in mid-March, mid-June, mid-September, and mid-December.
edgeful doesn't currently send in-platform rollover reminders, so set a calendar alert a few days before each quarterly expiration.
how rollovers affect your edgeful reports
when edgeful rolls the contract in its data pipeline, your reports automatically update to use the new contract. your historical data stays intact — it's still there on the old contract. but going forward, all new reports and analysis pull from the new contract.
this keeps your edge consistent — you're always looking at the most liquid version of the instrument.
how to check which contract you're on
open any report on the instrument you're interested in. the contract name is right there at the top. if you're on NQ, you'll see something like "NQ (December)" — that tells you which month you're currently tracking.
common questions
should I re-optimize my algo settings on the new contract?
you don't have to. if you want to re-run the backtester, do it on the continuous contract rather than the specific one. settings typically don't shift significantly between consecutive contracts on the same instrument.
what if I miss the rollover and my trades start failing?
check your trade notifications first — failed trades will show up there with an error detail. once you've confirmed it's a contract issue, follow the steps above to update your alert to the new front-month contract. for the full silent-failure troubleshooting flow, see contract rollover: why your algo silently stopped trading.
which contract should I trade — front month or one further out?
always go with the front month. it has the most liquidity, the tightest spreads, and the most volume — which matters for your fills.
can I use the continuous contract for live alerts to avoid this whole process?
only if you're on ProjectX (Topstep / TopstepX and other ProjectX-based prop firms) — they require it. on Tradovate and NinjaTrader, using continuous creates a timing mismatch between TradingView and the broker that causes rejected orders. on those brokers, stick to the front-month contract and do the quarterly update.
related articles
→ contract rollover: why your algo silently stopped trading (troubleshooting companion)
