Polymarket Bot Tutorial · Rozdział 16 z 32
Statistical arbitrage na Polymarket: pary cross-market (skorelowane zdarzenia), spready Polymarket-vs-Kalshi, mean reversion oraz jak dobierać wielkość pozycji stat-arb, gdy rynki ostatecznie się rozliczają.
Co obejmuje ten rozdział
Statistical arbitrage na Polymarket polega na wykorzystywaniu przejściowych nieprawidłowości cenowych między skorelowanymi rynkami — tym samym zdarzeniem na Polymarket i Kalshi albo powiązanymi rynkami wewnątrz samego Polymarket. Przewagi są niewielkie (zwykle 1-3 centy) i operacyjnie kruche. Ten rozdział uczciwie pokazuje, co działa, co nie działa, oraz ryzyko wykonania wieloetapowego, które zabija większość prób.
Cross-market statistical arbitrage wykorzystuje przejściowe niespójności cenowe między Polymarket i Kalshi, Polymarket i Manifold albo między skorelowanymi rynkami wewnątrz Polymarket. Przewagi są niewielkie (zwykle 1-3 centy) i wymagają szybkiej realizacji po obu stronach. Ten rozdział to uczciwy playbook, łącznie z operacyjną złożonością, która zabija większość prób.
To jest rozdział 16 z naszej 32-częściowej serii o budowie Polymarket trading bota. Temat omawiamy dogłębnie w sekcjach poniżej. Treść dla każdej sekcji jest pisana i publikowana rozdział po rozdziale; odpowiedzi w FAQ i referencje są już kompletne i odzwierciedlają production experience z działania naszego własnego tradera.
- Co oznacza stat-arb na prediction markets
- Przykłady spreadów Polymarket-vs-Kalshi
- Pary wewnątrz Polymarket (skorelowane zdarzenia)
- Mean reversion vs continuation trendu
- Dobór wielkości pozycji dla rynków rozliczających się, a nie wieczystych
- Ryzyko: divergence aż do rozliczenia
- Code: pairs monitor i threshold-trigger
Co oznacza stat-arb na prediction markets
Statistical arbitrage na prediction markets oznacza trading spreadu między dwoma rynkami, które powinny być wyceniane spójnie. Na Polymarket najczęściej spotyka się trzy warianty.
- Cross-venue: to samo zdarzenie na Polymarket i Kalshi (albo Manifold, PredictIt). Ceny powinny się zbiegać; w praktyce rozjeżdżają się o 2-5 centów.
- Same-event-pair: parent vs suma legs w rynkach NegRisk multi-outcome. Invariant sum-to-1 pozwala arbitrażować, gdy suma legs spada poniżej 1.0.
- Correlated-event-pair: dwa rynki dotyczące powiązanych wyników (np. „Trump president on Jan 1” vs „Trump president on Mar 1”). Powinny być wyceniane w granicach 2-3 centów od siebie.
Przewagi są małe. Złożoność operacyjna jest realna. Większość prób kończy się na execution, a nie w teorii.
Przykłady spreadów Polymarket-vs-Kalshi
Z obserwacji z lat 2025-26 wynika, że Polymarket i Kalshi notują te same duże wydarzenia w USA, ale regularnie wyceniają je z różnicą 1-4 centów. Ta luka istnieje z powodów strukturalnych, które trzeba uwzględnić w każdym arb.
Strukturalne czynniki:
- Fee asymmetry: Kalshi pobiera 4-7% od wygrywających transakcji (zależnie od rynku); Polymarket pobiera 0 fee po stronie taker. Matematyka arbitrażu musi odjąć „ugryzienie” Kalshi.
- Settlement risk premium: gdy rozliczenie rynku jest niejednoznaczne, UMA na jednej giełdzie może rozstrzygnąć inaczej niż sędziowie na drugiej. Rynek wycenia to ryzyko.
- Trader population: Polymarket ma zwykle młodszych, bardziej crypto-native traderów; Kalshi przyciąga bardziej profesjonalnych / hedge uczestników. Systematycznie nie zgadzają się co do tych samych zdarzeń.
Arb działa wtedy, gdy luka przekracza premię strukturalną plus fee. Luka 5 centów na rynku, gdzie premia strukturalna wynosi 1c, a łączne fee 1c, oznacza realną przewagę 3c.
Pary wewnątrz Polymarket (skorelowane zdarzenia)
Wewnątrz Polymarket skorelowane pary zdarzeń są łatwiejsze do arbitrażu niż cross-venue. Taka sama struktura fee, ten sam wallet, możliwa atomic execution.
Przykłady, które konsekwentnie są wyceniane niespójnie:
- Trump president on date A vs Trump president on date B (gdzie B jest później niż A o < 90 dni).
- Will Bitcoin hit $100k by July 31 vs $100k by August 31.
- Legs Yes vs No na tym samym binary market (suma powinna = 1.0; czasem w cienkich książkach rozjeżdża się nawet do 1.04).
Arb Yes+No=1 jest najczystszy: odczytaj oba legs z tego samego rynku, uruchom FOK na obu, jeśli suma spadnie poniżej 0.97 (z zapasem na spread tax). Wymagany kapitał jest mniej więcej równy na każdej nodze; execution jest atomiczne, gdy oba fill-e wracają w tej samej odpowiedzi.
Mean reversion vs continuation trendu
Dwa reżimy stat-arb. Mean reversion: para rozjechała się z powodu szumu; grasz na convergence. Trend continuation: para zaczęła się rozjeżdżać, bo pojawiła się nowa informacja; grasz na dalsze divergence.
Rozróżnienie ich to najtrudniejsza część. Heurystyka: jeśli divergence nastąpił przy widocznym volume (whale przesunął książkę jednej nogi), to jest to news — fade tylko wtedy, gdy masz model. Jeśli drift był powolny i przy niskim volume, to jest to szum — trade reversion z większą pewnością.
Dla nowych builderów: handluj tylko mean reversion, na parach, gdzie divergence jest < 1 standard deviation historycznego driftu. Trend continuation wymaga modelu, który wychwytuje news; bez niego handlujesz przeciw informed flow.
Dobór wielkości pozycji dla rynków rozliczających się, a nie wieczystych
Prediction markets się rozliczają. Pary crypto nie. To zmienia matematykę.
Pozycja pair-arb na Polymarket ma stały harmonogram wypłaty: gdy oba rynki się rozliczą, różnica między prognozowanym spreadem a rzeczywistym spreadem zostaje zamknięta. Nie ma rolling, nie ma nieskończonego trzymania.
Konsekwencja dla sizingu: maksymalna pozycja, jaką możesz utrzymać, jest ograniczona czasem do rozliczenia, ponieważ kapitał jest zablokowany do tego momentu. Para rozliczająca się za 6 miesięcy może przynieść 3c na share, ale nie możesz w międzyczasie użyć tego kapitału ponownie, jeśli oba rynki są w pełni zajęte.
Właściwe podejście: stat-arb na Polymarket to seria trade’ów o ograniczonym czasie trwania, a nie strategia ciągła. Porównuj PnL na jednostkę zablokowanego kapitału dziennie, a nie gross PnL.
Ryzyko: divergence aż do rozliczenia
Najgorszy wynik stat-arb to sytuacja, w której twoja prognoza convergence jest błędna, bo błędne było założenie bazowe. Przykłady:
- Zająłeś short na „Trump president on Apr 1”, oczekując, że zbiegnie do „Trump president on Mar 1” — ale rynek z datą 1 rozlicza się YES, a rynek z datą 2 rozlicza się NO z powodu marcowego impeachmentu. Twoja teza „spread powinien być płaski” była błędna.
- Arbowałeś Polymarket vs Kalshi na tego samego zwycięzcę NBA Finals. Polymarket rozlicza się na podstawie zespołu, który wygrał oficjalną serię; Kalshi rozlicza się według nieco innej definicji, która inaczej uwzględnia overtime tie-breakers. Oba rynki rozliczają się YES zgodnie z własnymi zasadami, ale w przeciwnych kierunkach.
Czytaj dokładnie kryteria rozliczenia każdego rynku. Cross-venue arb jest o jedno niedopasowanie rozliczenia od pełnej straty na obu nogach.
Code: pairs monitor i threshold-trigger
Reference: monitoruj dwa skorelowane tokeny, uruchamiaj arb, gdy spread przekroczy threshold.
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)
Cleanup-on-partial-fill jest krytyczne. Bez tego częściowe wykonanie zostawia bota z ekspozycją kierunkową, co jest przeciwieństwem całej idei stat-arb.











