Seasonality
Average monthly return tendencies across 5-, 10- and 15-year windows, with agreement flags.
S&P 500 E-Mini — cumulative % from Jan 1
YTD overlaid against 5y / 10y / 15y historical averages, aligned by day-of-year.
Overview
Seasonality measures the average return an asset has produced in each calendar month — and each trading day within a month — across history. Recurring flows (tax cycles, fund rebalancing, holiday liquidity, harvest and inventory patterns in commodities, futures roll dates) leave a statistical footprint. It is a probabilistic tilt, never a guarantee, but a persistent tilt is worth knowing before you commit risk into a month.
The three views
- Seasonality overlay — the current YTD cumulative return line plotted against the 5-, 10- and 15-year average paths, aligned by calendar day. When the YTD line tracks the historical averages, the market is broadly behaving seasonally; sharp divergence is itself a signal.
- Best trading time — for the selected month, the average % return earned on the Nth trading day of that month across history. Use it to size around the better historical days within a stretch you're already committed to trading.
- TDOM grid — a (trading-day × hold-period) heatmap. Each cell is the historical average return of entering on TDOM T and holding for H trading days, computed across all available years. Lets you isolate the best window within a month — entry timing AND exit timing in one matrix.
How to read it
Use seasonality to weight a thesis, not to generate one. A structurally bullish Motion setup landing on a TDOM cell with a deep green hold-period is a tailwind worth respecting; the same setup entering a historically weak run deserves a smaller hand. When the YTD line is already running far above the 15-year average, late-month mean-reversion windows in the TDOM grid become more interesting. Always pair the read with the sample size — twenty observations is a signal; three is noise.
Methodology & source
Data is pulled live from Yahoo Finance — 18 years of daily closes per contract (ES=F, GC=F, BTC-USD, NG=F) — then aggregated three ways server-side: cumulative-from-Jan-1 paths per year (for the overlay), close-to-close % returns bucketed by trading-day-of-month (for the bar chart), and entry/exit return matrices per month (for the grid). The page revalidates every 6 hours; the engine recomputes on each revalidate so the YTD line and the averages always reflect the most recent close.
In the MTS framework
Seasonality is a Space input — a background probability layer on top of the cycle read. It never overrides Motion or Time; it adjusts how hard you press when they align. Where all three pillars and the seasonal window point the same way, conviction is earned. Where they fight, the conflict itself is the information.