Explainer
What data do you need to backtest futures?
You need price bars fine enough for your rules, usually 1-minute for intraday rules, with the front month chosen by volume and contract rolls marked.
Updated
Bar size: 1-minute or daily
A bar records four prices for a period: the open, the high, the low and the close. A daily bar keeps those four prices for a whole session. It does not keep the order the market moved in.
That order is what an intraday rule depends on. If your stop and your target both sit inside the same day’s range, a daily bar cannot say which was touched first. Neither can a 5-minute bar if both fall inside it. Finer bars settle it.
Our runs use 1-minute bars. When a stop and a target both fall inside one bar on a longer timeframe, the 1-minute bars decide which was hit first.
Match the bars to the rules. A rule that talks about minutes needs minute bars.
Why intraday rules need intraday data
Take a rule such as “enter on the first break of the 09:30–09:45 range.” Daily data has no 09:45. Even 15-minute bars blur the break, because a bar that touches both sides of the range hides which side came first.
Daily data is fine when the rule only uses daily information, such as the previous day’s high or low or a daily close. Pick the coarsest bars that still answer every question the rules ask.
Front month and rolls
A futures contract expires, so a long history is made of several contracts joined end to end. Two choices follow: which contract counts as the market on a given day, and what to do on the day it changes.
Our rule is the front month by volume, switching at the 18:00 ET session open. Prices are not back-adjusted. A back-adjusted series changes old prices so the line looks continuous, which is useful on a chart and wrong for a simulation, because it is not a price anyone traded. Back-adjusted series may be drawn for display. They are never what the simulation trades.
Roll dates are stored as explicit events. No trade is held through a contract change: a position still open at the close of the last session before a roll exits at that session’s final bar close, and nothing is reopened on the new contract.
- Front month
- The contract month chosen as the market for a given session. Ours is the one with the highest volume.
- Back-adjusted
- A series in which old prices are shifted so the roll gaps disappear. Used for display only.
- Raw price
- The price as it traded on its own contract. The simulation runs on raw prices.
How far back the data goes
The history you can test is the history the data covers. On our data, NQ and ES run from June 2, 2016 through August 27, 2026. MNQ and MES run from their launch in May 2019 through the same date. GC runs from September 29, 2016.
A run cannot ask for more history than that. The order form caps the years you can choose to what is covered for the market you picked, and the server refuses a request that reaches further back.
Where the data comes from
Our data is historical CME futures data licensed from Databento. It is not a live feed. Every clock time in a run is America/New_York, including the daylight-saving changes, and a bar is labelled by its open time.
When you source data yourself, check four things before the first run: the bar size, the time zone, how the contract months are joined, and whether holidays and early closes are in the file.
Questions and answers
Can I backtest futures on daily data?
Yes, if the rules only use daily information. For anything that depends on what happened inside the day, such as an opening range, a stop and a target in the same session or a time of day, use intraday bars.
What is front-month data?
It is the price series of the contract month that is treated as the market for each session. We choose the front month by volume and switch at the 18:00 ET session open.
Should futures data be back-adjusted for a backtest?
Not for the simulation. Back-adjusted prices are not prices that traded. We run on raw prices and use a back-adjusted line only to draw charts.
Where does your futures data come from?
Historical CME data licensed from Databento.
How much history is available for NQ?
On our data, NQ runs from June 2, 2016 through August 27, 2026.