Attack days move Brent ±3.4% — empty days move ±2.66%. No gap in size survives the arithmetic.
Who moves the price of oil — the ministers, the president, or the men firing the missiles? All 152 crisis trading days since 2026-02-28 sort into six mutually exclusive buckets by what happened into them: a headline event (25 days), an attack on shipping with nothing said (19 days), official statements and no attack (30 days), both at once (44 days), a minor recorded event (7 days), or nothing at all (27 days). Then Brent's next close, measured against the one before.
Days with an attack moved Brent a median ±3.4%. Days when nothing happened moved it ±2.66%. Statement days: ±2.74%, the empty-day number to within a rounding error. Even the 25 headline events — closure declarations, ceasefires, framework deals — print ±3.17%, 1.19× an empty day. Reshuffle the same days at random 20,000 times and gaps this size are routine: p = 0.389 for attacks, 0.941 for statements, 0.475 for the headline events, and those are before correcting for having run 7 such tests against one baseline.
A null result is not proof of no effect: with 19 attack days, an ordinary-sized effect would be invisible here even if it were real. What it does say is that nothing rises above the background — and the background is the finding. A day of this crisis with nothing recorded in it still swings ±2.66%, against ±1.28% across 1796 pre-crisis trading days since 2019. The empty days of this crisis are 2.1× a normal trading day. The strait is the event; the attacks and the announcements are texture on a price that has already repriced for permanent risk.
The largest gap on the page is the 44 days carrying an attack and official statements together: ±3.01%, 1.13× an empty day, p = 0.591. It does not survive being looked at properly. It is the smallest of 7 p-values computed here against the same baseline, and 0.998 once corrected for that — which is roughly what 7 attempts at a null produce. It also rests on very little: at 44 observations the median is a single order statistic, and dropping any one day moves p across 0.495–0.614. Either escalation that is both done and announced is the one thing the tape still notices, or violent days simply generate speeches; this cannot separate them.
| Day type | Days | Median move | vs quiet day | p vs quiet |
|---|---|---|---|---|
| Major curated event | 25 | ±3.17% | 1.19× | 0.47 (adj. 0.99, n.s.) |
| Attack, no statements | 19 | ±3.4% | 1.28× | 0.39 (adj. 0.97, n.s.) |
| Statements, no attack | 30 | ±2.74% | 1.03× | 0.94 (adj. 1.00, n.s.) |
| Both same day | 44 | ±3.01% | 1.13× | 0.59 (adj. 1.00, n.s.) |
| Minor recorded event | 7 | ±2.67% | 1× | 1.00 (adj. 1.00, n.s.) |
| Nothing recorded | 27 | ±2.66% | — | — |
| Any pre-crisis day (2019–26) | 1796 | ±1.28% | 0.48× | — |
A per-speaker league table is the thing everyone asks for, and building it honestly mostly shows why it cannot exist yet. Attributing a day to an institution needs a clean day: it spoke, nobody else did, nothing was attacked, nothing else was recorded. Across 365 Iranian statements from 33 named individuals, that leaves 2 above the 5-day floor. The rest have one to four observations, which is a number, not a finding; they are greyed out rather than ranked. Every week the crisis runs, this gets less useless.
| Institution (clean days only) | Days | Median move | vs quiet day | p vs quiet |
|---|---|---|---|---|
| Trump | 9 | ±3.28% | 1.23× | 0.54 (adj. 1.00, n.s.) |
| State media | 5 | ±2.26% | 0.85× | 1.00 (adj. 1.00, n.s.) |
| Parliament (Majlis) (too few days) | 2 | ±1.87% | 0.7× | — |
| Government / presidency (too few days) | 1 | ±0.66% | 0.25× | — |
One caveat that cuts against this article's own headline. Everything above measures the SIZE of moves, not their direction, and direction is the one place the data is not flat: on 9 clean Trump days Brent's median move is -2.12% — down on 6 of 9 — against -0.16% on empty days, p = 0.24. That is uncorrected for the several comparisons on this page and would not survive correction, and 9 days is far too few to trade on. It is reported because the same days give p = 0.543 on magnitude, and publishing only the test that agrees with the headline would be choosing the statistic that flatters the story.
† Method: each statement, post, attack and curated event is priced at the first Brent close that could have priced it — the first close on or after its date, or on or after the next day when it is timed at or after the 16:30 London assessment (a close that printed before a post cannot have priced it; items with no time use their date) — so Saturday news prices at Monday’s close and a Tuesday-evening post at Wednesday’s. Days, not utterances, are the unit — two ministers on one day is one observation. Event days are removed from the other classes first, at every tier: six tier-1 events appear in neither the statements nor the incidents file, and leaving them in the baseline would define "an empty day" using the crisis’s largest moves. Medians, not means. p-values are two-sided permutation tests (20,000 reshuffles, fixed seed) versus empty days; "adj." applies a Šidák correction for the number of comparisons run against that same baseline. With these sample sizes only large effects are detectable, so a high p means "not shown", never "not there". This is a conditional distribution of price moves, not a causal claim.
Computed, not asserted — every number here is derived from public data: official EIA Brent closes via FRED, IMF PortWatch transit counts, Polymarket and Kalshi odds, and source-linked curated events. Method and caveats · Atom feed · llms.txt