{"slug":"march-2009-market-bottom","qid":"turn_tape","label":"The turn week: SPY, Citigroup, and the 10-year yield, March 9-13","post_title":"March 9, 2009: The Bottom, On the Tape","post_url":"/blog/march-2009-market-bottom#q-turn_tape","columns":["session","spy_close","spy_change_pct","spy_shares_m","citi_close","ten_year_pct"],"rows":[{"session":"2009-03-09","spy_close":68.07,"spy_change_pct":-1.1,"spy_shares_m":357.4,"citi_close":1.05,"ten_year_pct":2.89},{"session":"2009-03-10","spy_close":72.21,"spy_change_pct":6.1,"spy_shares_m":401.3,"citi_close":1.44,"ten_year_pct":2.99},{"session":"2009-03-11","spy_close":72.6,"spy_change_pct":0.5,"spy_shares_m":350.1,"citi_close":1.54,"ten_year_pct":2.95},{"session":"2009-03-12","spy_close":75.51,"spy_change_pct":4,"spy_shares_m":407.4,"citi_close":1.66,"ten_year_pct":2.89},{"session":"2009-03-13","spy_close":76.09,"spy_change_pct":0.8,"spy_shares_m":332.7,"citi_close":1.78,"ten_year_pct":2.89}],"shape":"series","sql":"WITH daily AS (\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,\n        argMaxIf(toFloat64(close), window_start, ticker = 'SPY' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS spy_close_raw,\n        round(argMaxIf(toFloat64(close), window_start, ticker = 'C' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS citi_close,\n        round(toFloat64(sumIf(volume, ticker = 'SPY')) / 1e6, 1) AS spy_shares_m\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('SPY', 'C')\n      AND window_start >= toDateTime('2009-03-06 04:00:00') AND window_start < toDateTime('2009-03-14 00:00:00')\n    GROUP BY et_date\n)\nSELECT\n    toString(d.et_date) AS session,\n    round(d.spy_close_raw, 2) AS spy_close,\n    round((d.spy_close_raw / d.prev_close - 1) * 100, 1) AS spy_change_pct,\n    d.spy_shares_m,\n    d.citi_close,\n    t.ten_year_pct\nFROM (\n    SELECT *, lagInFrame(spy_close_raw) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close\n    FROM daily\n) AS d\nLEFT JOIN (\n    SELECT date, round(toFloat64(yield_10_year), 2) AS ten_year_pct\n    FROM global_markets.treasury_yields\n    WHERE date BETWEEN '2009-03-09' AND '2009-03-13'\n) AS t ON d.et_date = t.date\nWHERE d.et_date >= toDate('2009-03-09')\nORDER BY d.et_date","computed_at":"2026-07-26T05:40:59.913962+00:00","elapsed":0.08403518}