2011 US downgrade: wetin happen for Black Monday tape
August 8, 2011: di first trading day after S&P comot US AAA rating. Di tape fall all day, close near di low. See wetin rise, wetin sink, and how long e take for di damage to heal.
After di close on Friday, August 5, 2011, Standard & Poor's downgrade di United States credit rating from AAA to AA+ — na di first US credit downgrade for history. Monday, August 8 na di market first chance to vote on am, for di peak of dat summer European debt crisis. Dis page dey replay di vote from di minute tape: wetin fall, wetin rise, where di day rank, and how long e take for di damage to heal. Every number na stored query; expand any panel for di SQL.
Why S&P downgrade di US
Di downgrade na di final act of di 2011 debt-ceiling standoff. Di debt ceiling na statutory cap on total federal borrowing; once di government hit am, di Treasury no fit issue new debt to pay for spending wey Congress don already approve. Di US reach di $14.3 trillion limit on May 16, 2011, and di Treasury begin "extraordinary measures" — accounting maneuvers wey buy time until August 2, di projected date wen dem go run out of cash. Congress pass di Budget Control Act, and di President sign am, on August 2 itself: dem avoid default with hours to spare.
Three days later, after Friday close, S&P cut di rating anyhow. Di statement make two arguments. First, di process: months of brinkmanship over whether di US go voluntarily miss payments don, for S&P own words, make American policymaking "less stable, less effective, and less predictable." Second, di arithmetic: di act roughly $2.1 trillion in projected ten-year savings fall short of wetin S&P judge necessary to stabilize di government debt trajectory. Di Treasury Department publicly dispute di math, dem identify $2 trillion difference in assumptions; S&P revise di figures and keep di new rating. Moody's and Fitch, di other two major agencies, affirm dia AAA ratings dat summer — so Monday open na di market grading one agency judgment.
Di day, for one row
The exact SQL behind every number
WITH
(
SELECT argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2011-08-05 00:00:00') AND window_start < toDateTime('2011-08-08 04:00:00')
) AS prior_rth_close
SELECT
round(prior_rth_close, 2) AS prior_close,
round(toFloat64(argMinIf(open, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)), 2) AS rth_open,
round((toFloat64(argMinIf(open, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / prior_rth_close - 1) * 100, 1) AS gap_pct,
round(minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS rth_low,
formatDateTime(toTimeZone(argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 'America/New_York'), '%H:%i') AS low_et,
round(maxIf(toFloat64(high), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS rth_high,
round(toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)), 2) AS rth_close,
round((toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / prior_rth_close - 1) * 100, 1) AS day_change_pct,
round((minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / prior_rth_close - 1) * 100, 1) AS low_vs_prior_pct,
round(toFloat64(sum(volume)) / 1e6, 1) AS day_shares_m,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS rth_minute_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2011-08-08 04:00:00') AND window_start < toDateTime('2011-08-08 23:59:00')SPY gapped -2.6% down from Friday $120.03 close and e no fit recover at all: di low of $112.02 come for 14:25 ET and di close, for $112.28, na -6.5% — e dey among di worst single sessions between di 2008 crisis and 2020, and di ranking panel wey dey below go put exact number for dat claim. Volume run 695.2 million SPY shares, and all 390 regular-session minute bars print: na full session, no halt, and still dat close.
Staircase, no be air pocket
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(toFloat64(argMax(close, window_start)), 2) AS bucket_close,
round(min(toFloat64(low)), 2) AS bucket_low,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2011-08-08 04:00:00') AND window_start < toDateTime('2011-08-08 23:59:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_time
ORDER BY et_timeCompare di shape with di flash crash wey happen fifteen months before: no single-bucket air pocket, no quick bounce-back — na just thirteen half-hours wey almost every close dey lower pass di one before am, e dey speed up as afternoon dey come. Dat one na conviction decline: liquidity still dey ground but prices still fall, from start to end of session. Different mechanics, different meaning, same red number — na why to read di intraday shape matter well-well, just like di daily change.
Wetin fall pass — and wetin rise
Sovereign downgrade no dey hit every ticker the same way; the tape dey sort names by exposure. Na nine liquid tickers we get here, from Friday official close to Monday own, from worst to best:
The exact SQL behind every number
SELECT
ticker,
round(fri_close, 2) AS fri_close_usd,
round(mon_close, 2) AS mon_close_usd,
round((mon_close / fri_close - 1) * 100, 1) AS change_pct
FROM (
SELECT
ticker,
argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2011-08-05') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS fri_close,
argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2011-08-08') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS mon_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('VXX', 'BAC', 'C', 'GS', 'XLF', 'SPY', 'KO', 'XLU', 'GLD')
AND window_start >= toDateTime('2011-08-05 00:00:00') AND window_start < toDateTime('2011-08-09 04:00:00')
GROUP BY ticker
)
ORDER BY mon_close / fri_close ASC, ticker ASCThe selling gader for the banks. Bank of America fall -20% — roughly one dollar for every five of im market value, e just vanish for one session — with Citigroup at -15.8% and XLF, the financial-sector fund, at -9.6%, all of dem far pass SPY own wey be -6.5%. Consumer-staple Coca-Cola drop just -2.3%. And two rows finish green: GLD, the gold fund, add 3.3%, and VXX — an exchange-traded note wey dey track short-term VIX futures, the market "fear gauge" — jump 14.6%. One tape, three stories dey happen the same time: bank rout, orderly de-risking for the broad index, and rush for insurance.
Where August 8 rank among the worst days
Na the downgrade session be historic, or e just bad? One way to answer: calculate the close-to-close change for every SPY session from 2003 reach 2025 and rank dem.
The exact SQL behind every number
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMax(toFloat64(close), window_start) AS close_usd
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
AND window_start >= toDateTime('2003-01-01 00:00:00') AND window_start < toDateTime('2026-01-01 00:00:00')
GROUP BY et_date
),
changes AS (
SELECT et_date, close_usd,
lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM daily
),
ranked AS (
SELECT et_date, close_usd,
round((close_usd / prev_close - 1) * 100, 1) AS change_pct,
row_number() OVER (ORDER BY close_usd / prev_close ASC, et_date ASC) AS day_rank
FROM changes
WHERE prev_close > 0
),
enriched AS (
SELECT et_date, change_pct, day_rank,
max(if(et_date = toDate('2011-08-08'), day_rank, 0)) OVER () AS downgrade_rank,
sum(if(day_rank <= 10 AND toYear(et_date) NOT IN (2008, 2020), 1, 0)) OVER () AS top10_outside_crises,
round((max(if(et_date = toDate('2011-08-05'), close_usd, 0)) OVER () / max(if(et_date = toDate('2011-07-22'), close_usd, 0)) OVER () - 1) * 100, 1) AS two_week_slide_pct
FROM ranked
)
SELECT
toString(et_date) AS session,
change_pct,
downgrade_rank,
top10_outside_crises,
two_week_slide_pct
FROM enriched
WHERE day_rank <= 10
ORDER BY day_rankAugust 8, 2011 rank as the 9th-worst across those twenty-three years — and na im be the only day for top ten wey no come from the 2008–09 financial crisis and the March 2020 COVID crash. But context dey cut both ways: the market don already dey retreat before S&P move. SPY don slide -10.8% over the two weeks reach downgrade Friday, while the debt-ceiling standoff run to the wire and Europe sovereign crisis spread toward Italy and Spain. Monday measure two things at once — the shock of the AAA loss and a decline wey don already dey in motion — and no query fit fully separate dem. Wetin the tape fit talk: the single worst session of that entire correction land on the first trading day after the downgrade.
Di asset wey dem downgrade con rise
Na dis part wey everi pesin wey dey tell dis story gats face: di security wey S&P downgrade na US goment debt — and e con rally.
The exact SQL behind every number
SELECT
toString(date) AS date,
round(yield_3_month, 2) AS yield_3_month,
round(yield_2_year, 2) AS yield_2_year,
round(yield_10_year, 2) AS yield_10_year,
round(yield_30_year, 2) AS yield_30_year
FROM global_markets.treasury_yields
WHERE date BETWEEN '2011-08-01' AND '2011-08-15'
ORDER BY dateDi 10-year Treasury yield close for downgrade Friday na 2.58%, e fall go 2.4% for Black Monday, and e touch 2.2% di next day. Bond yield dey fall wen im price rise, so lower yields mean sey investors dey pay more for di goment debt wey dem just cut im rating — cheaper borrowing for di borrower wey dem downgrade. Demand for safety overwhelm any doubt about di safe asset itself, as di 2-year finish dat Tuesday for 0.19%, wey dey pinned near zero. Di 2s10s yield-curve explainer dey cover dis instruments and wetin di gap between dem dey measure.
Di week wey turn anyhow
The exact SQL behind every number
SELECT
toString(et_date) AS session,
close_usd,
round(if(prev_close = 0, NULL, (close_usd / prev_close - 1) * 100), 1) AS change_pct,
shares_m
FROM (
SELECT et_date, close_usd, shares_m,
lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS close_usd,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2011-08-05 00:00:00') AND window_start < toDateTime('2011-08-12 23:59:00')
GROUP BY et_date
)
)
WHERE et_date >= toDate('2011-08-08') AND et_date <= toDate('2011-08-12')
ORDER BY et_dateWetin follow na one of di most violent weeks wey dem don ever record for both directions: Tuesday +4.6%, Wednesday -4.4%, Thursday +4.5%, Friday +0.7% — four sessions wey follow each oda dey switch between crash and rally. Tuesday own rise happen di same time Federal Reserve release dia August 9 statement, wey promise say dem go hold di federal funds rate near zero "at least through mid-2013" — na di first time FOMC tie dia guidance to calendar date instead of di old "extended period" language, na two-year promise of free money dem drop inside one market wey don already dey panic. Whipsaw weeks wey get dat kain violence na how volatility regimes dey announce demsef; di direction go clear later.
How long e really take to recover
"Di market recover within months" na di normal one-line summary wey dem dey give for dis matter. Di stored answer dey more correct, and e dey more interesting.
The exact SQL behind every number
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMax(toFloat64(close), window_start) AS close_usd
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
AND window_start >= toDateTime('2011-08-05 00:00:00') AND window_start < toDateTime('2012-07-01 00:00:00')
GROUP BY et_date
),
(SELECT close_usd FROM daily WHERE et_date = toDate('2011-08-05')) AS pre_close,
(SELECT close_usd FROM daily WHERE et_date = toDate('2011-08-08')) AS mon_close,
(SELECT min(et_date) FROM daily WHERE et_date > toDate('2011-08-05') AND close_usd >= pre_close) AS reclaim_d
SELECT
round(pre_close, 2) AS predowngrade_close,
toString(reclaim_d) AS first_reclaim_date,
countIf(et_date > toDate('2011-08-05') AND et_date < reclaim_d) AS sessions_before_first_reclaim,
toString(argMinIf(et_date, (close_usd, et_date), et_date > toDate('2011-08-05'))) AS bottom_date,
round(minIf(close_usd, et_date > toDate('2011-08-05')), 2) AS bottom_close,
round((minIf(close_usd, et_date > toDate('2011-08-05')) / pre_close - 1) * 100, 1) AS bottom_vs_predowngrade_pct,
round((minIf(close_usd, et_date > toDate('2011-08-05')) / mon_close - 1) * 100, 1) AS bottom_vs_downgrade_monday_pct,
toString(maxIf(et_date, close_usd < pre_close)) AS last_close_below,
countIf(et_date > toDate('2011-08-05') AND close_usd < pre_close) AS total_sessions_below
FROM dailySPY first close back above im pre-downgrade level — $120.03, di August 5 close — na on 2011-08-15, after only 5 sessions wey e dey below am. Dat reclaim no hold. Europe crisis deep pass through di fall, and di correction true bottom print on 2011-10-03 at $109.92 — -8.4% below di pre-downgrade close and -2.1% below even Black Monday close. For all, SPY close under im August 5 level on 41 sessions, di last one na on 2011-11-28. So di honest timeline get two side: di downgrade own dent clear within one week, while di correction wey e land inside run for almost four more months.
Wetin today dey teach
Two mechanics wey worth to keep. First one, symbolic shocks dey price fast and retrace fast: the downgrade no change any cash flow for anywhere, and the -6.5% repricing dem reclaim within 5 sessions — even as the broader correction wey surround am take months to resolve. Second one, the instrument wey dem "damage" no always be the one wey fall: Treasuries rally through their own downgrade while equities — bank stocks above all — collect the hit. When headline name one asset, watch where the selling actually land before you believe the story write itself.
US downgrade FAQ
Wetin happen to stocks wen dem downgrade US?
Di first session afta di Friday-night downgrade — Monday, August 8, 2011 — SPY fall -6.5%, e close near im low, na di 9th-worst SPY session from 2003–2025. One week of multi-percent crash and rally wey dey follow each oda come follow.
Wetin be di debt ceiling, and wetin e get to do wit di downgrade?
Di debt ceiling na legal cap on total US federal borrowing; if e hit am, e block di Treasury from issuing new debt to pay bills wey Congress don already approve. Di 2011 standoff over raising am run reach hours before di projected default date, and S&P name dat brinkmanship as one core reason for stripping di AAA rating three days later.
How big di volatility spike be for August 2011?
VXX, di exchange-traded note wey dey track short-term VIX futures, jump 14.6% on August 8 alone, and di week wey follow dey alternate between sessions of +4.6% and -4.4% on di S&P — daily swings of a size wey dem only see for 2008 and 2020.
Dem don downgrade US again since 2011?
Yes. Fitch cut di US to AA+ for August 2023, and Moody's follow to Aa1 for May 2025 — di last of di three major agencies to drop im top grade. None of di repeat coincide wit a single-day equity move wey compare to August 8, 2011; di first downgrade carry di shock of precedent, while di later ones confirm a trajectory wey markets already know.
How 2011 crash compare to 2008 or 2020?
E be single-shock repricing inside an existing bull market instead of a systemic credit unwind: e severe, e fast, and e fully retrace within months — where 2008 continue to fall for half a year and 2020 compress a bear market into four weeks.
Every panel above na stored, versioned query over di historical tape — expand di SQL to see each measurement. You wan feel dis day instead of reading am? E be one of di playable scenarios for di Strasmore Labs trading simulator.