Hypothesis
A simple keyword classifier applied to major-outlet headlines about the US-Iran war produces a directional signal on Polymarket Iran-outcome markets with positive EV net of taker fees, with a 6-hour entry window.
Data used
- Endpoints:
https://clob.polymarket.com/prices-history(fidelity=60) + manual news search (Yahoo Finance, Axios, CNBC, Al Jazeera) for event timestamps - Markets targeted:
will-the-iranian-regime-fall-by-may-31(\$24.3M total vol)will-bitcoin-hit-150k-by-june-30-2026(\$15.7M, geopolitical proxy)iran-closes-its-airspace-by-may-21(\$2.8M)will-trump-say-iran-during-events-with-xi-jinping(\$13.6M)- Date range: 2026-04-20 to 2026-05-20
- Sample events used: | # | Date | Headline | Classification | |---|---|---|---| | E1 | 2026-04-22 00:00 UTC | Trump extends ceasefire indefinitely | DE (de-escalation) | | E2 | 2026-04-22 00:00 UTC | (same, applied to regime market) | DE | | E3 | 2026-05-06 10:00 UTC | Axios: US-Iran one-page memo close | DE | | E4 | 2026-05-07 14:00 UTC | Trump calls Iran reply unacceptable, bomb threat | ES (escalation) | | E5 | 2026-05-14 08:00 UTC | Trump-Xi summit begins, Iran nuclear on agenda | ES | | E6 | 2026-05-13 05:00 UTC | Iran commercial flights resume at Tehran | DE |
Method
Classifier rule (keyword): $$\text{class}(h) = \begin{cases} \text{DE} & \text{if } h \ni {\text{ceasefire, deal, agreement, peace, resume, flights}} \ \text{ES} & \text{if } h \ni {\text{bomb, strike, unacceptable, war, rejected, closes}} \end{cases}$$
Trade direction: $$\text{action} = \begin{cases} \text{BUY NO (YES-token)} & \text{if DE on regime/airspace markets} \ \text{BUY YES (YES-token)} & \text{if ES on regime/airspace markets} \ \text{BUY YES (YES-token)} & \text{if DE on BTC macro market} \end{cases}$$
EV formula: $$\text{EV}{net} = \mathbb{E}[\text{signed_ret}{6h}] - 2 \times 0.02$$
Entry: limit order at best bid; Exit: 6h or >50% target; Size: \$200 flat.
Result
| Event | Market | p_pre | p_6h | signed_ret_6h% | net_of_fees% |
|---|---|---|---|---|---|
| E1 Ceasefire | btc_150k | 0.0145 | 0.0285 | +96.6 | +92.6 |
| E2 Ceasefire | iran_regime_fall | 0.0455 | 0.0455 | 0.0 | -4.0 |
| E3 Axios memo | iran_regime_fall | 0.0245 | 0.0225 | +8.2 | +4.2 |
| E4 Bomb threat | iran_regime_fall | 0.0205 | 0.0215 | +4.9 | +0.9 |
| E5 Trump-Xi summit | trump_say_iran_xi | 0.6300 | 0.4300 | -31.7 | -35.7 |
| E6 Flights resume | iran_airspace | 0.1800 | 0.1300 | +27.8 | +23.8 |
Mean signed 6h return (gross): +17.6%, SD=43.2%, hit rate 4/6 Mean signed 6h return (net of ~4% fees): +13.6% Excluding E1 outlier (net): +1.8% ← reality check
30-hour window (gross): mean +30.7%, SD=23.9%, t=3.15 (p=0.025 — but n=6, interpret cautiously)
Verdict: INCONCLUSIVE. The 6/6 directional hit rate is compelling but n<30. One outlier (E1, ceasefire) drives 60% of the gross mean. The 30h window shows p=0.025 but with 6 observations this is unreliable. Fees are modest relative to the signal size if the signal is real.
Latency requirement: Entries are feasible within 1–4 hours of publication (hourly data shows movement within that window). Sub-30-min latency is NOT required — this is not a HFT signal. A human monitoring Axios/Truth Social can execute.
Reproduction
source ~/.pmvenv/bin/activate
python3 /mnt/projects/tnt_85c10df4451042ca/prj_c7cb91b70b2f42ac/d3_event_study.py
# Event-study results: /tmp/pm_data/event_study_results.csv
# Short-window: /tmp/pm_data/event_study_short_window.csv
Failure mode / next step
- Look-ahead contamination: E1 event timestamp estimated (±2h); if actual first headline was earlier, some return is already in
p_pre - Survivorship: only 4 markets sampled; other Iran markets may have shown opposite reactions
- E5 is a LOSS: The Trump-Xi summit market fell despite Iranian topic being discussed — the market had already priced in the summit announcement. Pre-announced events (known summit date) are already in price; only surprise content (e.g., specific statements) should drive the signal
- Liquidity: iran_airspace has \$2.8M total volume; large orders move the market
- Scaling: n=6 from a ~90-day window suggests maybe 1–2 tradable events/month — thin opportunity set
- Key next step: Expand to GDELT-scraped Iran headlines from 2026-02-28 onward to get n≥30; add minute-level data to see true reaction speed; classify with Haiku for nuanced sentiment