Polymarket Bot Tutorial · Chapter 22 of 32

Polymarket پر NegRisk multi-outcome bots: sum-to-1 mechanics، جب YES legs 1 کے برابر نہ ہوں تو leg arbitrage، legs کے درمیان hedging، اور multi-outcome markets کے لیے مخصوص execution pitfalls۔

یہ chapter کیا cover کرتا ہے

Multi-outcome NegRisk markets mutually exclusive ہوتے ہیں - یعنی بالکل ایک ہی outcome YES resolve ہوتا ہے۔ یہ chapter chapter 11 کی execution mechanics کے اوپر strategy layer ہے: legs کے درمیان hedge کیسے کرنا ہے، sum-to-1 arb کب واقعی ہوتا ہے، اور وہ bugs جو اکثر NegRisk bots کو پہلی deploy پر لگتے ہیں۔

  • NegRisk vs binary recap
  • Sum-to-1 invariant اور arbitrage
  • Leg-by-leg hedge construction
  • Execution: orders میں neg_risk flag
  • NegRisk bots میں common bugs
  • Code: تمام legs کا snapshot لیں اور under-1.00 sum detect کریں

NegRisk vs binary recap

Binary: ایک yes/no market، دو tokens، sum to 1.0۔ NegRisk: N mutually exclusive outcomes، N tokens، event کے دوران تمام YES legs مجموعی طور پر تقریباً 1.0 بنتے ہیں۔

Execution کے لحاظ سے، NegRisk میں ہر order پر negRisk: true درکار ہوتا ہے (chapter 11) اور یہ ایک الگ exchange contract کے ذریعے route ہوتا ہے۔ Strategy کے لحاظ سے، NegRisk دو منفرد مواقع دیتا ہے جو binaries میں نہیں ہوتے: جب sum 1.0 سے ہٹ جائے تو cross-leg arb، اور متعدد YES legs خرید کر hedge construction۔

NegRisk کے unique costs: زیادہ legs = زیادہ spread tax (ہر traded leg پر تقریباً 0.5-1c spread cost)، illiquid events میں sum-to-1 deviations زیادہ (arb زیادہ دفعہ available ہوتا ہے مگر smaller ہوتا ہے)۔

Sum-to-1 invariant اور arbitrage

Arb premise: اگر تمام N YES legs خریدنے کی لاگت $1.00 سے کم ہو، تو resolution پر آپ نے guaranteed profit lock کر لیا ہے (ایک leg کو لازماً $1.00 ملے گا؛ باقی $0 پر چلے جائیں گے)۔

عملی طور پر، arb gap عموماً 0-3c ہوتا ہے، اور ہر leg پر spread + fees اسے کھا جاتے ہیں، اور opening کے چند منٹوں میں غائب ہو جاتا ہے۔ Capacity سب سے thin leg کی liquidity سے محدود ہوتی ہے۔

Arb مخصوص resolution failure modes کے تابع بھی ہوتا ہے: ایک "none of the above" outcome جو صراحتاً تب YES resolve ہوتا ہے جب کوئی named candidate qualify نہ کرے۔ اگر event میں ایسا leg موجود ہے اور آپ نے اسے نہیں خریدا، تو آپ کا "complete hedge" اصل payout miss کر دیتا ہے۔

Leg-by-leg hedge construction

اگر آپ کے پاس ایک NegRisk leg پر position ہے، تو آپ proportion کے مطابق competing legs پر YES خرید کر hedge کر سکتے ہیں۔ اگر آپ کے پاس Trump-YES 0.50 پر ہے اور Trump loss کے خلاف hedge کرنا چاہتے ہیں، تو آپ دوسرے named legs کا portfolio خریدتے ہیں۔

ہر leg کا hedge weight تقریباً اس leg کی current implied probability ہوتا ہے، بشرطیکہ Trump lose کرے۔ Approximation: weight_i = price_i / (1 - trump_price)۔

یہ hedge imperfect ہوتا ہے کیونکہ استعمال ہونے والی prices point-in-time ہوتی ہیں اور news آنے کے ساتھ conditional probabilities بدلتی رہتی ہیں۔ Hedge کو weekly یا major news پر rebalance کریں۔ اسے زیادہ over-engineer نہ کریں؛ hedge کا مقصد variance کم کرنا ہے، eliminate کرنا نہیں۔

Execution: orders میں neg_risk flag

NegRisk-specific سب سے common bug: order placement payload میں negRisk: true بھول جانا۔ Order API سے accept ہو جاتا ہے مگر settlement غلط ہوتی ہے کیونکہ وہ NegRisk exchange کے بجائے standard CTF exchange پر route ہو جاتا ہے۔

// CORRECT for NegRisk markets:
await client.createAndPostOrder(
  { tokenID, price, size, side: Side.BUY },
  { tickSize: '0.01', negRisk: true },   // <-- REQUIRED
  OrderType.FOK
);

Source of truth: Gamma API سے market.negRisk۔ اسے read کریں؛ پھر pass through کریں۔ کبھی بھی اندازے کی بنیاد پر flag hardcode نہ کریں۔

NegRisk bots میں common bugs

Multiple bots کے production debug logs سے۔

  1. Missing negRisk flag: orders accepted، settlement fail ہو جاتی ہے۔ علاج: ہر wrapper میں flag enforce کریں۔
  2. "Other" leg کے بغیر hedging: ایسے events میں جہاں "None of the above" outcome ہو، اسے exclude کر کے بنایا گیا hedge portfolio incomplete ہوتا ہے۔ علاج: hedge بناتے وقت ہمیشہ Other leg چیک کریں۔
  3. Sum-to-1 arb under-sizing: arber 1c edge تو realize کر لیتا ہے مگر ہر leg پر 5 shares trade کرتا ہے؛ total profit spread سے پہلے 5 cents بنتا ہے، net negative۔ علاج: arb کو meaningful absolute dollars نکالنے کے لیے size کریں، headline percentages chase نہ کریں۔
  4. Stale leg pricing: bot 3 leg prices fetch کرتا ہے، total 200ms لگتے ہیں، fetch کے دوران آخری leg کی price بدل گئی۔ علاج: تمام legs parallel میں fetch کریں + snapshot کو ایک observation سمجھیں۔

Code: تمام legs کا snapshot لیں اور under-1.00 sum detect کریں

Reference: NegRisk event کے تمام YES legs parallel میں snapshot کریں، arb detect کریں۔

import asyncio, aiohttp

async def fetch_leg_ask(session, token_id):
    async with session.get(f"https://clob.polymarket.com/book?token_id={token_id}") as r:
        d = await r.json()
        asks = d.get("asks", [])
        return float(asks[0]["price"]) if asks else None

async def check_arb(event_slug):
    event = await fetch_event(event_slug)
    if not event["markets"][0]["negRisk"]: return None
    legs = []
    for m in event["markets"]:
        toks = json.loads(m["clobTokenIds"])
        yes_token = toks[0]
        legs.append(yes_token)

    async with aiohttp.ClientSession() as s:
        asks = await asyncio.gather(*[fetch_leg_ask(s, t) for t in legs])
    if any(a is None for a in asks): return None
    total = sum(asks)
    if total < 0.97:
        return {"edge": 1 - total, "legs": list(zip(legs, asks))}
    return None

تمام legs کی atomic execution زیادہ مشکل مسئلہ ہے اور اس کے لیے per-leg FOK + partial fill پر rollback درکار ہوتا ہے (chapter 16 کے stat-arb code جیسا pattern)۔

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

NegRisk markets میں sum-to-1 invariant کیا ہے؟
NegRisk multi-outcome market کے تمام YES legs میں YES prices کا مجموعہ 1 USD کے قریب رہتا ہے کیونکہ بالآخر صرف ایک outcome جیتتا ہے۔ اگر fees نکالنے کے بعد sum 1.00 سے نیچے آ جائے، تو ہر leg proportion کے مطابق خریدنے سے arbitrage profit lock ہو جاتا ہے۔ یہ arb rare ہوتا ہے اور بہت تیزی سے sniped ہو جاتا ہے - اسے ایک دلچسپ بات سمجھیں، primary strategy نہیں۔
NegRisk pricing binary سے کیسے مختلف ہے؟
Binary: YES price آپ کا direct probability estimate ہوتا ہے۔ NegRisk: ایک leg کی YES price اس specific outcome کے N alternatives کے درمیان جیتنے کی probability ہوتی ہے۔ جیسے جیسے N بڑھتا ہے، individual prices چھوٹی ہوتی جاتی ہیں (probabilities کا مجموعہ 1 بنتا ہے)۔ NegRisk trading کے لیے relative probabilities میں سوچنا پڑتا ہے، absolute Yes/No میں نہیں۔
NegRisk bot کا سب سے common bug کیا ہے؟
Order placement میں neg_risk: true flag بھول جانا۔ Order یا تو reject ہو جاتا ہے یا غلط CTF position پر route ہو جاتا ہے۔ ہمیں production میں یہ مسئلہ ہوا تھا - ہماری trader history میں commit 06deaef خاص طور پر اسی fix کے لیے تھا۔ NegRisk orders پر ہمیشہ neg_risk=true (Python) یا negRisk: true (Node) set کریں۔
کیا میں legs کو hedge کر کے NegRisk پر پیسہ کما سکتا ہوں؟
نظری طور پر ہاں (دو legs کے درمیان spread lock کر کے)۔ عملی طور پر زیادہ تر retail bots کے لیے fees hedge edge کھا جاتی ہیں۔ Hedging market making کے دوران inventory neutral رکھنے کے لیے مفید ہے، standalone strategy کے طور پر نہیں۔
میں NegRisk markets کیسے تلاش کروں؟
gamma /events کو filter کریں اُن events کے لیے جن میں markets count > 2 ہو اور negRisk flag set ہو۔ Common categories: championship winners (NBA Finals MVP)، election fields (next Speaker)، tournament brackets۔ ہر gamma event میں اس کا child markets array شامل ہوتا ہے۔
کیا NegRisk markets binary سے زیادہ liquid ہوتے ہیں یا کم؟
ہر leg پر کم، مجموعی طور پر زیادہ۔ 30-team NBA Champion event میں شاید 24h volume 50K ہو، مگر ہر team market میں صرف 1.6K ہو سکتی ہے - جس سے per-leg trading مشکل ہو جاتی ہے۔ Aggregate liquidity واقعی ہوتی ہے، بس fragmented ہوتی ہے۔