Polymarket Bot Tutorial · Kapitel 17 von 32
Nutze das Order-Book-Imbalance von Polymarket als kurzfristiges Preissignal: bid-ask volume ratio, microprice-Berechnung, Signal-Halbwertszeit und wann imbalance bots random execution schlagen.
Was dieses Kapitel behandelt
Order-book imbalance ist das Verhältnis von buy-side depth zu sell-side depth im limit order book. Auf Polymarket hat es einen echten, aber kurzlebigen Predictive Edge - typischerweise 5-30 Sekunden, bevor sich der mid bewegt. Dieses Kapitel beschreibt das Berechnungsmuster und die Bedingungen, unter denen das Signal irrt.
- Was Order-Book-Imbalance ist
- Microprice-Berechnung
- Imbalance als directional signal
- Signal half-life auf Polymarket
- Wann imbalance signals irren
- Code: Imbalance bei jedem WS-Tick berechnen
Was Order-Book-Imbalance ist
Order-book imbalance ist das Verhältnis der gesamten buy-side depth zur gesamten sell-side depth im limit order book. Berechnet auf den Top-N-Levels (typischerweise N=5), erfasst es den aggregierten Trader-Druck, den der mid-price noch nicht widerspiegelt.
Formel: imbalance = (Σ bid[i].price × bid[i].size for i in [0..N]) − (Σ ask[i].price × ask[i].size) / (Σ both). Bereich -1 bis +1; positiv bedeutet mehr buy pressure, negativ mehr sell pressure.
Das Signal ist empirisch auf Polymarket real, aber noisy. Ein einzelner whale kann imbalance für 30-60 Sekunden fake-printen, bevor es wieder arbed out wird. Nützlich als ein Feature unter mehreren, gefährlich als alleiniger Trigger.
Microprice-Berechnung
Der microprice ist eine Verfeinerung des einfachen mid: ein gewichteter Durchschnitt von best bid und best ask, gewichtet nach ihren jeweiligen Größen.
microprice = (best_bid × ask_size + best_ask × bid_size) / (bid_size + ask_size)
Wenn die bid-side queue viel größer ist als die ask side, liegt der microprice näher am ask. Die Intuition: Mehr wartende Käufer bedeuten, dass der nächste Trade mit höherer Wahrscheinlichkeit den ask anhebt, also liegt der faire Wert näher am ask.
Microprice ist ein 5-30-Sekunden leading indicator für die tatsächliche Bewegung des mid. Production bots nutzen ihn als Referenzpreis für take-profit-Entscheidungen statt des naiven mid.
Imbalance als directional signal
Aus Production-Beobachtung: Wenn sich imbalance in 10 Sekunden von -0.3 auf +0.5 dreht, ohne ein begleitendes news event, steigt der mid in den nächsten 30-60 Sekunden in etwa 65% der Fälle um 1-2 Cent.
Das ist ein echter Edge, aber er löst sich bei kleinen Positionsgrößen nach fees auf. Um ihn zu monetarisieren, muss der Bot groß genug size'n, um die Bewegung abzüglich fees mitzunehmen, aber klein genug, um das book nicht selbst zu bewegen. Polymarket books sind typischerweise so dünn, dass alles über 50 shares den Markt bewegt.
Kombiniere imbalance mit anderen Features: trade velocity (mehr Trades = echtes Signal), best bid bewegt sich tatsächlich nach oben (nicht nur depth shifting), Markt ist nicht im news-driven mode.
Signal half-life auf Polymarket
Das imbalance-Signal decayed. Production-Daten aus unserem trader: imbalance > 0.6 → erwartete mid-Bewegung von 1.2c innerhalb von 60s, half-life von etwa 30s. Nach 90 Sekunden ist der predictive value bei null.
Implikation für bot design: schnell reagieren oder skippen. Ein Bot, der 15 Sekunden für die Entscheidung braucht, verbraucht bereits die Hälfte des Edges, bevor er den Auftrag platziert. Das latency budget für imbalance strategies sollte unter 5 Sekunden von signal bis FOK fired liegen.
Strategien, die Positionen länger als die half-life halten (1-2 Minuten), spekulieren auf das nächste Signal, nicht auf das aktuelle. Sei hier explizit; halte imbalance-getriebene Positionen nicht versehentlich bis zur resolution.
Wann imbalance signals irren
Das Signal führt in die Irre, wenn eine von drei Bedingungen zutrifft.
- News-driven move: Die imbalance ist eine Folge von News, die du noch nicht gesehen hast. Dagegen zu traden verliert; mit ihr zu traden ist news arbitrage, also eine andere Strategie.
- Whale spoofing: Ein großer Order, der platziert und schnell gecancelt wird, erzeugt für die Dauer fake imbalance. Filtere, indem du prüfst, dass die imbalance 10+ Sekunden bestehen bleibt, bevor sie auslöst.
- End-of-period rebalancing: Market makers ziehen Quotes aus Inventory-Gründen statt wegen Information zurück. Die imbalance kehrt Minuten später um, wenn der MM neu quotiert.
Der kombinierte Filter lautet: imbalance > threshold UND trade velocity > baseline UND kein news event in den letzten 5 Minuten. Jeder Filter allein hat zu viele false positives.
Code: Imbalance bei jedem WS-Tick berechnen
Referenz: Abonniere WebSocket book updates und berechne imbalance bei jedem Tick neu.
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"])
State ist pro Token. Cooldown verhindert übermäßiges Auslösen auf dasselbe Signal. Filters (news check, trade velocity) gate die eigentliche Trade-Ausführung.





