STRASMORE/EXPLORE 3,094 QUERIES

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

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-05, from Gold vs Real Interest Rates: Does It Hold?.

as 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
Rows × columns
5 × 5
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 Five pinned episodes: real-yield move, GLD return, and the daily correlation inside each, derived from the stored result.
ColumnTypeRangeNotes
episode text 5 distinct values
span_label text 5 distinct values
real_yield_delta number -0.29 to 1.53 ratio or rate
gld_return_pct number -18.4 to 47.2 percent
daily_corr number -0.66 to 0.22

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
    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)
⌘/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 analysisGold vs Real Interest Rates: Does It Hold?
The 10-year real yield, built from the nominal yield and the breakeven table 80×5 → Rolling 12-month correlation: daily GLD returns vs daily changes in the 10-year real yield table 76×4 → GLD implied volatility by month, near-the-money contracts with 20 to 45 days to expiry series 25×4 → What one Micro Gold (MGC) contract controls at different gold prices table 7×6 → 2026 price return, distributions and total return: miners, wrapper and bullion table 4×5 → At-the-money implied volatility: gold miners vs bullion vs the S&P 500 table 4×6 → See all 3,094 queries →