Polymarket Bot Tutorial · باب 17 از 32
Polymarket order book 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 اور ان حالات کے بارے میں ہے جن میں یہ 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 سے +1 تک ہے؛ positive کا مطلب زیادہ buy pressure، negative کا مطلب زیادہ sell pressure۔
یہ signal empirically Polymarket پر حقیقی ہے مگر noisy بھی ہے۔ ایک single whale 30-60 seconds تک imbalance کو fake-print کر سکتا ہے، اس سے پہلے کہ اسے arbed out کر دیا جائے۔ اسے کئی features میں سے ایک feature کے طور پر استعمال کرنا مفید ہے، مگر sole trigger کے طور پر خطرناک ہے۔
Microprice computation
Microprice simple mid کی ایک refined شکل ہے: 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 کے زیادہ قریب آ جاتا ہے۔ منطق یہ ہے: زیادہ buyers کے انتظار میں ہونے کا مطلب ہے کہ اگلی trade کے ask کو lift کرنے کا امکان زیادہ ہے، اس لیے fair value ask کے قریب ہوتی ہے۔
Microprice اصل mid کے move ہونے سے 5-30 seconds پہلے ایک leading indicator کے طور پر کام کرتا ہے۔ Production bots naive mid کے بجائے take-profit decisions کے لیے اسی کو reference price کے طور پر استعمال کرتے ہیں۔
Directional signal کے طور پر imbalance
Production observation سے: جب imbalance 10 seconds میں -0.3 سے +0.5 پر flip کرے اور اس کے ساتھ کوئی news event نہ ہو، تو اگلے 30-60 seconds میں mid کے 1-2 cents اوپر جانے کا امکان تقریباً 65% ہوتا ہے۔
یہ ایک حقیقی edge ہے، لیکن fees کے بعد چھوٹے position sizes پر یہ ختم ہو جاتا ہے۔ Monetize کرنے کے لیے bot کو اتنا size کرنا ہوگا کہ move مائنس fees capture ہو جائے، مگر اتنا نہیں کہ خود book کو move کر دے۔ Polymarket کی books عموماً اتنی thin ہوتی ہیں کہ 50 shares سے زیادہ کچھ بھی market move کر دیتا ہے۔
Imbalance کو دوسری features کے ساتھ combine کریں: trade velocity (زیادہ trades = حقیقی signal)، best-bid کا واقعی اوپر جانا (صرف depth shifting نہیں)، market کا news-driven mode میں نہ ہونا۔
Polymarket پر signal half-life
Imbalance signal decay ہوتا ہے۔ ہمارے trader کے production data کے مطابق: imbalance > 0.6 → 60s کے اندر expected mid move 1.2c، half-life تقریباً ~30s۔ 90 seconds کے بعد predictive value صفر ہو چکی ہوتی ہے۔
Bot design کے لیے نتیجہ: تیزی سے react کریں یا skip کریں۔ جو bot فیصلہ کرنے میں 15 seconds لیتا ہے وہ order لگانے سے پہلے ہی edge کا آدھا حصہ consume کر چکا ہوتا ہے۔ Imbalance strategies کے لیے latency budget signal سے FOK fired ہونے تک 5 seconds سے کم ہونا چاہیے۔
وہ strategies جو positions کو half-life (1-2 minutes) سے زیادہ hold کرتی ہیں، وہ current signal پر نہیں بلکہ اگلے signal پر gamble کر رہی ہوتی ہیں۔ اس بات کو واضح رکھیں؛ imbalance-driven positions کو غلطی سے resolution تک hold نہ کریں۔
Imbalance signals کب غلط ثابت ہوتے ہیں
Signal تین میں سے کسی ایک condition میں misleading ہو جاتا ہے۔
- News-driven move: imbalance کسی ایسی news کا نتیجہ ہو جسے آپ نے نہیں دیکھا۔ اس کے خلاف trade کرنا نقصان دیتا ہے؛ اس کے ساتھ trade کرنا news arbitrage ہے، یعنی ایک الگ strategy۔
- Whale spoofing: ایک بڑا order لگا کر فوراً cancel کر دینے سے مدتِ اثر کے دوران fake imbalance بن جاتا ہے۔ Trigger کرنے سے پہلے دیکھیں کہ imbalance 10+ seconds تک برقرار رہے۔
- End-of-period rebalancing: market makers inventory reasons کی بنا پر quotes ہٹا رہے ہوتے ہیں، 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 per-token ہوتا ہے۔ Cooldown ایک ہی signal پر بار بار fire ہونے سے بچاتا ہے۔ Filters (news check، trade velocity) اصل trade تک رسائی control کرتے ہیں۔





