Polymarket Bot Tutorial · Capitolo 16 di 32
Arbitraggio statistico su Polymarket: pair cross-mercato (eventi correlati), spread Polymarket-vs-Kalshi, mean reversion e come dimensionare le posizioni stat-arb quando i mercati alla fine si risolvono.
Cosa copre questo capitolo
L'arbitraggio statistico su Polymarket sfrutta mispricing transitori tra mercati correlati — stesso evento su Polymarket vs Kalshi, o mercati correlati all'interno di Polymarket stesso. Gli edge sono piccoli (1-3 cent tipici) e operativamente fragili. Questo capitolo è onesto su cosa funziona, cosa no, e il rischio di esecuzione multi-leg che uccide la maggior parte dei tentativi.
L'arbitraggio statistico cross-mercato sfrutta inconsistenze di prezzo transitorie tra Polymarket e Kalshi, Polymarket e Manifold, o tra mercati correlati all'interno di Polymarket. Gli edge sono piccoli (1-3 cent tipici) e richiedono esecuzione veloce su entrambe le gambe. Questo capitolo è il playbook onesto inclusa la complessità operativa che uccide la maggior parte dei tentativi.
Questo è il capitolo 16 della nostra serie in 32 parti sulla costruzione di un trading bot per Polymarket. Trattiamo l'argomento in profondità nelle sezioni qui sotto. Il corpo di ogni sezione viene scritto e rilasciato capitolo dopo capitolo; le risposte FAQ e i riferimenti sono già completi e riflettono l'esperienza di produzione del nostro trader interno.
- Cosa significa stat-arb nei prediction market
- Esempi di spread Polymarket-vs-Kalshi
- Pair all'interno di Polymarket (eventi correlati)
- Mean reversion vs continuazione del trend
- Sizing per mercati che si risolvono (non perpetui)
- Rischio: divergenza fino alla resolution
- Codice: monitor di pair e trigger di soglia
Cosa significa stat-arb nei prediction market
Arbitraggio statistico sui prediction market significa tradare lo spread tra due mercati che dovrebbero essere prezzati in modo consistente. Tre varianti sono comuni su Polymarket.
- Cross-venue: stesso evento su Polymarket e Kalshi (o Manifold, PredictIt). Il pricing dovrebbe convergere; in pratica deriva di 2-5 cent.
- Same-event-pair: parent vs somma delle gambe nei mercati NegRisk multi-outcome. L'invariante sum-to-1 ti permette di fare arb quando le gambe sommano meno di 1,0.
- Correlated-event-pair: due mercati su outcome correlati (es. "Trump presidente il 1 gennaio" vs "Trump presidente il 1 marzo"). Dovrebbero prezzare entro 2-3 cent l'uno dall'altro.
Gli edge sono piccoli. La complessità operativa è reale. La maggior parte dei tentativi muore nell'esecuzione, non nella teoria.
Esempi di spread Polymarket-vs-Kalshi
Dall'osservazione nel 2025-26, Polymarket e Kalshi listano gli stessi eventi USA principali ma prezzano 1-4 cent di differenza in modo costante. Il gap esiste per ragioni strutturali che devi modellare in qualsiasi arb.
Driver strutturali:
- Asimmetria delle fee: Kalshi prende il 4-7% sui trade vincenti (varia per mercato); Polymarket prende 0 di taker fee. La matematica dell'arb deve nettare il morso di Kalshi.
- Premio di rischio di settlement: quando la resolution di un mercato è ambigua, l'UMA di una venue può risolvere diversamente dai giudici dell'altra. Il mercato prezza questo dentro.
- Popolazione di trader: Polymarket tende più giovane e più crypto-native; Kalshi tende professionale / hedge. Sono in disaccordo sugli stessi eventi sistematicamente.
L'arb funziona quando il gap supera il premio strutturale più le fee. Un gap di 5 cent su un mercato dove il premio strutturale è 1c e le fee combinate sono 1c è un edge reale di 3c.
Pair all'interno di Polymarket (eventi correlati)
All'interno di Polymarket, le coppie di eventi correlati sono più facili da arbare che cross-venue. Stessa struttura di fee, stesso wallet, esecuzione atomica fattibile.
Esempi che prezzano costantemente in modo inconsistente:
- Trump presidente alla data A vs Trump presidente alla data B (dove B è più tardi di A di < 90 giorni).
- Bitcoin raggiungerà 100k $ entro il 31 luglio vs 100k $ entro il 31 agosto.
- Gambe Yes vs No sullo stesso mercato binario (somma dovrebbe = 1,0; a volte deriva fino a 1,04 in book sottili).
L'arb Yes+No=1 è il più pulito: leggi entrambe le gambe dallo stesso mercato, scatena FOK su entrambe se la somma scende sotto 0,97 (consentendo la tassa di spread). Il capitale richiesto è circa uguale su ciascuna gamba; l'esecuzione è atomica quando entrambi i fill tornano nella stessa risposta.
Mean reversion vs continuazione del trend
Due regimi di stat-arb. Mean reversion: la coppia si è separata per una ragione di rumore; scommetti sulla convergenza. Continuazione del trend: la coppia ha iniziato a divergere perché è arrivata nuova informazione; scommetti su ulteriore divergenza.
Distinguerli è la parte difficile. Euristica: se la divergenza è accaduta su volume visibile (una balena ha camminato sul book di una gamba), sono news — fai fade solo se hai un modello. Se è derivato lentamente con basso volume, è rumore — trada la reversion con fiducia.
Per builder nuovi: trada solo mean reversion, su coppie dove la divergenza è < 1 deviazione standard della deriva storica. La continuazione del trend richiede un modello che cattura le news; senza, stai tradando contro flusso informato.
Sizing per mercati che si risolvono (non perpetui)
I prediction market si risolvono. Le coppie crypto no. Questo cambia la matematica.
Una posizione pair-arb su Polymarket ha uno schedule di payout fisso: quando entrambi i mercati si risolvono, la differenza tra spread previsto e spread effettivo è bloccata. Non c'è rolling, niente hold infinito.
Implicazione di sizing: il massimo che puoi tenere è limitato dal time-to-resolution, perché il capitale è bloccato fino ad allora. Una coppia che si risolve in 6 mesi può guadagnarti 3c per share ma non puoi mettere più capitale al lavoro nel frattempo se entrambi i mercati sono pienamente dimensionati.
Il framing giusto: lo stat-arb su Polymarket è una serie di trade a tempo limitato, non una strategia continua. Confronta PnL per unità di capitale bloccato al giorno, non PnL lordo.
Rischio: divergenza fino alla resolution
Il peggior outcome di stat-arb è che la tua previsione-di-convergenza è sbagliata perché la premessa sottostante era sbagliata. Esempi:
- Hai shortato "Trump presidente il 1 aprile" aspettandoti che convergesse a "Trump presidente il 1 marzo" — ma il mercato data 1 si risolve YES e data 2 si risolve NO per un impeachment di marzo. La tua tesi "lo spread dovrebbe essere piatto" era sbagliata.
- Hai arbato Polymarket vs Kalshi sullo stesso vincitore delle NBA Finals. Polymarket si risolve sulla squadra che ha vinto la serie ufficiale; Kalshi si risolve su una definizione leggermente diversa che include i tie-breaker dei tempi supplementari diversamente. Entrambi si risolvono YES sui loro termini stabiliti, ma in direzioni opposte.
Leggi attentamente i criteri di resolution di ogni mercato. L'arb cross-venue è a un mismatch di resolution dalla perdita totale su entrambe le gambe.
Codice: monitor di pair e trigger di soglia
Riferimento: monitora due token correlati, scatena arb quando lo spread attraversa la soglia.
def pairs_monitor(token_a, token_b, threshold_cents=3, size=10):
"""Buy A and Sell B when (1 - ask_A) + bid_B > 1 + threshold."""
while True:
book_a = fetch_book(token_a)
book_b = fetch_book(token_b)
if not (book_a.best_ask and book_b.best_bid):
time.sleep(2); continue
# implied: cost of buying A at ask + value of selling B at bid
edge = (1 - book_a.best_ask) + book_b.best_bid - 1
if edge > threshold_cents / 100:
print(f"ARB edge={edge:.3f}; firing")
r_a = fok_buy(token_a, price=book_a.best_ask, size=size)
if r_a.status != "matched": continue
r_b = fok_sell(token_b, price=book_b.best_bid, size=size)
if r_b.status != "matched":
# leg A filled, B failed -- unhedged, exit A
fok_sell(token_a, price=book_a.best_bid, size=size)
time.sleep(3)
La cleanup-on-partial-fill è critica. Senza, un'esecuzione parziale lascia il bot esposto direzionalmente, che è l'opposto del punto stesso dello stat-arb.











