MES historical data: 1-minute to daily bars, 2019 to 2026
MES is the Micro E-mini S&P 500 futures; it tracks the S&P 500 index at one-tenth of the E-mini contract size. MarketParquet holds MES as a futures contract with 1-minute, 5-minute, 30-minute, 1-hour and daily OHLCV bars from 2019-05-06 to 2026-09-11 (1,853 daily bars), continuous contract, ratio-adjusted at each roll, as one Parquet file per trading day.
MES is the retail-sized S&P 500 contract; backtests built on ES history are typically executed on MES.
MES at a glance
| Instrument | Micro E-mini S&P 500 futures (MES) |
| Asset class | Futures (continuous contract) |
| First bar | 2019-05-06 |
| Latest bar | 2026-09-11 |
| Daily bars | 1,853 |
| Timeframes | 1-minute, 5-minute, 30-minute, 1-hour, daily |
| Adjustment | continuous contract, ratio-adjusted at each roll |
| Timezone | US/Eastern bar open time; intraday files include pre-market and after-hours bars where available |
| Format | Apache Parquet, one file per trading day containing every Futures symbol |
Sample: MES 30-minute bars on 2026-09-16
The first regular-session bars from the newest 30-minute file, read live from the archive. Prices are the values as published; the full session has many more rows.
| timestamp | open | high | low | close | volume |
|---|---|---|---|---|---|
| 09:30 | 7676.50 | 7686.50 | 7669.00 | 7684.25 | 87,981 |
| 10:00 | 7684.50 | 7686.50 | 7669.25 | 7671.75 | 58,573 |
| 10:30 | 7671.75 | 7685.00 | 7669.75 | 7684.50 | 48,033 |
| 11:00 | 7684.50 | 7692.75 | 7683.75 | 7686.00 | 63,984 |
| 11:30 | 7686.00 | 7699.00 | 7682.00 | 7688.75 | 63,232 |
| 12:00 | 7689.00 | 7689.50 | 7680.25 | 7683.00 | 25,645 |
| 12:30 | 7683.00 | 7684.00 | 7678.25 | 7679.25 | 19,010 |
| 13:00 | 7679.50 | 7681.00 | 7674.00 | 7681.00 | 20,844 |
Corporate actions in the changelog
MES is a continuous contract: each roll is ratio-adjusted so the series has no artificial gaps between expiries. There are no splits to record; the continuous futures page explains the roll method.
Load MES in Python
Files are partitioned by trading day, so pulling one symbol means filtering across files. DuckDB reads the whole daily history in one statement; union_by_name and the COALESCE cover the older daily files, which carry a timestamp column where newer ones carry date:
import duckdb
mes = duckdb.sql("""
SELECT COALESCE(date, CAST(timestamp AS DATE)) AS date,
open, high, low, close, volume
FROM read_parquet('by_date/futures_daily/*/*.parquet', union_by_name=true)
WHERE symbol = 'MES'
ORDER BY 1
""").df()
Intraday files all share one schema, so Polars can scan a year of 5-minute bars lazily and keep only MES:
import polars as pl
bars = (
pl.scan_parquet("by_date/futures_5min/2025/*.parquet")
.filter(pl.col("symbol") == "MES")
.select(["timestamp", "open", "high", "low", "close", "volume"])
.sort("timestamp")
.collect()
)
Timestamps are US/Eastern bar open times. The Polars guide, the DuckDB guide and the backtrader guide take it from here: multi-year loads, resampling and feeding a backtest engine.
Available Futures files
| Timeframe | Files | Date range |
|---|---|---|
| 1-Min | 5,854 | 2007-12-31 to 2026-09-16 |
| 5-Min | 5,854 | 2007-12-31 to 2026-09-16 |
| 30-Min | 5,854 | 2007-12-31 to 2026-09-16 |
| 1-Hour | 5,854 | 2007-12-31 to 2026-09-16 |
| Daily | 4,869 | 2007-12-31 to 2026-09-16 |
Every file holds all Futures symbols for that day, MES included.
Get MES data
Free: a free account can download roughly the last year of daily Futures files, which include MES, from the daily browse page or by API key. Complete Archive: every timeframe and the full history back to 2019-05-06 for MES and every other symbol, $79 one-time.
> Download the free daily sample > See pricingFAQ
Is MES history split-adjusted?
Futures do not split. MES is a continuous, ratio-adjusted series, so returns are correct across contract rolls.
How far back does MES go?
The first MES bar in the archive is dated 2019-05-06 and the newest is 2026-09-11. New sessions are added the same night, typically by midnight ET.
What timezone are the intraday bars in?
US/Eastern. Regular hours are 9:30 AM to 4:00 PM ET; 1-minute files also carry pre-market from 4:00 AM and after-hours to 8:00 PM where trades occurred.
Can I download only MES?
Files are per day, not per symbol, so you download the daily or intraday files for the dates you need and filter on symbol == "MES". A year of daily files is small; the snippets above do the filtering in one pass.
Related
Futures data hub · browse Futures daily · all symbol pages · pricing
Other Futures pages: ES · NQ · MNQ · YM · RTY · CL · MCL · GC · MGC · SI · NG · ZN · BTC