Polymarket Bot Tutorial · Capitolo 13 di 32
Market making su Polymarket: come quotare bid e ask, catturare lo spread, guadagnare maker rebates (20-25% delle taker fees), matematica del risk di inventory e quando l’MM funziona sui prediction markets.
Cosa copre questo capitolo
Fare market making su Polymarket significa quotare continuamente entrambi i lati del book di un mercato e guadagnare lo spread su ogni round trip. La strategia è ben compresa nella finanza tradizionale; le particolarità di Polymarket sono il programma di maker rebate e il profilo di adverse selection dei prediction markets, che è più alto rispetto ai venue CFD. Questo capitolo è la matematica senza giri di parole.
Questo è il capitolo 13 della nostra serie in 32 parti su come costruire un Polymarket trading bot. Trattiamo l’argomento in profondità nelle sezioni qui sotto. Il contenuto principale di ciascuna sezione viene scritto e pubblicato capitolo per capitolo; le risposte FAQ e i riferimenti sono già completi e riflettono l’esperienza in produzione maturata gestendo il nostro trader.
- Market making in parole semplici
- Il vantaggio di spread + rebate
- Inventory risk e skew
- Quando l’MM funziona su Polymarket (e quando no)
- Code skeleton: quotare entrambi i lati a +/- N centesimi
- Adattare le quote al news flow
- Spegnere il bot quando l’adverse selection aumenta
Market making in parole semplici
Un market maker quota continuamente sia un prezzo di acquisto (bid) sia un prezzo di vendita (ask), più ampi rispetto al mid di uno spread fisso. Quando qualcuno colpisce il bid il maker compra a buon prezzo; quando qualcuno alza l’ask il maker vende a prezzo alto; la differenza tra bid e ask è il revenue del maker per ogni round trip.
La strategia è guidata dal order flow, non è direzionale. Il maker non prende posizione sul fatto che vinca YES; prende la posizione che il flow continuerà e che lo spread continuerà a essere pagato.
Il rischio è l’adverse selection: chi colpisce il tuo bid potrebbe avere informazioni che tu non hai. Nel tempo, i profitti dell’MM dipendono dal fatto che lo spread sia abbastanza ampio da coprire lo slippage dei trader informati.
Il vantaggio di spread + rebate
Due flussi di revenue per un maker su Polymarket.
Spread capture: quotare bid a 0.45 e ask a 0.47 attorno a un mid di 0.46. Ogni fill sul bid che puoi poi chiudere sull’ask genera 2 centesimi. Il vantaggio netto dipende dallo sbilanciamento dei fill e dal price drift.
Maker rebate: il programma di liquidity rewards di Polymarket paga un rebate per share sui fill da maker nei mercati idonei. I numeri cambiano; controlla la pagina ufficiale dei rewards per i valori aggiornati. Il rebate viene pagato in pUSD periodicamente, separatamente dal trade stesso.
Per la maggior parte dei mercati, la spread capture è il flusso di revenue più grande. Il rebate è significativo quando puoi quotare mercati larghi (anno elettorale, playoff sportivi importanti) in cui Polymarket aumenta i rebate per attrarre liquidità.
Inventory risk e skew
Un MM che viene colpito ripetutamente sul bid accumula una posizione long. Il rischio è che il mid scenda mentre l’inventory è long; il maker realizza una perdita sulla posizione anche dopo il revenue dello spread.
Difese: quote skew (abbassare il bid quando l’inventory è long, alzare l’ask quando è short, per scoraggiare fill unilaterali); inventory cap (smettere di quotare sul lato in cui sei già troppo esposto); active rebalancing (di tanto in tanto attraversare lo spread per ridurre la posizione quando l’inventory è al limite).
La matematica: se il 60% dei fill sul bid non viene mai chiuso prima che il prezzo si muova di 2 centesimi in modo avverso, la strategia sta perdendo denaro su quei fill da sola. Fai skew in modo aggressivo quando lo sbilanciamento dei fill è > 65/35.
Quando l’MM funziona su Polymarket (e quando no)
L’MM funziona su Polymarket quando si verificano tre condizioni.
- Libro liquido: abbastanza concorrenza sulle quote da rendere il tuo spread competitivo ma non zero. I mercati elettorali del 2024, le principali partite NFL/NBA, BTC up/down 5m rientrano tutti in questa categoria.
- Flow bidirezionale: sia buyer sia seller attivi. I mercati unilaterali (quasi risolti a 0.95+) non offrono nulla da catturare per il maker.
- Movimenti di prezzo contenuti: i guadagni da spread vengono divorati da salti di 5 centesimi. I mercati stabili nel range medio (0.40-0.60) sono i più favorevoli.
L’MM fallisce nei mercati guidati dalle news, dove il mid si muove più velocemente di quanto tu riesca a riquotare; nei book illiquidi dove sei l’unica quota e il trade successivo attraversa 5 livelli; nei mercati vicini alla risoluzione, dove un lato converge a 0 o 1.
Code skeleton: quotare entrambi i lati a +/- N centesimi
Pseudocode per il maker più semplice che sia davvero utilizzabile.
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)
I maker in produzione aggiungono: tracking dell’inventory per lato, ordering cancel-before-place, jitter sull’intervallo di re-quote per evitare di essere prevedibili, kill-switch sull’adverse selection (sezione successiva).
Adattare le quote al news flow
Quando arriva un evento di news, il fair value si muove prima delle tue quote. Un MM che non ritira le quote durante il news flow viene preso di mira.
Il segnale: il tasso di cancel dei fill in arrivo che supera circa 3x il baseline entro 30 secondi, oppure un controllo incrociato più ampio sul event stream (Polymarket Twitter/Discord, Bloomberg headline feed). Quando viene rilevato, il maker ritira tutte le quote per 60-120 secondi, lascia stabilizzare il nuovo mid, poi riquota attorno al nuovo centro.
L’implementazione più semplice osserva lo stream del last-trade-price per il token. Un salto di oltre 2 deviazioni standard rispetto alla media della rolling window attiva una pausa. Il bot torna operativo quando il prezzo si è stabilizzato per 30+ secondi.
Spegnere il bot quando l’adverse selection aumenta
L’uscita dura. Se il PnL sui fill del bot negli ultimi 50 fill diventa nettamente negativo, qualcosa non va: o il mercato è ormai guidato dalle news e non dovresti fare market making, oppure lo spread è impostato troppo stretto rispetto al livello attuale di adverse selection.
Condizioni di kill da codificare:
- 5 fill consecutivi sul bid senza nessun fill sull’ask, mid sceso di > 1c dal primo fill.
- Realized PnL sugli ultimi 25 round-trip fill sotto il -25% dell’atteso.
- WebSocket disconnesso o book stale rilevato.
- Inventory al cap su uno dei due lati per > 5 minuti.
Quando si attiva, cancella tutto, flattare l’inventory a market, sospendi per 15+ minuti. Un market maker senza kill switch perderà denaro durante i periodi di volatilità fino a quando il trader non se ne accorge manualmente — e di solito ci vuole sempre più tempo di quanto pensi.











