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 کرتے ہیں۔

اکثر پوچھے گئے سوالات

Order book imbalance کیا ہے؟
Book کے top پر bid volume اور ask volume کا ratio۔ ایک بہت زیادہ bid-skewed book (touch کے قریب buyers، sellers سے زیادہ) short term میں اوپر کی price pressure کی نشاندہی کرتا ہے۔ یہ signal crypto اور equities میں معروف ہے؛ Polymarket پر liquid markets میں کام کرتا ہے مگر thin markets میں غائب ہو جاتا ہے۔
Microprice کیسے compute کروں؟
microprice = (best_ask * bid_size + best_bid * ask_size) / (bid_size + ask_size). یہ mid-price کا volume-weighted version ہے جو کم volume والی side کی طرف جھکتا ہے - وہ side جو پہلے "ختم" ہوتی ہے۔ Bots اسے fair-value estimate کے طور پر استعمال کرتے ہیں جس میں imbalance شامل ہوتا ہے۔
Polymarket پر imbalance signal کی half-life کیا ہے؟
Active markets میں 5-30 seconds۔ Thin markets میں زیادہ لمبی، کیونکہ نئے orders کو imbalance overcome کرنے میں زیادہ وقت لگتا ہے۔ اگر آپ کا bot ایک second سے کم میں react کرے تو آپ اس کا کچھ حصہ capture کر سکتے ہیں۔ اگر وہ 5+ seconds میں react کرے تو عموماً دیر ہو چکی ہوتی ہے۔
Imbalance کب غلط ثابت ہوتا ہے؟
جب ایک بڑی order ایک side پر resting ہو اور hit ہونے کا انتظار کر رہی ہو (ایک بڑا resting bid، کوئی اور activity نہیں)۔ Imbalance حقیقی ہوتا ہے مگر price predict نہیں کرتا - بس ایک motivated buyer دکھاتا ہے۔ Volume کے بجائے orders کی تعداد شمار کر کے filter کریں: N orders بمقابلہ 1 order والا imbalance، 1-1 orders کے درمیان 5x volume سے زیادہ informative ہوتا ہے۔
کیا order book imbalance اکیلا trade کرنے کے لیے کافی ہے؟
عام طور پر نہیں۔ Standalone signal کے طور پر یہ کمزور ہے اور arbitrage ہو جاتا ہے۔ زیادہ durable edge کے لیے اسے کسی اور signal کے ساتھ combine کریں (مثلاً macroprice mean reversion، news flag، یا sports state)۔ Fees کے بعد imbalance اکیلا عموماً random execution سے کمزور کارکردگی دکھاتا ہے۔
Polymarket WS سے imbalance compute کرنے کے لیے کون سی Python library استعمال ہو سکتی ہے؟
ہمیں کوئی ready-made library معلوم نہیں - یہ چند درجن lines of code کا کام ہے۔ py-clob-client کے ذریعے market book کو subscribe کریں، ہر price_change event پر top-of-book bid/ask sizes recompute کریں، اور اپنا imbalance metric emit کریں۔ آخری value cache کریں اور صرف meaningful changes پر دوبارہ trigger کریں۔