US trading sessions per month, January 2025 through June 2026
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-08-01, from Pattern Day Trader Rule: What Replaced It.
| month | month_label | sessions |
|---|---|---|
| 2025-01 | January 2025 | 20 |
| 2025-02 | February 2025 | 19 |
| 2025-03 | March 2025 | 21 |
| 2025-04 | April 2025 | 21 |
| 2025-05 | May 2025 | 21 |
| 2025-06 | June 2025 | 20 |
| 2025-07 | July 2025 | 22 |
| 2025-08 | August 2025 | 21 |
| 2025-09 | September 2025 | 21 |
| 2025-10 | October 2025 | 23 |
| 2025-11 | November 2025 | 19 |
| 2025-12 | December 2025 | 22 |
| 2026-01 | January 2026 | 20 |
| 2026-02 | February 2026 | 19 |
| 2026-03 | March 2026 | 22 |
| 2026-04 | April 2026 | 21 |
| 2026-05 | May 2026 | 20 |
| 2026-06 | June 2026 | 21 |
- Rows × columns
- 18 × 3
- Period covered
- to
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
month |
date | 2025-01 to 2026-06 | |
month_label |
text | 18 distinct values (April 2025, April 2026, August 2025…) | |
sessions |
number | 19 to 23 |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
the exact SQL behind every number
WITH trading_days AS (
SELECT DISTINCT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2025-01-01 05:00:00')
AND window_start < toDateTime('2026-07-01 04:00:00')
)
SELECT formatDateTime(toStartOfMonth(session_date), '%Y-%m') AS month,
formatDateTimeInJodaSyntax(toStartOfMonth(session_date), 'MMMM yyyy') AS month_label,
count() AS sessions
FROM trading_days
GROUP BY month, month_label
ORDER BY month
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysisPattern Day Trader Rule: What Replaced It
SPY share volume by half hour, week of July 6, 2026 (Eastern time)
series 32×2
→
Median and 90th percentile full day range, eight names, H1 2026
ranking 8×3
→
SPY typical and largest daily move, month by month since 2019
series 91×4
→
Short term Treasury yields, the reference a stock margin loan is priced off
series 91×4
→
Symbols closing the month below $5 and below $1, past two years
series 24×3
→
Symbol count and average daily range, by price bucket
ranking 6×3
→
See all 2,170 queries →