Data & MethodologyReference

Data coverage

The symbols, date ranges, and resolution of the market data behind every signal and backtest. This is the single page that states coverage; every other page links here rather than repeating it.

Updated Jul 20262 min read

Backtest.ai runs on 1-minute market data. Every signal and backtest reads from the same set: a fixed list of liquid symbols, 1-minute stock bars and 1-minute option quotes over the regular session, and reference data (dividends, splits, earnings) reaching back to June 2012. The launch symbol universe is 11 symbols, with more under consideration.

Symbols covered

The launch universe is 11 symbols, and every one carries both accessor coverage (bar.* / option.* in the Signal language) and backtest coverage (running a strategy on that symbol):

SPY, IWM, QQQ, SPX, AAPL, AMZN, GLD, MSFT, NVDA, TLT, TSLA.

We are considering more symbols shortly, so treat this as a growing list, not a fixed ceiling.

Resolution and session

Coverage is 1-minute stock bars and 1-minute option bid/ask quotes over the regular trading session.

The accessor spine runs from 09:31 through the session close, on NYSE trading days, in America/New_York. A normal session gives 390 1-minute observations (09:31 to 16:00); an early-close day gives 210 (09:31 to 13:00). Holidays and early closes are handled from the calendar, so non-trading minutes and whole non-trading days are absent from the spine. For how this spine drives evaluation, see the execution model.

History depth

Reference data (stock bars, dividends, splits, and confirmed earnings dates) covers history on or after June 2012. Per-symbol option-quote depth varies by symbol and grows as coverage extends.

One caveat shapes any 0DTE study. A full five-day-a-week 0DTE option week only exists from roughly May 2022 onward. Before that the daily and weekly expiration ladder was thinner, so a 0DTE backtest over the earlier history has fewer expirations to trade. Read a 0DTE result before mid-2022 against that thinner ladder, not against today's every-weekday schedule.

What's in the data

Per symbol, coverage carries:

  • The full listed option chain (all expirations and strikes) with per-contract 1-minute bid/ask quotes and end-of-day open interest.
  • The underlying 1-minute stock bars.
  • The corporate-action coverage that feeds the methodology: splits, cash dividends, and confirmed earnings dates.

For how each of these numbers is derived and kept point-in-time, see data inputs and point-in-time guarantees.

How you reach it

Every number reaches you through the DSL accessors: bar.* for stock bars, option.* for the option chain, and time.* for calendar and trading-time signals. This page is the coverage map; the data accessor reference is the how-to.

A signal or backtest runs against one symbol at a time. The accessor reads that run's symbol unless you override it per call. For the daily close of the run's symbol:

// Daily close for the run's symbol, sampled from the 1-minute bars
bar.close(sampling=sampling(period="day", time="close"))

Bar prices are split- and dividend-adjusted by default; see stock price adjustments for the adjustment mechanics and how to read a raw series instead.

Was this page helpful?