VIG
the house takes its cut — the research record
2026-08-02 17:49
← 06 RESEARCH / deep_research_impl_2026-08-01.md

Implementing the patient games

Deep research report — 2026-08-01. Sources: Polymarket docs/APIs, Kalshi trade API, arXiv primary literature, official repos, verified press. Every claim carries its source in parentheses; items that failed or escaped verification are flagged inline and collected at the end. Verification verdicts (CONFIRMED / PARTLY / REFUTED / unconfirmed) from the independent verify pass are weighed throughout; refuted details are corrected in place.

Verdict

The implementation sequence from today to a possible Nov 3 live pilot is: August — upgrade maker_arb_sim from touch-based fills to a calibrated probability-queue fill model with per-fill markout logging, and extend the websocket book recorder to both venues' full midterm ladders (Polymarket balance-of-power 5-outcome negRisk, seat ladder, top-5 state races; Kalshi KXBALANCEPOWERCOMBO + control series) at 1s cadence. September — replay Nov 5 2024 from Dune's decoded CTF-Exchange/NegRisk Polygon tables to measure how much negRisk coherence-violation supply actually survives bots, and live-fire the paper maker through 2026 primary result-drops (Maine Dem senate primary vote-share ladder, MI/WI/MN governor primaries are live now — gamma-api pulls, Aug 1 2026) to calibrate markout versus time-to-call. October — produce the calibration sheet (fill rate, markout by time-to-call, minimum quoted edge per ladder leg net of the 4% politics taker fee the counterparty pays), resolve the compliant account path, and run an operational dry run. November 3 — live pilot only if every gate passed. Gates: G1 (Aug 31) sim fills validated against recorded books, recorder capturing both venues ≥2 weeks clean; G2 (Sep 30) paper P&L through ≥2 live primary/debate events shows rewards + realized spread > cumulative 5-min markout bleed, and the 2024 replay shows harvestable ladder supply at the desk's latency; G3 (Oct 17) calibration sheet complete, compliance path settled (which venue, whose account, approvals done), capital sized to survive a 2020-style weeks-long resolution lockup (Forbes 2020-11-30; Asterisk Mag issue 05); G4 (Oct 30) dead-man heartbeat, cancel-all kill switch, and reconnect-resync all pass a kill-test. Any gate failure ⇒ Nov 3 runs paper-only; the structural edges (negRisk rebalancing, post-call convergence harvest, containment spreads) don't expire with the election and can go live later. Note the desk's standing constraints: no live order is placed without the user's explicit go, and the pilot itself is the user's decision — this report specifies the machinery, not authorization.

Maker mechanics (Polymarket CLOB)

The plumbing is fully specified in primary sources and mostly verified. Auth is two-layer: L1 EIP-712 ClobAuth signature mints L2 HMAC creds; every private call carries the 5 POLY_ headers with URL-safe base64 HMAC-SHA256 over timestamp+method+path+body (docs.polymarket.com/developers/CLOB/authentication; CONFIRMED). Orders are EIP-712-signed structs posted to POST /order or batched 1–15 via POST /orders, types GTC/GTD/FOK/FAK, with a postOnly flag that rejects rather than crosses — the key flag for the maker bot (docs /trading/orders/create; CONFIRMED). There is no amend: quoting is cancel+replace, with cancel by ID — maximum 1,000 per call, not the 3,000 in the research brief (REFUTED and corrected; CLOB OpenAPI spec and docs /api-reference/trade/cancel-multiple-orders)* — plus cancel-by-market/token and account-wide cancel-all (CONFIRMED).

Matching is price-time priority off-chain with atomic on-chain settlement; marketable orders on crypto/finance sit in a 250ms delay window (longer, configured, on sports) before matching — statuses live/matched/delayed/unmatched (docs /concepts/order-lifecycle; CONFIRMED — the "structural advantage for makers vs snipers" framing is desk interpretation, not doc text). Partial fills surface as sizeMatched and via the authenticated user websocket (PLACEMENT/UPDATE/CANCELLATION + trade messages); trades progress MATCHED→MINED→CONFIRMED with RETRYING/FAILED tails — treat MATCHED as economically filled, track to CONFIRMED (docs order-lifecycle + user-channel; CONFIRMED).

Migration facts that invalidate older tutorials: py-clob-client was archived May 25 2026 — build on Polymarket/py-sdk (GitHub archive banner; CONFIRMED). Collateral is now pUSD (0xC011a7…82DFB, migration Apr 28 2026 per help-center article 14762452), and current exchanges are 0xE1111800…996B (standard) / 0xe2222d27…0F59 (neg-risk); the widely cited USDC.e and 0x4bFb41d5… addresses are the legacy stack (docs /resources/contracts; CONFIRMED — re-verify addresses at build time). EOA (sig type 0) wallets need ERC-20 approval on pUSD plus ERC-1155 setApprovalForAll on CTF (0x4D97DC…76045) for each exchange; Polymarket-hosted proxies (types 1/2) get allowances handled automatically — the latter is implied rather than quoted verbatim in primary sources (py-clob-client README allowances; PARTLY, implication flagged).

Tick and min size are per-market and dynamic: tick_size/min_order_size from GET /book and /tick-size, Gamma orderPriceMinTickSize (0.01 typical, 0.001 on longshot legs, 0.0025 on some sports types) and orderMinSize (observed 5) — never cache tick size (py-clob-client issue #122, dynamic tick near extremes; CONFIRMED). Whether orderMinSize denominates shares or USDC notional is unverified — observed value 5 looks like shares.

Rewards and rebates, the maker revenue side: liquidity-reward scoring is quadratic in closeness to mid, S(v,s)=((v−s)/v)²·b from the size-cutoff-adjusted midpoint, sampled randomly once per minute, paid daily at midnight UTC, $1 minimum; single-sided liquidity scores at 1/3 (divisor c=3.0) for mid ∈ [0.10, 0.90] and scores zero outside that band — two-sided is mandatory in longshot territory (docs /market-makers/liquidity-rewards; CONFIRMED). The docs' "10,080 samples per epoch" (7 days of minutes) sits oddly against daily payouts — unconfirmed inconsistency, verify empirically via the rewards endpoint. Maker rebates are a share of taker fees pro-rata by fee-equivalent maker volume C·feeRate·p·(1−p), paid daily, $1 minimum: 20% crypto, 25% other charged categories — but official sources conflict on sports: help-center article 13364471 says 20%, docs /market-makers/maker-rebates says 15% (PARTLY — treat sports rebate as 15–20%, resolve before quoting sports). Geopolitics is fee-free, hence no rebate there. The "15–25% rebates" framing circulating in third-party guides is the wrong model and was refuted in research. Taker fee = Θ·C·p·(1−p), Θ=0.07 crypto / 0.05 sports (raised July 2026), 0.04 politics taker-only with 25% rebate on the midterm surface (gamma-api feeSchedule pulls; CONFIRMED for politics; crypto/sports Θ values probable, from secondary aggregators — re-verify at deployment). Standing qualification is monitorable at GET /rewards/user/markets (L2 auth, 100/page max 500, next_cursor "LTE=" terminal; CONFIRMED).

Safety rails: heartbeat mode mass-cancels all orders under the credentials if no heartbeat lands within 10 seconds; GTD orders expire ~1 minute early by design (docs orders pages; CONFIRMED). Order-placement rate limits are not published — unconfirmed; probe empirically before fixing quote-refresh frequency.

Maker strategy

The academic anchor exists and is on-point: Feil & Nendel (arXiv 2607.17991) adapt Avellaneda-Stoikov to 0–1 bounded contracts — dp = p(1−p)σdW via a logit latent belief, running inventory penalty γq² plus a terminal settlement penalty γ_T·q²·p(1−p); no closed form (numerical HJB), quoting goes one-sided at inventory bounds (CONFIRMED). The practical closed-form baseline is therefore Guéant-Lehalle-Fernandez-Tapia (arXiv 1105.3115 / 1605.01862), with the binary adaptation — substitute p(1−p)σ local vol, add the terminal penalty as resolution nears — being the desk's own proposal, correctly labeled as such (CONFIRMED as sources; adaptation is design, not fact). hftbacktest ships a worked GLFT tutorial (hftbacktest docs; CONFIRMED).

The central tension is verified at both ends: quadratic reward scoring concentrates income exactly at the midpoint where adverse selection is worst, and the mandatory two-sided rule outside [0.10, 0.90] forces quoting the dangerous side in longshot markets (docs scoring formula; CONFIRMED). Empirically, fill probability and post-fill returns are strongly negatively coupled — "orders with negative subsequent five-second returns are highly likely to fill"; a naive imbalance-following maker lost ~60% in 3 days; 1s markouts differ 13× by queue position (−0.058bp front vs −0.775bp back) (arXiv 2502.18625; CONFIRMED — note the study is Binance BTC perps, not Polymarket; transfer is assumed). Consequence: any sim that fills resting orders on touch drastically overstates live P&L, which is the single most important upgrade to maker_arb_sim.

Templates: warproxxx/poly-maker is the best open-source scaffold — microprice + signed-flow fair value, reservation r = FV − skew(inventory), half-spread δ = base + c_vol·σ + c_tox·toxicity, two-sided quoting in complement space (BUY-YES at r−δ, BUY-NO at (1−r)−δ — USDC bids only, no share inventory), per-fill markout EWMAs widening spread and shrinking size, neg-risk worst-case caps, daily-loss kill switch; it makes no profitability claim (repo; CONFIRMED). The official Polymarket/poly-market-maker keeper is naive (30s cancel/replace bands, zero adverse-selection logic) — scaffolding only (repo; CONFIRMED). Practitioner ground truth: Terry Lee's clone-and-run ended ~zero net P&L; "a single adverse move of 30–40% can wipe out accumulated gains within minutes"; position-tracking bugs cost as much as strategy (tezlee.substack.com; CONFIRMED). This motivates the news-halt rule: pull quotes ahead of scheduled announcements/calls — the markout tail on slow political markets is event-driven, not latency-driven.

Markout methodology: compute per-fill, fill-to-mid, signed so negative = adversely selected, at a horizon grid, EWMA per market. The specific "5s/30s/5min professional standard" is not confirmed by any primary source — literature and TCA practice use grids from 1ms to 5min (Databento microstructure guide; QuestDB finance cookbook; Traders Magazine); for slow prediction markets a 1s/5s/30s/5min/30min grid is a defensible convention, adopted here as convention, not standard. Toxicity thresholds from Vertox Quant are paywalled/unconfirmable; poly-maker's simpler markout-EWMA-into-spread mechanism is sufficient for the pilot (probable).

Event windows (midterms, Nov 3)

2024 ground truth, verified: by election night the headline Polymarket market was efficient at the top of book — arb-deviation half-life under a minute (0.74 min Oct, 0.67 min Nov), Kyle's λ down to 0.01 — intra-market taker sniping was a pure speed game the desk already ruled out (Tsang & Yang, arXiv 2603.03136; CONFIRMED). But cross-venue divergence stayed wide and slow: execution-adjusted Polymarket–Kalshi spreads averaged ~$0.03 and held ~$0.07 for sustained intervals pre-call (Gebele & Matthes, arXiv 2601.01706 Fig. 9; CONFIRMED), and much of that gap was semantic non-fungibility (media-call vs inauguration/stricter conditions) plus lockup and segmented pools, not free money (same paper; CONFIRMED). Realized arb Apr 2024–Apr 2025 totaled $39.59M — corrected per full-text verification: rebalancing bucket ≈ $29.0M (not the $23.28M/$28.4M variants in the brief), single-condition $10.58M, combinatorial only $95.2K across 4 of 11 executed-arb pairs; top wallet $2.01M over 4,049 txns; top-10 sums $8.18M (not ~$9.1M) (Saguillo et al., arXiv 2508.03474; PARTLY — figures corrected here). The exploitable residual is multi-outcome negRisk rebalancing and cross-venue basis, not single-market taking. The desk-context figure "only ~1% of mispricing supply was harvested in 2024" is unconfirmed — no primary source gives an available-vs-captured ratio; do not use it in sizing.

2026 inventory, verified live Aug 1 (gamma-api and Kalshi trade-api direct pulls): Polymarket balance-of-power-2026-midterms is a 5-outcome negRisk ladder, $9.08M vol, $12.08M OI, ~$1.08M liquidity, DD 44.5c / RD 42.5c / RR 13.5c / DR 1.25c / Other 0.55c, resolving on AP+Fox+NBC, tick 0.01 on main legs and 0.001 on the two longshots (CONFIRMED). House control $8.9M, Senate $3.6M, republican-senate-seats 11-bucket ladder $2.7M, ME senate $1.07M, AK governor $1.10M all re-verified; smaller state lines ($90–635k) spot-checked by pattern (CONFIRMED/spot-check). All sampled midterm markets carry politics_fees: 4% taker-only, makers pay zero and receive 25% of taker fees, plus $5–10/day liquidity rewards at max spread 4.5c / min size 50 (gamma feeSchedule fields; CONFIRMED) — the maker thesis applies directly to this surface. Kalshi: KXBALANCEPOWERCOMBO-27FEB, 4 combos, DD 44/45c, ~$1.93M vol, with an early-close rule — a combo resolves No immediately when any component becomes impossible, freeing capital overnight on Nov 3–4 (Kalshi API; CONFIRMED). Critical semantic trap, verified in rules_primary: the Kalshi combo resolves on who holds control ON FEB 1 2027 (close 2027-02-01, expiration to 2027-02-08), not the election call — any cross-venue basis trade carries ~3 months extra lockup plus party-switch/special-election risk (Kalshi API direct pull; CONFIRMED). Kalshi taker fee 0.07·p·(1−p), maker usually 0, tapered_deci_cent ticks (0.1c below 10c/above 90c — fine-grained tail-leg quoting) (API price_ranges; fee formula probable, from secondary aggregators — official fee PDF not fetched).

Resolution-window regimes, both verified: 2024 fast — AP/Fox/NBC all called by Nov 6 (Fox first 06:46 UTC), UMA propose + 2-hr dispute window, settled within hours; ~99% of UMA assertions undisputed (arXiv 2603.03136; startpolymarket.com; UMA ecosystem reporting; CONFIRMED). 2020 slow — Biden at 89c on PredictIt ~4 weeks post-election, swing-state markets ~90c into December despite ratification (Forbes 2020-11-30; Asterisk Mag; CONFIRMED). Sizing rule follows: every position must survive the 2020 regime. The main planned harvest is post-call convergence — Nov 6 2024 morning saw Polymarket 98c / Kalshi 95c / PredictIt 94c / IBKR 97c converging at different speeds for hours (Fortune 2024-11-06; probable) — entered only with capital reserved for that phase. These capital-rotation rules are desk synthesis on verified inputs (PARTLY by construction — judgment, flagged as such).

No public minute-level tick narrative of 2024 election night exists; the desk builds its own from Dune's decoded CTF-Exchange/NegRisk tables (dune.com/lindyhan dashboard; docs.dune.com prediction-markets catalog; CONFIRMED feasible). Adjacent structural-relation markets live now — which-senate-races-within-5, republican-trifecta-with-supermajority ($166k), house-popular-vote-margin ladder ($113k) — are the 2026 analogue of the under-arbed 2024 relation pairs (gamma pulls; CONFIRMED).

Structural edges

Fee-free geopolitics. Verified: geopolitics/world-events is the only fee-exempt category on the international venue — "Polymarket does not charge fees or profit from trading activity on these markets" — hence also no maker rebate there; the edge must come entirely from spread/mispricing (docs /trading/fees and /polymarket-learn/trading/fees; CONFIRMED). The surface is large: Netanyahu-out ladder $123.9M/6 deadline legs, Venezuela leader $94.9M/57 outcomes, Kharg Island $69.0M/10, US-invade-Iran $51.5M, Taiwan $39.3M, Iran leader $37.4M/123 — every figure re-pulled and matched (gamma-api tag_slug=geopolitics; CONFIRMED). Two ladder shapes: independent-binary deadline chains (negRisk=false, dead legs at 0.001, containment is cross-market not enforced) and negRisk mutually-exclusive leader ladders where sum-to-one rebalancing applies (gamma negRisk fields; CONFIRMED). The exemption is policy-fragile — fees rolled out to crypto Jan 5, sports Feb 18, nearly all categories Mar 30 2026 with geopolitics the deliberate carve-out (pineanalytics.substack; CONFIRMED) — but the "~2 weeks notice" precedent is approximate, not explicitly confirmed. The separate Polymarket US exchange has no geopolitics exemption (docs.polymarket.us/fees; CONFIRMED): the fee-free surface exists only on the international CLOB.

Deadline containment. The MSTR incident is fully confirmed and is the design lesson: "Strategy sells BTC by May 31 2026" ($79M market) resolved NO via UMA despite the 8-K showing 32 BTC sold May 26–31, because disclosure came June 1; the June 30 and Dec 31 legs of the same ladder resolved YES off the same filing (CoinDesk 2026-06-02; Benzinga; CONFIRMED — the final vote after multiple dispute rounds is consistent with coverage but was not independently re-verified). Rule for the executor: the binding deadline is announcement-observability, not event occurrence — verify nesting in announcement-space. This is the desk's inference from a verified case (PARTLY — the generalized "1–30 day haircut" range is judgment). Verification is programmatic: Gamma's description field carries full resolution text; require identical wording across legs except the date, identical resolution-source clause, and matching announcement-acceleration clauses (Netanyahu legs resolve YES immediately on a resignation announcement) (gamma description pulls, exact text; CONFIRMED). Tail risk on any containment trade is a UMA vote, not the event: the Zelensky-suit market flipped YES→NO after disputes with whale-manipulation allegations from Polymarket users (CoinDesk 2025-07-07; core CONFIRMED — but the $240M volume, "nine days," and 6.5M-UMA/30%-of-participation voter stats did not appear in fetched sources; unconfirmed, dropped from sizing). Carry cost: both legs fully collateralized, Polymarket pays 0% on collateral, so lockup cost ≈ foregone ~4–5% T-bill rate × locked notional × months; Kalshi pays 3.75–4% APY on idle balances, though whether collateral inside open positions earns it is unconfirmed (secondary sources; probable).

Cross-venue basis. The one clean documented settlement divergence: Cardi B Super Bowl halftime (Feb 2026) — Kalshi invoked Rulebook 6.3(c) and settled at last traded price ($0.26/$0.74) on $47.3M volume while Polymarket resolved YES at $1.00 on >$10M via "consensus of credible reporting" (defirate.com; predictionhunt; CONFIRMED via journalistic secondaries — Kalshi's own settlement notice not fetched). Structural root: CFTC rulebook adjudication with a last-price escape hatch vs UMA optimistic oracle with token-holder votes (CONFIRMED). Sizing rule: cross-venue "locked" spreads carry a small probability of losing on both legs; run the wording/rulebook diff before entry; Kalshi 6.3(c) means even identical wording can settle at market price. Capital requirement ≈ 2× notional — no cross-margin, USD (Kalshi) vs USDC/pUSD (Polygon) in unlinked systems (both venues' docs; probable). No credible public writeup of realized cross-venue Polymarket–Kalshi arb P&L was found; all "2–8% spread" claims trace to marketing-grade guides — unverifiable, excluded from expected-value estimates.

Build spec

maker_arb_sim upgrades

  1. Fill model — replace touch fills. Implement an hftbacktest-style probability queue model: L2 stream in, order latency + feed latency parameters, power-law queue-advance f(x)=xⁿ (SquareProbQueueModel n=2 / PowerProbQueueModel3 / LogProbQueueModel2) governing how much cancellation volume is assumed ahead of the sim order (hftbacktest docs; CONFIRMED). Calibrate n by measuring trading intensity vs depth on the desk's own recorded Polymarket books; validate by comparing sim fills against live paper-observable fills; note the Poisson-arrival caveat flagged in the hftbacktest docs. Model the fill/return coupling explicitly: condition fill probability on near-side vs opposite-side queue sizes (logistic, per arXiv 2502.18625's R²=0.946 spec) so the sim reproduces the fact that fills cluster before adverse moves.
  2. Venue microstructure fidelity. Simulate: cancel+replace only (no amend), batch ≤15 orders per /orders call, cancel ≤1,000 IDs per call (corrected figure), postOnly semantics, the 250ms crypto/finance delay window where relevant, dynamic per-market tick (re-read, never cache), min size 50 shares on midterm reward markets, GTD −1min early expiry, and a 10s heartbeat whose lapse cancels everything.
  3. Markout horizons. Per-fill, fill-to-mid, signed, at 1s/5s/30s/5min/30min (convention, not standard — flagged above); per-market EWMA feeds δ = base + c_vol·p(1−p)σ + c_tox·markoutEWMA and the size term, poly-maker style. Report reward income and cumulative markout as separate lines; the go/no-go statistic is rebates + realized spread − markout bleed at the 5-min horizon.
  4. Reward-scoring simulator. Minute-sampled S(v,s)=((v−s)/v)²·b against per-market rewardsMinSize/rewardsMaxSpread (4.5c/50 on midterms), Q_min two-sided logic with c=3.0 in [0.10, 0.90] and strict min(Q1,Q2) outside; choose the widest spread that still scores acceptably rather than maximizing score. Reconcile daily against GET /rewards/user/markets once live-adjacent.
  5. Quoting core. GLFT closed-form depths with inventory skew in complement space (two USDC bids), p(1−p)σ local vol, terminal penalty q²p(1−p) scaling inventory limits down as resolution approaches (Feil-Nendel); one-sided fallback when |skew| hits notional caps or forced two-sidedness at extreme mids is unprofitable (forgo rewards there); news-halt rule — pull quotes N seconds before scheduled events/calls, requote after (N is a calibration output of the rehearsals).
  6. Ops parity. Position tracking reconciled every loop against open-orders + trades REST (the tezlee failure mode), reconnect-resync procedure, daily-loss kill switch, per-market and neg-risk event-group worst-case caps.

Midterms rehearsal calendar

Structural-edge executors

  1. negRisk rebalancer (largest measured bucket — ~$29.0M of the 2024–25 $39.6M; arXiv 2508.03474 corrected figures). Monitor sum-to-one violations across negRisk sets (BoP ladder, leader ladders in geopolitics); execute only when edge net of gas + politics-fee asymmetry clears the calibration-sheet minimum; worst-case event-group exposure capped.
  2. Deadline-containment executor (geopolitics, fee-free). Pair near/far legs of monotone deadline chains only after a programmatic Gamma-description diff passes: identical wording ex-date, identical resolution-source clause, matching announcement-acceleration clauses. Classify each chain as announcement-space (lagged disclosure — SEC filings, official stats: apply a haircut on the near leg per the MSTR lesson) or event-space (instantly observable). Carry cost charged at the T-bill rate on locked notional; UMA-vote tail acknowledged as unhedgeable — size accordingly.
  3. Cross-venue basis monitor (paper-first indefinitely). Semantically matched pairs only, rulebook diff mandatory, executable quotes, fee/lockup-adjusted, sized as a trade that can lose both legs (Cardi B precedent); the Kalshi Feb 1 2027 combo semantics make midterm BoP basis a 3-month-lockup trade, not an election-night trade. No expected-value claims until the desk's own weekly series produces them — public spread claims are unverifiable.

Compliant live-path checklist

Venue and account decisions precede any code going live; these are user decisions, listed here as prerequisites, not recommendations to proceed.

Refuted, corrected, and unverifiable