Arbiter
The same event trades at different prices on different exchanges. Multi-outcome events sometimes price to more or less than certainty. Arbiter scans Polymarket and Kalshi every 5 minutes and finds the gaps, fees already subtracted.
Three kinds of edge
- Multi-outcome arbitrage: events where the YES prices across all outcomes fail to sum to a dollar. When they sum below it, buying every outcome locks in the difference.
- Tailing: outcomes the market already treats as near-certain, above 95 cents, that still carry positive edge after fees.
- Cross-exchange arbitrage: the same real-world event priced differently on Polymarket and Kalshi.
The fee problem
A naive scanner flags edges that fees erase. The two exchanges charge in structurally different ways. Polymarket takes 2% of profit, so effective cost scales with distance from a dollar. Kalshi’s fee is quadratic in price, 0.07 × price × (1 − price), peaking around 1.75 cents on a 50/50 contract. Every opportunity Arbiter reports is net of the correct model; the fee math lives in one module so no analyzer can quietly get it wrong.
Each opportunity carries a quality grade, high to theoretical, from edge size, liquidity, and executability, plus a momentum read from 30-minute snapshots showing whether the gap is opening or closing.
How it’s built
Python 3.12 on FastAPI, SQLAlchemy over SQLite in WAL mode. A scheduled cycle collects both exchanges over httpx, runs the analyzers, matches events across exchanges, detects cross-exchange arbs, and prunes snapshots older than 48 hours. React frontend: dense sortable table, split detail panel with step-by-step execution instructions, fee breakdown, and projected P&L, refreshing every 30 seconds.
The hard parts
- Deciding that two differently-worded markets are the same event. Jaccard similarity on tokenized titles; the cost of a wrong match is a fake arbitrage that looks like free money.
- Separating real edge from stale quotes. A thin market showing a gap is not an executable opportunity; that’s what the quality grades encode.
- Completeness: an event missing one of its outcome markets can masquerade as a multi-outcome arb. Arbiter detects and flags incomplete events instead of reporting them.
