Polymarket Bot Tutorial · अध्याय 17 of 32
Polymarket ऑर्डर बुक imbalance को short-term price signal के रूप में इस्तेमाल करें: bid-ask volume ratio, microprice computation, signal half-life, और कब imbalance bots random execution से बेहतर काम करते हैं।
यह अध्याय क्या कवर करता है
Order-book imbalance limit order book पर buy-side depth और sell-side depth का ratio है। Polymarket पर इसका वास्तविक लेकिन बहुत कम समय तक रहने वाला predictive edge होता है - आम तौर पर mid के move होने से 5-30 seconds पहले। यह अध्याय computation pattern और वे conditions बताता है जिनमें यह signal गलत साबित होता है।
- Order book imbalance क्या है
- Microprice computation
- Directional signal के रूप में imbalance
- Polymarket पर signal half-life
- कब imbalance signals गलत साबित होते हैं
- Code: हर WS tick पर imbalance compute करें
Order book imbalance क्या है
Order book imbalance limit order book पर total buy-side depth और total sell-side depth का ratio है। Top-N levels पर compute किया गया (आमतौर पर N=5), यह aggregate trader pressure को capture करता है जिसे mid-price अभी तक reflect नहीं कर पाया होता।
Formula: imbalance = (Σ bid[i].price × bid[i].size for i in [0..N]) − (Σ ask[i].price × ask[i].size) / (Σ both). Range -1 to +1; positive का मतलब अधिक buy pressure, negative का मतलब अधिक sell pressure।
Signal Polymarket पर empirically real है, लेकिन noisy है। एक single whale 30-60 seconds तक fake-print imbalance बना सकता है, उसके बाद उसे arbed out कर दिया जाता है। इसे कई features में से एक feature के रूप में उपयोग करना उपयोगी है, sole trigger के रूप में खतरनाक।
Microprice computation
Microprice simple mid का refined version है: best bid और best ask का weighted average, जिसे उनकी respective sizes से weight किया जाता है।
microprice = (best_bid × ask_size + best_ask × bid_size) / (bid_size + ask_size)
जब bid-side queue ask side से बहुत बड़ी होती है, microprice ask के ज्यादा करीब बैठता है। Logic यह है: अधिक buyers के wait करने का मतलब next trade के ask को lift करने की संभावना ज्यादा है, इसलिए fair value ask के करीब होती है।
Microprice actual mid के move होने का 5-30 second leading indicator है। Production bots इसे take-profit decisions के लिए naive mid के बजाय reference price के रूप में use करते हैं।
Directional signal के रूप में imbalance
Production observation के अनुसार: जब imbalance 10 seconds में -0.3 से +0.5 पर flip होता है, और साथ में कोई news event नहीं होता, तो अगले 30-60 seconds में mid के 1-2 cents ऊपर जाने की संभावना लगभग 65% होती है।
यह एक real edge है, लेकिन fees के बाद छोटे position sizes पर यह dissolve हो जाती है। इसे monetize करने के लिए bot को move minus fees capture करने के लिए पर्याप्त size लेना होगा, लेकिन इतना बड़ा नहीं कि खुद book को move कर दे। Polymarket की books आम तौर पर इतनी thin होती हैं कि 50 shares से ऊपर कुछ भी market को move कर सकता है।
Imbalance को अन्य features के साथ combine करें: trade velocity (जितने ज्यादा trades = उतना वास्तविक signal), best-bid का वास्तव में ऊपर जाना (सिर्फ depth shift नहीं), market का news-driven mode में न होना।
Polymarket पर signal half-life
Imbalance signal decay होता है। हमारे trader के production data के अनुसार: imbalance > 0.6 → 60s के भीतर 1.2c mid move की expected value, लगभग 30s की half-life। 90 seconds बाद predictive value zero हो जाती है।
Bot design के लिए implication: जल्दी react करें या skip करें। जो bot decision लेने में 15 seconds लगाता है, वह order place करने से पहले ही edge का आधा हिस्सा consume कर चुका होता है। Imbalance strategies के लिए latency budget signal से FOK fire होने तक 5 seconds से कम होना चाहिए।
जो strategies half-life (1-2 minutes) से ज्यादा देर position hold करती हैं, वे current signal पर नहीं बल्कि अगले signal पर gamble कर रही होती हैं। इसे स्पष्ट रखें; गलती से imbalance-driven positions को resolution तक hold न करें।
कब imbalance signals गलत साबित होते हैं
Signal तब misleading होता है जब नीचे दी गई तीन में से कोई एक condition मौजूद हो।
- News-driven move: imbalance किसी ऐसी news का परिणाम है जिसे आपने नहीं देखा। इसके खिलाफ trade करना नुकसानदेह है; इसके साथ trade करना news arbitrage है, जो एक अलग strategy है।
- Whale spoofing: एक बड़ा order लगाया जाता है और जल्दी cancel कर दिया जाता है, जिससे duration भर fake imbalance बनता है। Trigger करने से पहले verify करें कि imbalance 10+ seconds तक persist करे।
- End-of-period rebalancing: market makers inventory reasons के लिए quotes pull कर रहे होते हैं, information reasons के लिए नहीं। जब MM re-quote करता है, कुछ minutes बाद imbalance उलट जाता है।
Combined filter यह है: imbalance > threshold AND trade velocity > baseline AND पिछले 5 minutes में कोई news event नहीं। हर filter अकेले बहुत सारे false positives देता है।
Code: हर WS tick पर imbalance compute करें
Reference: WebSocket book updates subscribe करें, और हर tick पर imbalance recompute करें।
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 हर token के लिए अलग होता है। Cooldown एक ही signal पर बार-बार fire होने से रोकता है। Filters (news check, trade velocity) actual trade को gate करते हैं।





