Flash crash de 2010, minute par minute
Le 6 mai 2010, près de mille milliards de dollars de capitalisation ont disparu puis sont revenus en 36 minutes. La séance, minute par minute.
Le 6 mai 2010, le marché actions américain s’est effondré avant de se redresser en un peu plus d’une demi-heure. Ce flash crash reste l’épisode le plus singulier de l’histoire récente des marchés. Près de mille milliards de dollars de capitalisation boursière ont disparu, puis sont pour l’essentiel revenus. Entre-temps, des titres très connus se sont échangés à 0.01 $ par action, puis à 100000 $. Vous trouverez ci-dessous le détail des transactions minute par minute, les horaires, les titres concernés et une requête enregistrée derrière chaque chiffre. Développez un panneau pour afficher le SQL.
La séance, résumée en une ligne
| Clôture précédente | Ouverture RTH | Gap (%) | Plus bas RTH | Plus bas ET | Clôture RTH | Variation du jour (%) | Plus bas vs précédent (%) | Actions du jour (M) | Barres minute RTH |
|---|---|---|---|---|---|---|---|---|---|
| 116.83 | 116.26 | -0.5 | 105 | 14:45 | 112.88 | -3.4 | -10.1 | 639.9 | 390 |
Le SQL exact derrière chaque chiffre
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('2010-05-05 00:00:00') AND window_start < toDateTime('2010-05-06 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(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('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-06 23:59:00')La séance était déjà nerveuse. Les gros titres sur la dette grecque ont alimenté le flux d’actualité toute la matinée, et SPY a progressivement reculé depuis son ouverture à $116.26. Puis le marché s’est effondré : le plus bas du jour, à $105, a été enregistré à 14:45 ET, soit -10.1% sous la clôture précédente de $116.83. À la cloche, SPY avait regagné du terrain jusqu’à $112.88, en baisse de -3.4% sur la séance, mais encore très au-dessus du point bas de ce trou d’air. Volume : 639.9 millions d’actions, l’une des séances les plus actives de l’histoire de SPY.
Le krach, minute par minute
Les graphiques en demi-heure masquent cet épisode. À la résolution d’une minute, il est parfaitement visible. Voici l’évolution de SPY de 14 h à 15 h 30, heure de l’Est :
| Minute ET | Clôture ($) | Plus bas ($) | Actions (M) |
|---|---|---|---|
| 14:00 | 114.83 | 114.7 | 0.67 |
| 14:01 | 114.8 | 114.76 | 0.93 |
| 14:02 | 114.75 | 114.71 | 0.93 |
| 14:03 | 114.68 | 114.63 | 1.19 |
| 14:04 | 114.58 | 114.53 | 1.5 |
| 14:05 | 114.58 | 114.56 | 1.44 |
| 14:06 | 114.4 | 114.4 | 1.73 |
| 14:07 | 114.52 | 114.37 | 1.48 |
| 14:08 | 114.33 | 114.31 | 1.41 |
| 14:09 | 114.25 | 114.21 | 2.27 |
| 14:10 | 114.12 | 114.1 | 1.91 |
| 14:11 | 113.91 | 113.85 | 3.93 |
| 14:12 | 114.16 | 113.87 | 2.9 |
| 14:13 | 114.25 | 114.1 | 2.44 |
| 14:14 | 114.21 | 114.14 | 1.49 |
| 14:15 | 114.19 | 114.16 | 1.31 |
| 14:16 | 114.07 | 114.05 | 1.49 |
| 14:17 | 113.82 | 113.82 | 2.07 |
| 14:18 | 113.86 | 113.6 | 3.3 |
| 14:19 | 113.67 | 113.66 | 1.61 |
Le SQL exact derrière chaque chiffre
SELECT
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_minute,
round(toFloat64(close), 2) AS close_usd,
round(toFloat64(low), 2) AS low_usd,
round(toFloat64(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-06 18:00:00') AND window_start < toDateTime('2010-05-06 19:30:00')
ORDER BY window_startLe rapport d’analyse conjoint de la SEC et de la CFTC situe l’épisode entre environ 14 h 32, heure de l’Est, lorsque qu’un important programme de vente automatisé a commencé à exécuter un ordre portant sur environ 75 000 contrats futures E-mini S&P 500, soit près de 4,1 milliards de dollars, et environ 15 h 08, lorsque les cours de marché avaient récupéré l’essentiel de leur plongeon. L’épisode a donc duré trente-six minutes. La trajectoire ci-dessus correspond à ce déroulement. SPY a terminé la minute 14:32 à $113.15. Douze minutes plus tard, la minute 14:44 a enregistré 9.21 millions d’actions échangées, contre 1.44 millions lors d’une minute calme comme 14:05. La minute 14:45 a marqué le plus bas de la séance à $105. À la clôture de la minute 15:08, SPY s’établissait à $113.63, au-dessus du niveau où la baisse avait commencé. Un aller-retour complet en environ une demi-heure.
Un seul arrêt de cotation s’est déclenché ce jour-là, et il a duré cinq secondes. À 14 h 45 min 28 s, pendant la même minute que le point bas ci-dessus, la fonctionnalité Stop Logic du CME a interrompu les échanges sur les contrats futures E-mini, selon le rapport officiel. Les achats sont revenus dès la fin de l’interruption. Les coupe-circuits généralisés instaurés en 2010 étaient fondés sur le Dow, avec des seuils de 10, 20 et 30 %. Les règles alors en vigueur ne prévoyaient aucun arrêt pour une baisse de 10 % aussi tard dans la séance. Aucun ne s’est donc déclenché. Les coupe-circuits sur les actions individuelles n’existaient pas encore. Ils font partie des dispositifs créés à la suite de cet épisode.
À l’origine de la vague de ventes
Le vendeur n’a jamais constitué un mystère pour les autorités de marché. Le rapport conjoint de la SEC et de la CFTC décrit un seul groupe de fonds communs de placement, identifié dans la presse comme Waddell & Reed, qui utilisait un algorithme automatisé pour vendre des contrats E-mini à un rythme déterminé par les volumes, sans tenir compte du prix ni du moment. À mesure que les volumes explosaient, l’algorithme vendait plus rapidement, sur un marché où les intermédiaires à haute fréquence avaient cessé d’absorber les positions et se les revendaient entre eux. Le rapport a qualifié ces volumes de « patate chaude ».
Cinq ans plus tard, un deuxième nom a été associé à cette journée. Les autorités américaines ont arrêté en avril 2015 le trader londonien Navinder Singh Sarao. Elles l’accusaient d’avoir pratiqué le spoofing sur le carnet d’ordres des contrats E-mini, en empilant des ordres qu’il n’avait jamais eu l’intention d’exécuter, le 6 mai et lors de centaines d’autres séances. Il a plaidé coupable en 2016 et a été condamné en janvier 2020. L’importance de ses ordres cet après-midi-là reste débattue. La leçon structurelle exposée ci-dessous n’en dépend pas.
Là où les ventes ont été les plus brutales
| Minute ET | Ouverture minute | Plus bas minute | Baisse intraminute ($) | Actions (M) |
|---|---|---|---|---|
| 14:49 | 112.52 | 106.8 | 5.72 | 4.98 |
| 14:48 | 111.31 | 106.01 | 5.3 | 4.75 |
| 15:09 | 113.63 | 108.37 | 5.26 | 3.51 |
| 14:50 | 112.02 | 108.22 | 3.8 | 2.22 |
| 14:45 | 108.69 | 105 | 3.69 | 7.24 |
Le SQL exact derrière chaque chiffre
SELECT
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_minute,
round(toFloat64(open), 2) AS minute_open,
round(toFloat64(low), 2) AS minute_low,
round(toFloat64(open) - toFloat64(low), 2) AS drop_within_minute_usd,
round(toFloat64(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-06 18:00:00') AND window_start < toDateTime('2010-05-06 19:30:00')
ORDER BY drop_within_minute_usd DESC
LIMIT 5La pire minute à elle seule a fait perdre $5.72 entre l’ouverture et le point bas, à 14:49 ET, sur 4.98 millions d’actions en soixante secondes. Le message du tape est simple et durable : les cours ont besoin d’acheteurs fermes, et pendant quelques minutes, ils ont disparu. C’est l’illustration la plus nette jamais enregistrée de l’importance de comprendre le fonctionnement d’un ordre au marché : chaque stop-loss déclenché pendant cette fenêtre est devenu un ordre au marché à la recherche d’acheteurs qui n’existaient pas. Le NBBO est le rythme cardiaque d’un marché ; cet après-midi-là, il s’est arrêté.
Un centime et 100 000 dollars : les prints absurdes
Lorsque les véritables bids ont disparu, les ordres entrants ont fait baisser les cours jusqu’aux quotes restantes, y compris les « stub quotes » placées par les market makers très loin de tout prix plausible. Le tape brut des transactions conserve encore ces prints :
| ticker | Print le plus bas | Print le plus haut | Prints à 1 cent | Prints de 100 k | Prints |
|---|---|---|---|---|---|
| AAPL | 199.25 | 100000 | 0 | 2 | 97158 |
| ACN | 0.01 | 41.53 | 43 | 0 | 10912 |
| BID | 27.85 | 100000 | 0 | 2 | 8015 |
| PG | 39.37 | 62.59 | 0 | 0 | 56242 |
Le SQL exact derrière chaque chiffre
SELECT
ticker,
round(min(toFloat64(price)), 2) AS lowest_print,
round(max(toFloat64(price)), 2) AS highest_print,
countIf(toFloat64(price) <= 0.05) AS penny_prints,
countIf(toFloat64(price) >= 99999) AS hundred_k_prints,
count() AS prints
FROM global_markets.stocks_trades
WHERE ticker IN ('ACN', 'AAPL', 'BID', 'PG')
AND sip_timestamp >= toDateTime('2010-05-06 18:30:00') AND sip_timestamp < toDateTime('2010-05-06 19:30:00')
GROUP BY ticker
ORDER BY ticker ASCAccenture (ACN), un cabinet de conseil qui cotait près de $41.49 cet après-midi-là, a enregistré 43 prints à cinq cents ou moins, avec un point bas à $0.01. Dans l’autre sens, Apple a enregistré 2 transactions à $100000 l’action, et Sotheby’s a fait de même à 2 reprises.
Les places boursières ont ensuite annulé toutes les transactions exécutées à plus de 60 % de leur cours de référence avant le krach. Cette règle explique l’asymétrie observée dans les données. Les prints à un centime d’ACN ont disparu. Son plus bas survivant sur une barre d’une minute, à $17.74, se situe -57.2% sous le cours de référence, juste à l’intérieur du seuil d’annulation. Procter & Gamble n’a jamais coté sur un stub quote : sa pire transaction sur la période, à $39.37, était -36.7% sous son cours de référence. Tous les stop-loss exécutés à ce niveau ont donc été conservés. Les prints à un centime d’ACN ont franchi ce seuil et ont été effacés ; la pire exécution sur P&G est restée à l’intérieur et a été maintenue. Cette limite arbitraire en a davantage appris aux traders sur les types d’ordres que n’importe quelle brochure.
Ampleur de la baisse
Sur la même période, en ne retenant que les transactions exécutées, voici les agrégats à la minute, mesurés par rapport au cours de chaque valeur à 14 h 30 :
| ticker | Avant crash à 14:30 | Plus bas du crash | Plus bas vs 14:30 (%) | Plus bas ET | Clôture vs 14:30 (%) |
|---|---|---|---|---|---|
| ACN | 41.49 | 17.74 | -57.2 | 14:47 | -0.9 |
| PG | 62.17 | 39.37 | -36.7 | 14:47 | -2.3 |
| MMM | 84.45 | 67.98 | -19.5 | 14:46 | -0.3 |
| SPY | 113.35 | 105 | -7.4 | 14:45 | -0.4 |
| DIA | 106.05 | 99.16 | -6.5 | 14:47 | -0.7 |
| IWM | 66.84 | 63.36 | -5.2 | 14:45 | 0.7 |
Le SQL exact derrière chaque chiffre
SELECT
ticker,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 870), 2) AS pre_crash_1430,
round(minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 871 AND 915), 2) AS crash_low,
round((minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 871 AND 915) / argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 870) - 1) * 100, 1) AS low_vs_1430_pct,
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 871 AND 915), 'America/New_York'), '%H:%i') AS low_et,
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) / argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 870) - 1) * 100, 1) AS close_vs_1430_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('ACN', 'PG', 'MMM', 'IWM', 'DIA', 'SPY')
AND window_start >= toDateTime('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-06 23:59:00')
GROUP BY ticker
ORDER BY low_vs_1430_pct ASCLa dispersion est le principal enseignement. Le point bas d’ACN est resté à -57.2% sous son niveau de référence, contre -36.7% pour P&G. Les ETF larges ont atteint leur point bas avec une baisse à un chiffre : DIA, l’ETF répliquant le Dow Jones, à -6.5%, et IWM à -5.2%. Ces minutes sur le DIA ont été présentées dans le monde entier comme la plus forte baisse intrajournalière en points de l’histoire du Dow Jones à cette date. La dernière colonne mesure la récupération : chacun des six titres a clôturé à environ trois pour cent de son niveau de 14 h 30, comme si l’heure intermédiaire n’avait été qu’une rumeur.
Comparaison du 6 mai avec les autres journées de krach
Comparons le flash crash aux autres célèbres débâcles en séance à l’ère des barres à la minute (ces données sur les actions remontent à 2003 ; le Black Monday de 1987 est antérieur) :
| Séance | Plus bas vs précédent (%) | Clôture vs précédente (%) | Rebond depuis le plus bas (%) |
|---|---|---|---|
| 2008-09-29 | -8.6 | -7 | 1.7 |
| 2010-05-06 | -10.1 | -3.4 | 7.5 |
| 2015-08-24 | -7.7 | -4.1 | 3.9 |
| 2018-02-05 | -4.4 | -4.1 | 0.3 |
| 2020-03-16 | -12.4 | -11.6 | 0.9 |
Le SQL exact derrière chaque chiffre
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
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,
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 rth_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= toDateTime('2008-09-26 04:00:00') AND window_start < toDateTime('2008-09-30 00:00:00'))
OR (window_start >= toDateTime('2010-05-05 04:00:00') AND window_start < toDateTime('2010-05-07 00:00:00'))
OR (window_start >= toDateTime('2015-08-21 04:00:00') AND window_start < toDateTime('2015-08-25 00:00:00'))
OR (window_start >= toDateTime('2018-02-02 04:00:00') AND window_start < toDateTime('2018-02-06 00:00:00'))
OR (window_start >= toDateTime('2020-03-13 04:00:00') AND window_start < toDateTime('2020-03-17 00:00:00')))
GROUP BY et_date
)
SELECT
toString(et_date) AS session,
round((rth_low / prev_close - 1) * 100, 1) AS low_vs_prior_pct,
round((rth_close / prev_close - 1) * 100, 1) AS close_vs_prior_pct,
round((rth_close / rth_low - 1) * 100, 1) AS bounce_off_low_pct
FROM (
SELECT et_date, rth_low, rth_close,
lagInFrame(rth_close) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM daily
)
WHERE et_date IN (toDate('2008-09-29'), toDate('2010-05-06'), toDate('2015-08-24'), toDate('2018-02-05'), toDate('2020-03-16'))
ORDER BY et_dateLe 6 mai 2010 n’est pas le point bas le plus marqué du tableau : le 16 mars 2020 a clôturé à -12.4% sous sa clôture précédente, contre -10.1% pour le flash crash. En revanche, aucune autre séance n’approche le rebond observé ce jour-là. SPY a clôturé 7.5% au-dessus de son point bas du 6 mai, contre 3.9% pour la deuxième meilleure reprise de l’échantillon (le 24 août 2015, lui-même un mini flash crash), et seulement 1.7% et 0.9% lors des journées de krach de l’ère Lehman et du COVID. Une repricing durable se traduit par un cours qui reste bas jusqu’à la clôture ; un trou de liquidité se résorbe brutalement l’après-midi même.
Le V a-t-il tenu ?
Deux questions permettent de qualifier un krach : à quelle vitesse l’ancien cours a été retrouvé et si le point bas de la panique a été revisité. Les deux réponses sont documentées :
| Plus bas du flash crash | Clôture du 5 mai | Première clôture au-dessus du 5 mai | Séances jusqu'à reprise | Première clôture sous le plus bas | Clôture de cette séance | Séances jusqu'à cassure |
|---|---|---|---|---|---|---|
| 105 | 116.83 | 2010-05-12 | 4 | 2010-06-29 | 104.22 | 37 |
Le SQL exact derrière chaque chiffre
WITH
(
SELECT minIf(toFloat64(low), (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('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-07 00:00:00')
) AS flash_low
SELECT
round(any(flash_low), 2) AS flash_crash_low,
round(any(may5_close), 2) AS may5_close,
toString(any(first_above_date)) AS first_close_above_may5,
countIf(et_date > toDate('2010-05-06') AND et_date <= first_above_date) AS sessions_until_reclaim,
toString(any(first_below_date)) AS first_close_below_low,
round(anyIf(close_usd, et_date = first_below_date), 2) AS close_that_session,
countIf(et_date > toDate('2010-05-06') AND et_date <= first_below_date) AS sessions_until_break
FROM (
SELECT et_date, close_usd, flash_low, may5_close,
min(if(et_date > toDate('2010-05-06') AND close_usd < flash_low, et_date, toDate('2100-01-01'))) OVER () AS first_below_date,
min(if(et_date > toDate('2010-05-06') AND close_usd > may5_close, et_date, toDate('2100-01-01'))) OVER () AS first_above_date
FROM (
SELECT et_date, close_usd, flash_low,
max(if(et_date = toDate('2010-05-05'), close_usd, 0)) OVER () AS may5_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,
flash_low
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-05 04:00:00') AND window_start < toDateTime('2011-01-01 00:00:00')
GROUP BY et_date
)
)
)Le rebond a été rapide : SPY a clôturé de nouveau au-dessus de son cours de clôture du 5 mai, à $116.83, seulement 4 séances plus tard, le 2010-05-12. Le V a tenu, pendant un temps. Mais le point bas du flash crash n’est pas resté une anomalie ponctuelle : 37 séances après le krach, le 2010-06-29, SPY a clôturé à $104.22, sous le point bas de la panique, à $105, pendant la vague de ventes liée à la dette souveraine européenne qui a dominé cet été-là. Toute la différence est là : le flash crash a atteint ce niveau en quelques minutes, sans aucune information nouvelle, puis a rebondi ; l’été suivant, le marché y est revenu sur plusieurs semaines et y est resté. Le cours est le prix auquel vous pouvez effectuer une transaction à cet instant ; la valeur est ce qui résiste jusqu’à la fin de la séance.
Ce qui a changé par la suite
Le flash crash a donné naissance au régime moderne de coupe-circuits : bandes Limit Up/Limit Down pour les actions individuelles et règles révisées de suspension à l’échelle du marché. Ce dispositif a été visible lors de crises ultérieures (suspensions de mars 2020 en sont les héritières directes). Les stub quotes ont été interdites. Les règles applicables aux transactions manifestement erronées ont été formalisées. Les ordres à terme de grande taille font désormais l’objet d’un contrôle de leur exécution tenant compte des prix. La structure de marché sur laquelle vous intervenez aujourd’hui a été largement conçue dans les trente-six minutes qui ont suivi.
FAQ sur le flash crash
Quelle a été la cause du flash crash de 2010 ?
Le rapport officiel de la SEC et de la CFTC décrit un programme automatisé de vente d’E-mini d’environ 4,1 milliards de dollars, exécuté dans un marché peu liquide. Les intermédiaires de trading haute fréquence ont d’abord amplifié les volumes, puis se sont retirés. Des articles de presse ont identifié le vendeur comme étant la société de fonds communs de placement Waddell & Reed. Le trader Navinder Sarao a ensuite été poursuivi pour spoofing sur ce même marché ce jour-là. Selon le déroulement observé sur le tape, la liquidité s’est évaporée et les cours sont tombés jusqu’au prochain bid en attente, parfois à un centime.
À quelle heure le flash crash a-t-il commencé et s’est-il terminé ?
La chronologie des régulateurs va d’environ 14 h 32 ET, lorsque les ventes automatisées ont commencé, à environ 15 h 08, lorsque les cours dans leur ensemble avaient récupéré l’essentiel de leur chute. L’épisode a duré 36 minutes. Le point bas de SPY a été enregistré à 14:45 ET, soit -10.1% sous la clôture précédente. Il a fallu environ 23 minutes pour revenir, depuis le point bas, aux niveaux précédant la chute.
Quelles actions ont été touchées par le flash crash de 2010 ?
Presque toutes les actions ont baissé. Les cas les plus marquants concernaient toutefois les titres dont les bids ont totalement disparu. Accenture a été enregistré à seulement $0.01. Apple et Sotheby’s ont été cotés à $100000. Procter & Gamble est descendu jusqu’à $39.37, soit -36.7% sous son niveau de l’après-midi. Les transactions situées à plus de 60 % des cours précédant le krach ont été annulées. Les exécutions sur P&G ont été maintenues.
Les cotations ont-elles été interrompues pendant le flash crash ?
Non. Aucun circuit breaker applicable à l’ensemble du marché ne s’est déclenché le 6 mai 2010. Les règles alors en vigueur ne prévoyaient pas d’interruption pour une baisse de cette ampleur aussi tard dans la séance. La seule pause de la journée a duré cinq secondes. Le mécanisme Stop Logic du CME a brièvement interrompu les contrats futures E-mini à 14 h 45 min 28 s ET, pendant la même minute que le point bas de l’indice. Les circuits breakers sur les actions individuelles et les bandes Limit Up/Limit Down ont été créés par la suite.
Un flash crash peut-il se reproduire ?
Des épisodes de moindre ampleur se sont déjà produits. Des tickers individuels atteignent régulièrement les seuils d’interruption LULD, et de mini flash events surviennent périodiquement. À ce jour, les épisodes généralisés comparables à celui de 2010 ont été contenus par les mécanismes d’interruption qu’ils ont contribué à faire mettre en place. La réponse honnête est que le facteur structurel — une liquidité capable de se retirer en quelques millisecondes — est permanent.
Notes sur les données
Notes complètes
- Dans le panel minute par minute, la barre de 15 h 09 comporte un plus bas aberrant de 108.37 quelques minutes après le rebond. Cette même barre figure aussi dans le tableau des minutes affichant les plus fortes baisses. Cela concorde avec des prints publiés tardivement, que les agrégats affectent à la minute de leur arrivée. La séance du 6 mai en comporte beaucoup.
- Trades annulés et agrégats : le tape brut d’ACN affiche des prints à $0.01, tandis que le plus bas de sa barre minute est de $17.74. Les agrégats par minute reflètent l’enregistrement après annulation, alors que le tape brut reprend les prints initiaux.
- La « référence de 14 h 30 » du panel de dispersion correspond, pour chaque valeur, au dernier cours de clôture d’une barre minute de la séance régulière à 14 h 30 ET ou avant. La fenêtre du krach s’étend de 14 h 31 à 15 h 15.
- QQQ est absent des panels comparant les valeurs : en 2010, il se négociait sous le ticker QQQQ.
Chaque panel ci-dessus correspond à une requête versionnée enregistrée sur le tape historique. Développez le SQL pour voir le détail de chaque mesure. Vous voulez ressentir cette séance plutôt que la lire ? Elle fait partie des scénarios jouables du simulateur de trading de Strasmore Labs.