Continuous futures data in Parquet

Updated daily -- futures data current through 2026-10-23.

See the format first: a free intraday sample pack (1 week, 10 futures symbols, 1-min to 1-hour, no account).

Ratio-adjusted contracts

MarketParquet futures data is continuous and ratio-adjusted. Coverage includes ~130 of the most active futures contracts, including ES, NQ, CL, GC, ZN, and more, from December 2007 to present.

Futures files use the same date-partitioned Parquet layout as stocks and ETFs, with 1-minute, 5-minute, 30-minute, 1-hour, and daily bars.

Roll method. The data source chains front-month contracts and rolls before expiry, when trading volume migrates to the next contract; the entire earlier series is multiplied by the ratio of the new contract's open to the expiring contract's close. Exact roll dates are not published by the source, so every roll the nightly build observes is recorded with its ratio in meta/futures_rolls.parquet, and the source's contract-by-day calendar in meta/futures_contract_calendar.parquet. All published history sits on one ratio-adjusted basis; rolls inside the trailing 30-day window are re-based nightly. Known source-side quirks are on the data quality page.

Query a continuous series

  import polars as pl

  es = (
      pl.scan_parquet("by_date/futures_daily/2024/*.parquet")
        .filter(pl.col("symbol") == "ES")
        .select(["date", "symbol", "open", "high", "low", "close", "volume"])
        .sort("date")
        .collect()
  )

Available futures files

TimeframeFilesDate Range
1-Min5,8862007-12-31 .. 2026-10-23
5-Min5,8862007-12-31 .. 2026-10-23
30-Min5,8862007-12-31 .. 2026-10-23
1-Hour5,8862007-12-31 .. 2026-10-23
Daily4,8962007-12-31 .. 2026-10-23

Related

futures data hub · browse futures daily · pricing · DuckDB guide · local data lake guide