STRASMORE/EXPLORE 3,293 QUERIES

The eight weakest seven-year windows on SPY, dividends counted as cash

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-09-17, from The 7-5-3-1 Rule in Mutual Funds, Tested.

as of table 8×6read in context →
The eight weakest seven-year windows on SPY, dividends counted as cash — 8 rows by 6 columns, computed from US exchange, SIP and OPRA data.
start_labelend_labelstart_closeend_closeprice_return_pctwith_dividends_pct
Oct 2004Oct 2011113.65109.93-3.37
Dec 2004Dec 2011119.23124.974.814.6
Sep 2003Sep 2010101.96108.466.414.8
Jan 2005Jan 2012120.3127.5616.3
Jun 2005Jun 2012120.5128.166.417.2
Nov 2004Nov 2011113.511227.517.8
Sep 2004Sep 2011111.32120.948.618.6
Nov 2003Nov 2010105.99118.5311.820.5
Rows × columns
8 × 6
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for The eight weakest seven-year windows on SPY, dividends counted as cash, derived from the stored result.
ColumnTypeRangeNotes
start_label text 8 distinct values (Dec 2004, Jan 2005, Jun 2005…)
end_label text 8 distinct values (Dec 2011, Jan 2012, Jun 2012…)
start_close number 101.96 to 120.5 US dollars
end_close number 108.46 to 128.16 US dollars
price_return_pct number -3.3 to 11.8 percent
with_dividends_pct number 7 to 20.5 percent

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.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

WITH
    monthly AS
    (
        SELECT
            toStartOfMonth(date)            AS month_start,
            toDate(min(date))               AS first_session,
            argMin(toFloat64(close), date)  AS first_close
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
        GROUP BY month_start
    ),
    divs AS
    (
        SELECT
            toStartOfMonth(ex_dividend_date) AS month_start,
            sum(cash)                        AS month_cash
        FROM
        (
            SELECT
                ex_dividend_date,
                max(toFloat64(cash_amount)) AS cash
            FROM global_markets.stocks_dividends
            WHERE ticker = 'SPY'
            GROUP BY ex_dividend_date
        )
        GROUP BY month_start
    ),
    grid AS
    (
        SELECT
            m.month_start                AS month_start,
            m.first_session              AS first_session,
            m.first_close                AS first_close,
            addMonths(m.month_start, 84) AS end_month,
            sum(ifNull(d.month_cash, 0)) OVER (ORDER BY m.month_start ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS cash_before
        FROM monthly AS m
        LEFT JOIN divs AS d ON d.month_start = m.month_start
    )
SELECT
    formatDateTime(s.first_session, '%b %Y')             AS start_label,
    formatDateTime(e.first_session, '%b %Y')             AS end_label,
    round(s.first_close, 2)                              AS start_close,
    round(e.first_close, 2)                              AS end_close,
    round((e.first_close / s.first_close - 1) * 100, 1)  AS price_return_pct,
    round(((e.first_close + e.cash_before - s.cash_before) / s.first_close - 1) * 100, 1) AS with_dividends_pct
FROM grid AS s
INNER JOIN grid AS e ON e.month_start = s.end_month
ORDER BY with_dividends_pct ASC, s.month_start ASC
LIMIT 8
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysisThe 7-5-3-1 Rule in Mutual Funds, Tested
A flat 500-a-month SIP against the same plan stepped up 10% a year, contributions only table 10×5 → Rolling seven-year returns on SPY, one window per start month series 193×5 → Where the seven-year windows landed: SPY windows by return band, dividends counted ranking 5×3 → Small AAPL print sizes: five sessions in January 2026 against five in July 2026 table 26×3 → US equity exchanges that feed the consolidated tape table 18×4 → The same twelve prints, ranked by venue clock and by tape clock table 12×7 → See all 3,293 queries →