SPY's week in trailing-year context (open-to-close weekly returns, ~53 weeks)
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-07-26, from Market Recap: Week of July 6, 2026.
week open to close pct
0.82
rank best
20
weeks compared
53
first week
2025-07-07
sessions this week
5
- Rows × columns
- 1 × 5
- Period covered
- 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 |
|---|---|---|---|
week_open_to_close_pct |
number | every row is 0.82 | percent |
rank_best |
number | every row is 20 | |
weeks_compared |
number | every row is 53 | |
first_week |
date | 2025-07-07 | |
sessions_this_week |
number | every row is 5 |
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
SELECT round(anyIf(ret, wk = toDate('2026-07-06')), 2) AS week_open_to_close_pct,
arrayCount(x -> x > anyIf(ret, wk = toDate('2026-07-06')), groupArrayIf(ret, wk != toDate('2026-07-06'))) + 1 AS rank_best,
count() AS weeks_compared,
toString(min(wk)) AS first_week,
anyIf(sessions, wk = toDate('2026-07-06')) AS sessions_this_week
FROM (
SELECT toStartOfWeek(toDate(toTimeZone(window_start, 'America/New_York')), 1) AS wk,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2025-07-06 00:00:00')
AND window_start < toDateTime('2026-07-11 00:00:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY wk
HAVING sessions >= 3
)
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 analysisMarket Recap: Week of July 6, 2026
Next week on the calendar: closures, ex-dividends, and the monthly expiry's pull
scalar 1×4
→
SK Hynix's US debut: the raise, the delayed open, the close vs offer, and where the first-day tape ranks in 2026
scalar 1×14
→
Session verification: five sessions, no holiday, next scheduled closure
scalar 1×6
→
The week's corporate calendar: filings, dividends, splits, news
scalar 1×10
→
Treasury curve: the Friday July 10 print vs the July 2 close, both late receipts on file
scalar 1×6
→
Weekly breadth: July 10 close vs July 2 close, names with $5M+ traded during the week
scalar 1×4
→
See all 2,170 queries →