Kurs budowy bota na Polymarket · Rozdział 17 z 32
Wykorzystaj nierównowagę arkusza zleceń Polymarket jako krótkoterminowy sygnał cenowy: stosunek wolumenu ofert kupna do sprzedaży, obliczanie microprice, okres półtrwania sygnału oraz to, kiedy boty na nierównowagę biją losową realizację.
Co obejmuje ten rozdział
Nierównowaga arkusza zleceń to stosunek głębokości po stronie kupna do głębokości po stronie sprzedaży w arkuszu zleceń z limitem. Na Polymarket ma ona realną, ale krótkotrwałą przewagę prognostyczną - zwykle 5-30 sekund, zanim cena środkowa się przesunie. Ten rozdział dotyczy wzorca obliczeń oraz warunków, w których sygnał bywa mylący.
To rozdział 17 naszej 32-częściowej serii o budowie bota tradingowego na Polymarket. Szczegółowo omawiamy temat w sekcjach poniżej. Treść każdej sekcji jest pisana i publikowana rozdział po rozdziale; odpowiedzi FAQ i sekcje referencyjne są już kompletne i odzwierciedlają doświadczenie produkcyjne z prowadzenia naszego własnego bota.
- Czym jest nierównowaga arkusza zleceń
- Obliczanie microprice
- Nierównowaga jako sygnał kierunkowy
- Okres półtrwania sygnału na Polymarket
- Kiedy sygnały nierównowagi kłamią
- Kod: obliczanie nierównowagi przy każdym ticku WebSocket
Czym jest nierównowaga arkusza zleceń
Nierównowaga arkusza zleceń to stosunek całkowitej głębokości po stronie kupna do całkowitej głębokości po stronie sprzedaży w arkuszu zleceń z limitem. Obliczana na N najlepszych poziomach (zwykle N=5) uchwytuje skumulowaną presję traderów, której cena środkowa jeszcze nie odzwierciedliła.
Wzór: imbalance = (Σ bid[i].price × bid[i].size for i in [0..N]) − (Σ ask[i].price × ask[i].size) / (Σ both). Zakres -1 do +1; wartość dodatnia oznacza większą presję kupna, ujemna - większą presję sprzedaży.
Sygnał jest empirycznie realny na Polymarket, ale zaszumiony. Pojedynczy wieloryb może stworzyć fałszywą nierównowagę na 30-60 sekund, zanim zostanie zniwelowana przez arbitrażystów. Użyteczny jako jedna z kilku cech, niebezpieczny jako jedyny wyzwalacz.
Obliczanie microprice
Microprice to dopracowanie prostej ceny środkowej: średnia ważona najlepszej oferty kupna i najlepszej oferty sprzedaży, ważona ich odpowiednimi rozmiarami.
microprice = (best_bid × ask_size + best_ask × bid_size) / (bid_size + ask_size)
Gdy kolejka po stronie ofert kupna jest znacznie większa niż po stronie sprzedaży, microprice przesuwa się bliżej oferty sprzedaży. Intuicja: więcej czekających kupujących oznacza, że następna transakcja z większym prawdopodobieństwem podniesie ofertę sprzedaży, więc wartość godziwa jest bliżej oferty sprzedaży.
Microprice to wskaźnik wyprzedzający rzeczywistą cenę środkową o 5-30 sekund. Boty produkcyjne używają go jako ceny odniesienia do decyzji o realizacji zysku zamiast naiwnej ceny środkowej.
Nierównowaga jako sygnał kierunkowy
Z obserwacji produkcyjnych: gdy nierównowaga zmienia się z -0,3 na +0,5 w ciągu 10 sekund bez towarzyszącego wydarzenia newsowego, cena środkowa rośnie o 1-2 centy w kolejnych 30-60 sekundach w około 65% przypadków.
To realna przewaga, ale zanika przy małych wielkościach pozycji po uwzględnieniu opłat. Aby ją zmonetyzować, bot musi skalować pozycję na tyle, by złapać ruch minus opłaty, ale na tyle mało, by samemu nie poruszyć arkusza. Arkusze zleceń Polymarket są zwykle na tyle cienkie, że wszystko powyżej 50 udziałów porusza rynek.
Łącz nierównowagę z innymi cechami: prędkością transakcji (więcej transakcji = realny sygnał), tym, czy najlepsza oferta kupna faktycznie idzie w górę (a nie tylko przesuwa się głębokość), oraz tym, że rynek nie działa w trybie napędzanym newsami.
Okres półtrwania sygnału na Polymarket
Sygnał nierównowagi zanika. Dane produkcyjne z naszego bota: nierównowaga > 0,6 → oczekiwany ruch ceny środkowej o 1,2 centa w ciągu 60 s, okres półtrwania około ~30 s. Po 90 sekundach wartość predykcyjna spada do zera.
Implikacja dla projektu bota: reaguj szybko albo pomiń sygnał. Bot, który potrzebuje 15 sekund na decyzję, zużywa połowę przewagi, zanim złoży zlecenie. Budżet latencji dla strategii opartych na nierównowadze powinien wynosić mniej niż 5 sekund od sygnału do odpalonego FOK.
Strategie utrzymujące pozycje dłużej niż okres półtrwania (1-2 minuty) grają na kolejny sygnał, a nie na bieżący. Bądź w tym precyzyjny; nie trzymaj przypadkiem pozycji opartej na nierównowadze aż do rozstrzygnięcia.
Kiedy sygnały nierównowagi kłamią
Sygnał bywa mylący, gdy zachodzi jeden z trzech warunków.
- Ruch napędzany newsami: nierównowaga jest konsekwencją newsów, których jeszcze nie widziałeś. Handel przeciwko temu przegrywa; handel zgodny z ruchem to arbitraż na newsach, czyli inna strategia.
- Spoofing wieloryba: duże zlecenie złożone i szybko anulowane tworzy fałszywą nierównowagę na czas jego obecności. Filtruj to, sprawdzając, czy nierównowaga utrzymuje się przez 10+ sekund przed uruchomieniem.
- Rebalansowanie na koniec okresu: animatorzy rynku wycofują kwoty z powodów zapasu, a nie informacji. Nierównowaga odwraca się kilka minut później, gdy maker ponownie wystawia kwoty.
Połączony filtr brzmi: nierównowaga > próg ORAZ prędkość transakcji > poziom bazowy ORAZ brak wydarzenia newsowego w ostatnich 5 minutach. Każdy filtr osobno daje zbyt wiele fałszywych sygnałów.
Kod: obliczanie nierównowagi przy każdym ticku WebSocket
Referencja: zasubskrybuj aktualizacje arkusza przez WebSocket, przeliczaj nierównowagę przy każdym ticku.
def on_book_message(msg):
bids = msg.get("bids", [])[:5]
asks = msg.get("asks", [])[:5]
bid_usd = sum(float(b["price"]) * float(b["size"]) for b in bids)
ask_usd = sum(float(a["price"]) * float(a["size"]) for a in asks)
total = bid_usd + ask_usd
if total < 100: return # illiquid
imb = (bid_usd - ask_usd) / total
state[msg["asset_id"]] = {
"imb": imb,
"best_bid": float(bids[0]["price"]) if bids else 0,
"best_ask": float(asks[0]["price"]) if asks else 1,
"ts": time.time()
}
# decision logic with cooldown + filters
if imb > 0.6 and time.time() - last_fired.get(msg["asset_id"], 0) > 60:
check_filters_and_maybe_fire(msg["asset_id"])
Stan jest per token. Okres wyciszenia zapobiega zbyt częstemu odpalaniu na ten sam sygnał. Filtry (sprawdzenie newsów, prędkość transakcji) bramkują właściwą transakcję.


