Polymarket Bot Tutorial · Hoofdstuk 13 van 32
Market making op Polymarket: hoe bid en ask te quoten, de spread vangen, maker rebates verdienen (20-25% van taker fees), inventory-risico math en wanneer MM werkt op prediction markten.
Wat dit hoofdstuk behandelt
Market making op Polymarket betekent continu beide zijden van een markt-book quoten en de spread verdienen op elke round trip. De strategie is goed begrepen in traditionele finance; de Polymarket-specifieke wrinkles zijn het maker-rebate programma en het adverse-selection profiel van prediction markten, dat hoger is dan CFD-venues. Dit hoofdstuk is de eerlijke math.
Dit is hoofdstuk 13 van onze 32-delige serie over het bouwen van een Polymarket trading bot. We behandelen het onderwerp in detail in de secties hieronder. De body content voor elke sectie wordt geschreven en hoofdstuk-per-hoofdstuk uitgerold; FAQ-antwoorden en referenties zijn al compleet en weerspiegelen production-ervaring van het draaien van onze eigen trader.
- Market making in gewoon Nederlands
- De spread + rebate edge
- Inventory-risico en skew
- Wanneer MM werkt op Polymarket (en wanneer niet)
- Code skeleton: quote beide zijden op +/- N cent
- Quotes aanpassen op news flow
- De bot killen wanneer adverse selection spike't
Market making in gewoon Nederlands
Een market maker quote continu een koopprijs (bid) en een verkoopprijs (ask), breder dan de mid met een vaste spread. Wanneer iemand de bid raakt koopt de maker goedkoop; wanneer iemand de ask lift verkoopt de maker duur; het verschil tussen bid en ask is de maker's omzet per round trip.
De strategie is order-flow-driven, niet direction. De maker heeft geen mening over of YES wint; ze nemen de positie dat flow blijft komen en de spread blijft worden betaald.
Het risico is adverse selection: de mensen die je bid raken hebben informatie die jij niet hebt. Op lange termijn hangen MM-winsten af van of de spread breed genoeg is om de slippage van informed traders te dekken.
De spread + rebate edge
Twee revenue-streams voor een Polymarket maker.
Spread capture: quote bid 0,45 en ask 0,47 rond een 0,46 mid. Elke fill op de bid die je later kunt exiten op de ask verdient 2 cent. Netto edge hangt af van fill-imbalance en prijsdrift.
Maker rebate: Polymarkets liquidity-rewards programma betaalt een per-share rebate op maker fills in eligible markten. Cijfers schuiven; check de officiële rewards-pagina voor huidige waarden. Rebate wordt betaald in pUSD periodiek, gescheiden van de trade zelf.
Voor de meeste markten is spread capture de grotere revenue-stream. De rebate is betekenisvol wanneer je brede markten kunt quoten (verkiezingsjaar, grote sport-playoffs) waar Polymarket rebates boost om liquiditeit aan te trekken.
Inventory-risico en skew
Een MM die herhaaldelijk wordt geraakt op de bid accumuleert een long positie. Het risico is dat de mid daalt terwijl inventory long is; de maker realiseert een verlies op de positie zelfs na de spread-omzet.
Verdedigingen: quote skew (verlaag de bid wanneer inventory long is, verhoog de ask wanneer short, om one-sided fills te ontmoedigen); inventory cap (stop met quoten op de zijde waar je al te long bent); active rebalancing (cross occasioneel de spread om positie te verminderen wanneer inventory aan limit is).
De math: als 60% van de fills op de bid niet exiten voordat de prijs 2 cent adverse beweegt, verliest de strategie geld op die fills alleen. Skew aggressief wanneer fill-imbalance > 65/35.
Wanneer MM werkt op Polymarket (en wanneer niet)
MM werkt op Polymarket wanneer drie condities gelden.
- Liquide book: genoeg quote-competitie dat je spread competitief is maar niet nul. De 2024-verkiezingsmarkten, grote NFL/NBA-wedstrijden, BTC up/down 5m kwalificeren allemaal.
- Tweezijdige flow: zowel kopers als verkopers actief. One-sided markten (resolved-ish op 0,95+) hebben niets voor de maker om te vangen.
- Begrensde prijsbewegingen: spread-captures worden opgegeten door 5-cent sprongen. Stabiele mid-range markten (0,40-0,60) zijn het vriendelijkst.
MM faalt op: news-driven markten waar mid sneller springt dan je kunt re-quoten; illiquide books waar je de enige quote bent en de volgende trade 5 levels wandelt; resolution-imminent markten waar één zijde convergeert naar 0 of 1.
Code skeleton: quote beide zijden op +/- N cent
Pseudo-code voor de eenvoudigste levensvatbare maker.
SPREAD_CENTS = 2
INVENTORY_CAP_SHARES = 50
def make_loop(token_id):
while True:
book = fetch_book(token_id)
mid = (book.best_bid + book.best_ask) / 2
inv = chain_balance(token_id)
# Skew: pull the side we are too long on
bid_px = mid - SPREAD_CENTS/200 - (0.005 if inv > INVENTORY_CAP_SHARES * 0.6 else 0)
ask_px = mid + SPREAD_CENTS/200 + (0.005 if inv < -INVENTORY_CAP_SHARES * 0.6 else 0)
cancel_my_existing_quotes(token_id)
if inv < INVENTORY_CAP_SHARES:
place_gtc(token_id, side="BUY", price=bid_px, size=5)
if inv > -INVENTORY_CAP_SHARES:
place_gtc(token_id, side="SELL", price=ask_px, size=min(5, inv))
time.sleep(2)
Productie-makers voegen toe: per-zijde inventory tracking, cancel-before-place volgorde, jitter op het re-quote interval om niet voorspelbaar te zijn, kill-switch op adverse selection (volgende sectie).
Quotes aanpassen op news flow
Wanneer een news event toeslaat, beweegt de fair value voor je quotes. Een MM die geen quotes pull't tijdens news flow wordt opgepikt.
Het signaal: cancel-rate van inkomende fills springt boven ~3x baseline binnen 30 seconden, of een bredere event-stream cross-check (Polymarket Twitter/Discord, Bloomberg headline feed). Wanneer gedetecteerd, pullt de maker alle quotes voor 60-120 seconden, laat de nieuwe mid stabiliseren, dan re-quote rond het nieuwe centrum.
De eenvoudigste implementatie kijkt naar de last-trade-price stream voor de token. Een sprong van meer dan 2 standaarddeviaties van het rolling-window gemiddelde triggert een pauze. De bot her-engageert wanneer de prijs 30+ seconden stabiel is geweest.
De bot killen wanneer adverse selection spike't
De harde exit. Als de fill-PnL van de bot over de laatste 50 fills sterk negatief wordt, is er iets mis: ofwel is de markt nu news-driven en moet je niet maken, ofwel is je spread te strak ingesteld voor het huidige adverse-selection niveau.
Kill-condities om te coderen:
- 5 opeenvolgende bid fills zonder ask fill, mid down > 1c sinds eerste fill.
- Realized PnL op laatste 25 round-trip fills onder -25% van verwacht.
- WebSocket disconnect of stale book gedetecteerd.
- Inventory op cap aan een van beide zijden voor > 5 minuten.
Wanneer getriggerd, cancel alles, flatten inventory op market, halt voor 15+ minuten. Een market maker die geen kill switch heeft zal geld verliezen tijdens volatiele periodes totdat de trader het handmatig opmerkt — wat altijd langer duurt dan je denkt.











