Attack days move Brent ±3.65% — empty days move ±2.75%. No gap in size survives the arithmetic.
Who moves the price of oil — the ministers, the president, or the men firing the missiles? All 147 crisis trading days since 2026-02-28 sort into six mutually exclusive buckets by what happened into them: a headline event (20 days), an attack on shipping with nothing said (18 days), official statements and no attack (48 days), both at once (27 days), a minor recorded event (5 days), or nothing at all (29 days). Then Brent's next close, measured against the one before.
Days with an attack moved Brent a median ±3.65%. Days when nothing happened moved it ±2.75%. Statement days: ±2.61%, the empty-day number to within a rounding error. Even the 20 headline events — closure declarations, ceasefires, framework deals — print ±3.36%, 1.22× an empty day. Reshuffle the same days at random 20,000 times and gaps this size are routine: p = 0.355 for attacks, 0.823 for statements, 0.342 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 18 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.75%, 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 27 days carrying an attack and official statements together: ±3.88%, 1.41× an empty day, p = 0.289. It does not survive being looked at properly. It is the smallest of 7 p-values computed here against the same baseline, and 0.908 once corrected for that — which is roughly what 7 attempts at a null produce. It also rests on very little: at 27 observations the median is a single order statistic, and dropping any one day moves p across 0.297–0.405. 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 | 20 | ±3.36% | 1.22× | 0.34 (adj. 0.95, n.s.) |
| Attack, no statements | 18 | ±3.65% | 1.33× | 0.35 (adj. 0.95, n.s.) |
| Statements, no attack | 48 | ±2.61% | 0.95× | 0.82 (adj. 1.00, n.s.) |
| Both same day | 27 | ±3.88% | 1.41× | 0.29 (adj. 0.91, n.s.) |
| Minor recorded event | 5 | ±2.67% | 0.97× | 1.00 (adj. 1.00, n.s.) |
| Nothing recorded | 29 | ±2.75% | — | — |
| Any pre-crisis day (2019–26) | 1796 | ±1.28% | 0.47× | — |
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 299 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.19× | 0.52 (adj. 0.99, n.s.) |
| State media | 21 | ±2.41% | 0.88× | 0.72 (adj. 1.00, n.s.) |
| Parliament (Majlis) (too few days) | 2 | ±1.87% | 0.68× | — |
| Government / presidency (too few days) | 1 | ±0.66% | 0.24× | — |
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.04% on empty days, p = 0.241. 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.519 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