{"slug":"us-credit-downgrade-2011","qid":"recovery","label":"The recovery, dated: reclaim, failed hold, true bottom, and the last close below","post_title":"The 2011 US Downgrade: Black Monday's Tape","post_url":"/blog/us-credit-downgrade-2011#q-recovery","columns":["predowngrade_close","first_reclaim_date","sessions_before_first_reclaim","bottom_date","bottom_close","bottom_vs_predowngrade_pct","bottom_vs_downgrade_monday_pct","last_close_below","total_sessions_below"],"rows":[{"predowngrade_close":120.03,"first_reclaim_date":"2011-08-15","sessions_before_first_reclaim":5,"bottom_date":"2011-10-03","bottom_close":109.92,"bottom_vs_predowngrade_pct":-8.4,"bottom_vs_downgrade_monday_pct":-2.1,"last_close_below":"2011-11-28","total_sessions_below":41}],"shape":"scalar","sql":"WITH daily AS (\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,\n        argMax(toFloat64(close), window_start) AS close_usd\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n      AND window_start >= toDateTime('2011-08-05 00:00:00') AND window_start < toDateTime('2012-07-01 00:00:00')\n    GROUP BY et_date\n),\n(SELECT close_usd FROM daily WHERE et_date = toDate('2011-08-05')) AS pre_close,\n(SELECT close_usd FROM daily WHERE et_date = toDate('2011-08-08')) AS mon_close,\n(SELECT min(et_date) FROM daily WHERE et_date > toDate('2011-08-05') AND close_usd >= pre_close) AS reclaim_d\nSELECT\n    round(pre_close, 2) AS predowngrade_close,\n    toString(reclaim_d) AS first_reclaim_date,\n    countIf(et_date > toDate('2011-08-05') AND et_date < reclaim_d) AS sessions_before_first_reclaim,\n    toString(argMinIf(et_date, (close_usd, et_date), et_date > toDate('2011-08-05'))) AS bottom_date,\n    round(minIf(close_usd, et_date > toDate('2011-08-05')), 2) AS bottom_close,\n    round((minIf(close_usd, et_date > toDate('2011-08-05')) / pre_close - 1) * 100, 1) AS bottom_vs_predowngrade_pct,\n    round((minIf(close_usd, et_date > toDate('2011-08-05')) / mon_close - 1) * 100, 1) AS bottom_vs_downgrade_monday_pct,\n    toString(maxIf(et_date, close_usd < pre_close)) AS last_close_below,\n    countIf(et_date > toDate('2011-08-05') AND close_usd < pre_close) AS total_sessions_below\nFROM daily","computed_at":"2026-07-26T06:19:25.869037+00:00","elapsed":1.078958293}