Polymarket Bot ट्यूटोरियल · 32 में से अध्याय 13
Polymarket पर market making: bid और ask को कैसे quote करें, spread capture करें, maker rebates (taker fees का 20-25%) कमाएँ, inventory risk math, और prediction markets में MM कब काम करता है।
यह अध्याय क्या कवर करता है
Polymarket पर market making का मतलब है market book के दोनों side लगातार quote करना और हर round trip पर spread कमाना। यह strategy traditional finance में अच्छी तरह समझी जाती है; Polymarket-specific फर्क maker-rebate program और prediction markets का adverse-selection profile है, जो CFD venues से ज़्यादा होता है। यह अध्याय ईमानदार math है।
- Plain English में market making
- Spread + rebate edge
- Inventory risk और skew
- Polymarket पर MM कब काम करता है (और कब नहीं)
- Code skeleton: दोनों sides को +/- N cents पर quote करना
- News flow के अनुसार quotes adjust करना
- Adverse selection spike होने पर bot को kill करना
Plain English में market making
एक market maker लगातार दोनों तरफ quote करता है: buy price (bid) और sell price (ask), जो mid से एक fixed spread से चौड़े होते हैं। जब कोई bid को hit करता है तो maker सस्ते में खरीदता है; जब कोई ask को lift करता है तो maker महंगे में बेचता है; bid और ask के बीच का difference maker की हर round trip पर revenue होता है।
यह strategy order-flow-driven होती है, directional नहीं। Maker यह opinion नहीं लेता कि YES जीतेगा या नहीं; वह यह position लेता है कि flow जारी रहेगा और spread मिलता रहेगा।
Risk adverse selection है: जो लोग आपकी bid को hit कर रहे हैं, उनके पास ऐसी जानकारी हो सकती है जो आपके पास नहीं है। समय के साथ, MM profits इस बात पर निर्भर करते हैं कि spread informed traders की slippage को cover करने के लिए पर्याप्त चौड़ा है या नहीं।
Spread + rebate edge
Polymarket maker के लिए दो revenue streams हैं।
Spread capture: 0.46 mid के आसपास bid 0.45 और ask 0.47 quote करें। bid पर हर fill जिसे आप बाद में ask पर exit कर सकें, 2 cents कमाता है। Net edge fill imbalance और price drift पर निर्भर करता है।
Maker rebate: Polymarket का liquidity-rewards program eligible markets में maker fills पर per-share rebate देता है। Numbers बदलते रहते हैं; current values के लिए official rewards page देखें। Rebate pUSD में periodical रूप से दिया जाता है, trade से अलग।
ज़्यादातर markets में spread capture बड़ी revenue stream होती है। Rebate तब meaningful होता है जब आप wide markets quote कर सकें (election year, major sports playoffs), जहाँ Polymarket liquidity आकर्षित करने के लिए rebates बढ़ाता है।
Inventory risk और skew
जो MM बार-बार bid पर hit होता है, वह long position accumulate करता है। Risk यह है कि inventory long होने पर mid नीचे गिर जाए; maker spread revenue के बाद भी position पर loss realize करता है।
Defense: quote skew (जब inventory long हो तो bid को नीचे और जब short हो तो ask को ऊपर move करें, ताकि एक-sided fills हतोत्साहित हों); inventory cap (जिस side पर आप पहले से बहुत long हैं, उस side पर quoting रोक दें); active rebalancing (जब inventory limit पर हो तो कभी-कभी spread cross करके position घटाएँ)।
Math: अगर bid पर 60% fills price 2 cents adverse move होने से पहले exit नहीं होते, तो strategy उन fills पर अकेले ही पैसा खो रही है। जब fill imbalance > 65/35 हो, तो aggressively skew करें।
Polymarket पर MM कब काम करता है (और कब नहीं)
MM Polymarket पर तब काम करता है जब तीन conditions पूरी हों।
- Liquid book: इतना quote competition कि आपका spread competitive हो, लेकिन zero न हो। 2024 election markets, major NFL/NBA games, BTC up/down 5m - all qualify.
- Two-sided flow: buyers और sellers दोनों active हों। One-sided markets (0.95+ के आसपास resolved-ish) में maker के लिए capture करने को कुछ नहीं होता।
- Bounded price moves: spread captures को 5-cent jumps खा न जाएँ। Stable mid-range markets (0.40-0.60) सबसे friendly होते हैं।
MM इन cases में fail करता है: news-driven markets जहाँ mid, re-quote करने से तेज़ move करता है; illiquid books जहाँ आप अकेले quote हैं और अगला trade 5 levels नीचे चला जाता है; resolution-imminent markets जहाँ एक side 0 या 1 की ओर converge कर रही होती है।
Code skeleton: दोनों sides को +/- N cents पर quote करना
सबसे सरल viable maker के लिए pseudocode।
SPREAD_CENTS = 2
INVENTORY_CAP_SHARES = 50
def make_loop(token_id):
while True:
book = fetch_book(token_id)
mid = (book.best_bid + book.best_ask) / 2
inv = chain_balance(token_id)
# Skew: pull the side we are too long on
bid_px = mid - SPREAD_CENTS/200 - (0.005 if inv > INVENTORY_CAP_SHARES * 0.6 else 0)
ask_px = mid + SPREAD_CENTS/200 + (0.005 if inv < -INVENTORY_CAP_SHARES * 0.6 else 0)
cancel_my_existing_quotes(token_id)
if inv < INVENTORY_CAP_SHARES:
place_gtc(token_id, side="BUY", price=bid_px, size=5)
if inv > -INVENTORY_CAP_SHARES:
place_gtc(token_id, side="SELL", price=ask_px, size=min(5, inv))
time.sleep(2)
Production makers इसमें जोड़ते हैं: per-side inventory tracking, cancel-before-place ordering, re-quote interval पर jitter ताकि आप predictable न बनें, adverse selection पर kill-switch (अगला section)।
News flow के अनुसार quotes adjust करना
जब कोई news event hit करता है, fair value आपके quotes से पहले move हो जाती है। जो MM news flow के दौरान quotes pull नहीं करता, उसे picked off कर लिया जाता है।
Signal: 30 seconds के भीतर incoming fills की cancel rate का baseline से ~3x ऊपर jump होना, या broader event-stream cross-check (Polymarket Twitter/Discord, Bloomberg headline feed)। जब यह detect हो, maker 60-120 seconds के लिए सारे quotes pull करता है, नए mid को stabilize होने देता है, फिर नए center के आसपास re-quote करता है।
सबसे simple implementation token के last-trade-price stream को watch करती है। rolling-window mean से 2 standard deviations से बड़ा jump pause trigger करता है। Price के 30+ seconds तक stable रहने पर bot फिर से engage करता है।
Adverse selection spike होने पर bot को kill करना
Hard exit। अगर पिछले 50 fills पर bot का fill PnL तेज़ी से negative हो जाता है, तो कुछ गलत है: या तो market अब news-driven है और आपको market making नहीं करनी चाहिए, या आपका spread current adverse-selection level के लिए बहुत tight है।
Encode करने के लिए kill conditions:
- लगातार 5 bid fills, लेकिन कोई ask fill नहीं, और पहले fill के बाद से mid > 1c नीचे।
- Last 25 round-trip fills पर realized PnL expected का -25% से नीचे।
- WebSocket disconnect या stale book detect होना।
- किसी भी side पर inventory cap पर > 5 minutes तक बने रहना।
Trigger होने पर सब cancel करें, market पर inventory flatten करें, 15+ minutes के लिए halt करें। जिस market maker के पास kill switch नहीं है, वह volatile periods में पैसा खोता रहेगा, जब तक trader manually notice करे - और यह हमेशा आपके अनुमान से ज़्यादा समय लेता है।














