STRASMORE/EXPLORE 2,948 QUERIES

recovery_path_2007

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-10-02, from did-stocks-take-25-years-to-recover.

as of table 75×4read in context →
recovery_path_2007 — 75 rows by 4 columns, computed from US exchange, SIP and OPRA data.
month_startmonth_labelprice_pcttotal_return_pct
2007-10-01Oct 200700
2007-11-01Nov 2007-3.9-3.9
2007-12-01Dec 2007-5.5-5
2008-01-01Jan 2008-11.2-10.7
2008-02-01Feb 2008-13.5-13
2008-03-01Mar 2008-14.7-13.8
2008-04-01Apr 2008-10.6-9.7
2008-05-01May 2008-9.2-8.3
2008-06-01Jun 2008-17.2-16
2008-07-01Jul 2008-18-16.7
2008-08-01Aug 2008-16.7-15.5
2008-09-01Sep 2008-25-23.4
2008-10-01Oct 2008-37.4-36.1
2008-11-01Nov 2008-41.7-40.5
2008-12-01Dec 2008-41.6-39.9
2009-01-01Jan 2009-46.4-44.9
2009-02-01Feb 2009-52.2-50.8
2009-03-01Mar 2009-48.6-46.7
2009-04-01Apr 2009-43.5-41.4
2009-05-01May 2009-40.2-38
2009-06-01Jun 2009-40.5-38
2009-07-01Jul 2009-36.1-33.4
2009-08-01Aug 2009-33.7-30.9
2009-09-01Sep 2009-31.7-28.5
2009-10-01Oct 2009-33-29.9
2009-11-01Nov 2009-28.9-25.5
2009-12-01Dec 2009-27.9-24.1
2010-01-01Jan 2010-30.6-26.9
2010-02-01Feb 2010-28.4-24.6
2010-03-01Mar 2010-24.3-20
2010-04-01Apr 2010-23.2-18.8
2010-05-01May 2010-29.3-25.2
2010-06-01Jun 2010-33.3-29.1
2010-07-01Jul 2010-28.7-24.2
2010-08-01Aug 2010-31.9-27.6
2010-09-01Sep 2010-26.2-21.2
2010-10-01Oct 2010-23.4-18.2
2010-11-01Nov 2010-23.4-18.2
2010-12-01Dec 2010-18.7-12.7
2011-01-01Jan 2011-16.8-10.6
2011-02-01Feb 2011-13.9-7.5
2011-03-01Mar 2011-14.3-7.5
2011-04-01Apr 2011-11.8-4.9
2011-05-01May 2011-12.8-5.9
2011-06-01Jun 2011-14.7-7.5
2011-07-01Jul 2011-16.4-9.4
2011-08-01Aug 2011-21-14.3
2011-09-01Sep 2011-26.8-20.3
2011-10-01Oct 2011-18.8-11.6
2011-11-01Nov 2011-19.2-12
2011-12-01Dec 2011-18.8-11
2012-01-01Jan 2012-15.1-6.9
2012-02-01Feb 2012-11.4-2.9
2012-03-01Mar 2012-8.90.3
2012-04-01Apr 2012-9.6-0.4
2012-05-01May 2012-15-6.4
2012-06-01Jun 2012-12-2.6
2012-07-01Jul 2012-11-1.4
2012-08-01Aug 2012-8.71
2012-09-01Sep 2012-6.93.6
2012-10-01Oct 2012-8.61.7
2012-11-01Nov 2012-8.12.3
2012-12-01Dec 2012-7.93.2
2013-01-01Jan 2013-3.28.5
2013-02-01Feb 2013-29.9
2013-03-01Mar 20131.314
2013-04-01Apr 20133.316.2
2013-05-01May 20135.719
2013-06-01Jun 20133.717.4
2013-07-01Jul 20139.123.4
2013-08-01Aug 20135.819.7
2013-09-01Sep 20138.623.5
2013-10-01Oct 201313.729.3
2013-11-01Nov 20131733.1
2013-12-01Dec 201319.436.5
Rows × columns
75 × 4
Period covered
to
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 recovery_path_2007, derived from the stored result.
ColumnTypeRangeNotes
month_start date 2007-10-01 to 2013-12-01
month_label text 75 distinct values (Apr 2008, Apr 2009, Apr 2010…)
price_pct number -52.2 to 19.4 percent
total_return_pct number -50.8 to 36.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,
        argMax(toFloat64(close), date) AS month_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2007-10-01'
      AND date <  '2014-01-01'
    GROUP BY month
),
div_cash AS
(
    SELECT
        ex_dividend_date            AS ex_date,
        max(toFloat64(cash_amount)) AS cash
    FROM global_markets.stocks_dividends
    WHERE ticker = 'SPY'
      AND ex_dividend_date >= '2007-11-01'
      AND ex_dividend_date <  '2014-01-01'
      AND cash_amount > 0
    GROUP BY ex_dividend_date
),
div_log AS
(
    SELECT
        toStartOfMonth(c.ex_date)             AS month,
        sum(log(1 + c.cash / p.close_on_ex))  AS log_factor
    FROM div_cash AS c
    INNER JOIN
    (
        SELECT
            date                 AS date,
            toFloat64(close)     AS close_on_ex
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date >= '2007-11-01'
          AND date <  '2014-01-01'
    ) AS p ON p.date = c.ex_date
    GROUP BY month
),
path AS
(
    SELECT
        m.month                 AS month,
        m.month_close           AS month_close,
        ifNull(d.log_factor, 0) AS log_factor
    FROM monthly AS m
    LEFT JOIN div_log AS d ON d.month = m.month
)
SELECT
    toString(month)                AS month_start,
    formatDateTime(month, '%b %Y') AS month_label,
    round(100 * (month_close
        / first_value(month_close) OVER (ORDER BY month) - 1), 1) AS price_pct,
    round(100 * (month_close * exp(sum(log_factor) OVER (ORDER BY month))
        / first_value(month_close) OVER (ORDER BY month) - 1), 1) AS total_return_pct
FROM path
ORDER BY month
⌘/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 analysisdid-stocks-take-25-years-to-recover
yield_by_year ranking 19×2 → weighting_contrast ranking 8×4 → The 2s10s spread, every print of the half table 124×2 → The 2s10s spread, every print of the half table 124×2 → Every half-year since 1976: the 2y and 10y change, the twist between them, and the half's lowest 2s10s print table 100×7 → SPY at one-minute resolution, 2:00–3:30 pm ET on May 6, 2010 table 90×4 → See all 2,948 queries →