Polymarket Bot Tutorial · Rozdział 13 z 32
Market making na Polymarket: jak kwotować bid i ask, przechwytywać spread, zarabiać maker rebates (20-25% taker fees), matematyka inventory risk oraz kiedy MM działa na prediction markets.
Co obejmuje ten rozdział
Market making na Polymarket oznacza ciągłe kwotowanie obu stron książki zleceń i zarabianie na spreadzie przy każdym round trip. Strategia jest dobrze znana w tradycyjnych finansach; specyficzne dla Polymarket są program maker rebate oraz profil adverse selection na prediction markets, który jest wyższy niż na platformach CFD. Ten rozdział to uczciwa matematyka.
To jest rozdział 13 z naszej 32-częściowej serii o budowie Polymarket trading bot. Omawiamy temat szczegółowo w sekcjach poniżej. Treści dla każdej sekcji są pisane i publikowane rozdział po rozdziale; odpowiedzi FAQ i referencje są już kompletne i odzwierciedlają doświadczenie produkcyjne z działania naszego własnego tradera.
- Market making prostym językiem
- Przewaga ze spreadu + rebate
- Inventory risk i skew
- Kiedy MM działa na Polymarket (a kiedy nie]
- Szkielet kodu: kwotuj obie strony o +/- N centów
- Dostosowywanie kwotowań do news flow
- Zatrzymywanie bota, gdy adverse selection rośnie
Market making prostym językiem
Market maker ciągle kwotuje zarówno cenę kupna (bid), jak i cenę sprzedaży (ask), szerzej niż mid o stały spread. Gdy ktoś uderza w bid, maker kupuje tanio; gdy ktoś podnosi ask, maker sprzedaje drogo; różnica między bid i ask to przychód makera z jednego round trip.
Strategia jest napędzana flow zleceń, a nie kierunkiem rynku. Maker nie ma opinii, czy YES wygra; zakłada, że flow będzie się utrzymywał, a spread będzie nadal płacony.
Ryzykiem jest adverse selection: osoby uderzające w twój bid mają informację, której ty nie masz. Z czasem zyski MM zależą od tego, czy spread jest wystarczająco szeroki, by pokryć slippage od świadomych traderów.
Przewaga ze spreadu + rebate
Dwa strumienie przychodu dla makera na Polymarket.
Przechwytywanie spreadu: kwotujesz bid 0.45 i ask 0.47 wokół mid 0.46. Każdy fill na bidzie, z którego później wyjdziesz na asku, zarabia 2 centy. Wynik netto zależy od nierównowagi filli i ruchu ceny.
Maker rebate: program liquidity rewards Polymarket wypłaca rebate per share za maker fills na kwalifikujących się rynkach. Wartości się zmieniają; sprawdź oficjalną stronę rewards, aby poznać aktualne stawki. Rebate jest wypłacany w pUSD okresowo, niezależnie od samego trade'u.
W większości rynków większym źródłem przychodu jest przechwytywanie spreadu. Rebate ma znaczenie wtedy, gdy możesz kwotować szerokie rynki (rok wyborczy, główne playoffy sportowe), gdzie Polymarket podbija rebate, aby przyciągnąć liquidity.
Inventory risk i skew
MM, który jest wielokrotnie uderzany na bidzie, akumuluje long position. Ryzyko polega na tym, że mid spadnie, gdy inventory jest long; maker realizuje stratę na pozycji, nawet po uwzględnieniu przychodu ze spreadu.
Obrony: quote skew (obniż bid, gdy inventory jest long, podnieś ask, gdy jesteś short, aby zniechęcić do jednostronnych filli); inventory cap (przestań kwotować po stronie, po której jesteś już zbyt long); active rebalancing (czasem crossing spread, aby zmniejszyć pozycję, gdy inventory osiąga limit).
Matematyka: jeśli 60% filli na bidzie nigdy nie zostaje zamknięte, zanim cena ruszy 2 centy przeciwko tobie, strategia traci pieniądze na samych tych fillach. Skew agresywnie, gdy nierównowaga filli > 65/35.
Kiedy MM działa na Polymarket (a kiedy nie]
MM działa na Polymarket, gdy spełnione są trzy warunki.
- Płynna książka: wystarczająca konkurencja kwotowań, by twój spread był konkurencyjny, ale nie zerowy. Rynki wyborcze 2024, główne mecze NFL/NBA, BTC up/down 5m — wszystkie się kwalifikują.
- Dwustronny flow: aktywni są zarówno kupujący, jak i sprzedający. Jednostronne rynki (resolved-ish przy 0.95+) nie dają makerowi nic do przechwycenia.
- Ograniczone ruchy cen: zyski ze spreadu nie są zjadane przez 5-centowe skoki. Stabilne rynki w środku zakresu (0.40-0.60) są najwdzięczniejsze.
MM zawodzi na rynkach napędzanych newsami, gdzie mid skacze szybciej, niż możesz złożyć nowe kwotowania; na niepłynnych książkach, gdzie jesteś jedynym kwotującym i kolejny trade przechodzi przez 5 poziomów; oraz na rynkach tuż przed rozstrzygnięciem, gdzie jedna strona zbiega do 0 albo 1.
Szkielet kodu: kwotuj obie strony o +/- N centów
Pseudocode dla najprostszego działającego makera.
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)
Production makers dodają: tracking inventory per side, kolejność cancel-before-place, jitter na interwale re-quote, aby nie być przewidywalnym, kill-switch przy adverse selection (następna sekcja).
Dostosowywanie kwotowań do news flow
Gdy uderza news event, fair value przesuwa się, zanim twoje kwotowania zdążą się dostosować. MM, który nie wycofuje kwotowań podczas news flow, zostaje picked off.
Sygnał: rate cancel incoming fills skacze powyżej ~3x baseline w ciągu 30 sekund albo szersza weryfikacja przez event stream (Polymarket Twitter/Discord, Bloomberg headline feed). Po wykryciu maker wycofuje wszystkie kwotowania na 60-120 sekund, pozwala nowemu mid się ustabilizować, a następnie ponownie kwotuje wokół nowego centrum.
Najprostsza implementacja obserwuje stream last-trade-price dla tokena. Skok większy niż 2 standard deviations od średniej z rolling window uruchamia pauzę. Bot wznawia działanie, gdy cena ustabilizuje się przez 30+ sekund.
Zatrzymywanie bota, gdy adverse selection rośnie
Twarde wyjście. Jeśli PnL filli bota z ostatnich 50 filli staje się wyraźnie ujemny, coś jest nie tak: albo rynek jest teraz napędzany newsami i nie powinieneś robić market makingu, albo twój spread jest ustawiony zbyt ciasno względem obecnego poziomu adverse selection.
Warunki zatrzymania do zakodowania:
- 5 kolejnych bid fills bez żadnego ask fill, a mid spadł o > 1c od pierwszego filla.
- Realized PnL z ostatnich 25 round-trip fills poniżej -25% oczekiwanego.
- Rozłączenie WebSocket lub wykrycie stale book.
- Inventory na limicie po którejkolwiek stronie przez > 5 minut.
Gdy zostanie uruchomiony, anuluj wszystko, wyczyść inventory po market, zatrzymaj na 15+ minut. Market maker bez kill switcha będzie tracił pieniądze w okresach zmienności, aż trader zauważy to ręcznie — a to zawsze trwa dłużej, niż myślisz.











