Hypothesis
For mutually exclusive and exhaustive (MEE) event groups on Polymarket, $\sum_i a_i < 1$ (buy-all arb) or $\sum_i b_i > 1$ (sell-all arb) should occur when the individual YES tokens are mispriced relative to each other.
Data used
- 2 000 events fetched from gamma-api, 2026-05-20
- MEE candidates identified by keyword heuristics (contains "range", "between", "rank", price bracket labels)
- 36 event groups scanned; CLOB top-of-book fetched for all YES tokens in each group
Sample — genuine MEE event:
"Where will 2026 rank among the hottest years on record?" (n=6 outcomes)
Outcomes: hottest | 2nd-hottest | 3rd | 4th | 5th | other
Asks: 0.330 | 0.580 | 0.023| ... | 0.005|...
sum(asks) = 0.991 → buy_gross = 0.009
min(ask_depth) = 59 units → max_profit = 0.009 × 59 = $0.53
Method
$$\text{buy_gross} = 1 - \sum_i a_i \quad (\text{arb if} > 0)$$ $$\text{sell_gross} = \sum_i b_i - 1 \quad (\text{arb if} > 0)$$
Execution: buy one unit of every YES token; exactly one pays $\$1$ at resolution.
Size = $\min_i(\text{ask_depth}_i)$ — limited by the thinnest outcome.
Critical exclusions applied (false positives in raw scan): - Cumulative threshold events ("Gold above $6000", "above $6500"...) — NOT MEE; multiple can resolve YES simultaneously - Multiple-winner events ("Who will announce Presidential run", "Fields Medal" with up to 4 winners) — NOT MEE - Competitive primary markets ("Who will advance from primary") — top-2 advance, not MEE
Result
| Event (genuine MEE) | Type | gross | max_profit | Status |
|---|---|---|---|---|
| Where will 2026 rank hottest? | buy-all | +0.0090 | $0.53 | micro-profit |
| What will Gold settle at Jun? | buy-all | +0.0160 | $0.26 | micro-profit |
| What will Crude Oil settle Jun? | buy-all | +0.0070 | $0.01 | trivial |
| What will Fed rate be end 2026? | sell-all | +0.0100 | $0.05 | trivial |
False positives from non-MEE events: 7 (excluded — not arbs).
Verdict: Violations technically exist (gross > 0, fees ≈ 0 on CLOB), but are economically unactionable — max profit across all events combined is < $1 due to thin book depth on rarer outcomes. The market is well-calibrated at the MEE aggregate level; the residual gap ($\leq 1.6\,c$) is smaller than any reasonable gas or slippage estimate on a live platform.
Reproduction
source ~/.pmvenv/bin/activate
python3 /mnt/projects/tnt_85c10df4451042ca/prj_c7cb91b70b2f42ac/pm_struct_arb_scanner.py
# results: /tmp/pm_data/type_b_results.json
Failure mode / next step
- New MEE events added near resolution may show larger gaps if book is thin and prices haven't been updated
- A real-time alert system watching
sum(asks)across all MEE groups could catch larger violations when they emerge (e.g., just after a resolution event that prices one outcome at 0 but others haven't adjusted yet) - Better MEE detection: group by
eventId+ require outcomes to be exhaustive partitions (checkoutcomePricessum ≈ 1.0 as MEE signal instead of keyword heuristics)