STRASMORE/EXPLORE 3,094 QUERIES 22Y EQUITIES · 12Y OPTIONS

3,094 answered market questions

every one with its exact SQL, its result and the date it was computed · free, no signup

Gold vs Real Interest Rates: Does It Hold?
Five pinned episodes: real-yield move, GLD return, and the daily correlation inside eachtable · 2026-10-05 · 5×5 Rolling 12-month correlation: daily GLD returns vs daily changes in the 10-year real yieldtable · 2026-10-05 · 76×4 The 10-year real yield, built from the nominal yield and the breakeventable · 2026-10-05 · 80×5 GLD implied volatility by month, near-the-money contracts with 20 to 45 days to expiryseries · 2026-10-05 · 25×4Preview: a 16-point series, ending higher.
Five pinned episodes: real-yield move, GLD return, and the daily correlation inside each

Five pinned episodes: real-yield move, GLD return, and the daily correlation inside each

most recentas of table 5×5read in context →
Five pinned episodes: real-yield move, GLD return, and the daily correlation inside each — 5 rows by 5 columns, computed from US exchange, SIP and OPRA data.
episodespan_labelreal_yield_deltagld_return_pctdaily_corr
2008 credit crisisJun 2008 to Dec 20080.9-18.40.22
2013 taper repricingApr 2013 to Dec 20131.11-10-0.63
2020 easing cycleDec 2019 to Aug 2020-0.2911.50.04
2022 hiking cycleDec 2021 to Oct 20221.53-6.2-0.66
2025 to 2026 advanceDec 2024 to Sep 20260.0247.2-0.19
the exact SQL behind every number
WITH
    daily AS
    (
        SELECT
            t.date                                                   AS d,
            toFloat64(t.yield_10_year) - toFloat64(e.market_10_year) AS real_10y,
            toFloat64(g.close)                                       AS gld_close
        FROM global_markets.treasury_yields AS t
        INNER JOIN global_markets.inflation_expectations AS e ON e.date = t.date
        INNER JOIN
        (
            SELECT
                date,
                max(close) AS close
            FROM global_markets.stocks_daily_aggs
            WHERE ticker = 'GLD'
              AND date >= '2005-01-01'
            GROUP BY date
        ) AS g ON g.date = t.date
        WHERE t.date >= '2005-01-01'
          AND t.yield_10_year > 0
          AND e.market_10_year > 0
    ),
    changes AS
    (
        SELECT
            d,
            real_10y,
            gld_close,
            real_10y - prev_real       AS real_chg,
            gld_close / prev_close - 1 AS gld_ret
        FROM
        (
            SELECT
                d,
                real_10y,
                gld_close,
                lagInFrame(real_10y)  OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_real,
                lagInFrame(gld_close) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_close
            FROM daily
        )
        WHERE prev_close > 0
    ),
    tagged AS
    (
        SELECT
            multiIf(
                d BETWEEN toDate('2008-06-30') AND toDate('2008-12-31'), '2008 credit crisis',
                d BETWEEN toDate('2013-04-30') AND toDate('2013-12-31'), '2013 taper repricing',
                d BETWEEN toDate('2019-12-31') AND toDate('2020-08-31'), '2020 easing cycle',
                d BETWEEN toDate('2021-12-31') AND toDate('2022-10-31'), '2022 hiking cycle',
                d BETWEEN toDate('2024-12-31') AND toDate('2026-09-30'), '2025 to 2026 advance',
                'other')                                                 AS episode,
            multiIf(
                d BETWEEN toDate('2008-06-30') AND toDate('2008-12-31'), 'Jun 2008 to Dec 2008',
                d BETWEEN toDate('2013-04-30') AND toDate('2013-12-31'), 'Apr 2013 to Dec 2013',
                d BETWEEN toDate('2019-12-31') AND toDate('2020-08-31'), 'Dec 2019 to Aug 2020',
                d BETWEEN toDate('2021-12-31') AND toDate('2022-10-31'), 'Dec 2021 to Oct 2022',
                d BETWEEN toDate('2024-12-31') AND toDate('2026-09-30'), 'Dec 2024 to Sep 2026',
                'other')                                                 AS span_label,
            d,
            real_10y,
            gld_close,
            real_chg,
            gld_ret
        FROM changes
    )
SELECT
    episode,
    span_label,
    round(argMax(real_10y, d) - argMin(real_10y, d), 2)               AS real_yield_delta,
    round(100 * (argMax(gld_close, d) / argMin(gld_close, d) - 1), 1) AS gld_return_pct,
    round(corr(real_chg, gld_ret), 2)                                 AS daily_corr
FROM tagged
WHERE episode != 'other'
GROUP BY episode, span_label
ORDER BY min(d)
$