पॉलीमार्केट बॉट ट्यूटोरियल · अध्याय 22 / 32

पॉलीमार्केट पर NegRisk मल्टी-आउटकम बॉट: sum-to-1 यांत्रिकी, जब हाँ वाली लेग का जोड़ 1 नहीं होता तब लेग आर्बिट्राज, लेग के बीच हेजिंग, और मल्टी-आउटकम बाज़ारों से जुड़े एग्ज़ीक्यूशन के नुकसान।

इस अध्याय में क्या शामिल है

मल्टी-आउटकम NegRisk बाज़ार परस्पर अपवर्जी होते हैं - ठीक एक ही परिणाम हाँ पर रिज़ॉल्व होता है। यह अध्याय, अध्याय 11 की एग्ज़ीक्यूशन यांत्रिकी के ऊपर एक रणनीति की परत है: लेग के बीच हेज कैसे करें, sum-to-1 आर्बिट्राज कब असली होती है, और पहली बार डिप्लॉय करने पर ज़्यादातर NegRisk बॉट किन बग से टकराते हैं।

  • NegRisk बनाम बाइनरी का सार
  • Sum-to-1 नियम और आर्बिट्राज
  • लेग-दर-लेग हेज निर्माण
  • एग्ज़ीक्यूशन: ऑर्डर में neg_risk फ़्लैग
  • NegRisk बॉट में आम बग
  • कोड: सभी लेग का स्नैपशॉट लें और 1.00 से कम जोड़ पकड़ें

NegRisk बनाम बाइनरी का सार

बाइनरी: एक हाँ/नहीं बाज़ार, दो टोकन, जिनका जोड़ 1.0 होता है। NegRisk: N परस्पर अपवर्जी परिणाम, N टोकन, और इवेंट की सभी हाँ लेग का जोड़ लगभग 1.0 होता है।

एग्ज़ीक्यूशन के लिहाज़ से, NegRisk को हर ऑर्डर पर negRisk: true चाहिए (अध्याय 11) और यह एक अलग एक्सचेंज कॉन्ट्रैक्ट के ज़रिए रूट होता है। रणनीति के लिहाज़ से, NegRisk बाइनरी की तुलना में दो अनोखे अवसर देता है: जब जोड़ 1.0 से हटे तो लेग-के-बीच आर्बिट्राज, और कई हाँ लेग ख़रीदकर हेज निर्माण।

NegRisk की अनोखी लागतें: ज़्यादा लेग = ज़्यादा स्प्रेड कर (आप जिस भी लेग को ट्रेड करते हैं उसकी लागत लगभग 0.5-1c स्प्रेड होती है), और कम लिक्विडिटी वाले इवेंट में sum-to-1 का विचलन ज़्यादा चौड़ा होता है (आर्बिट्राज अक्सर मौजूद रहती है पर छोटी होती है)।

Sum-to-1 नियम और आर्बिट्राज

आर्बिट्राज का आधार: अगर सभी N हाँ लेग को ख़रीदने की लागत $1.00 से कम है, तो रिज़ॉल्यूशन पर आपने पक्का मुनाफ़ा लॉक कर लिया (किसी एक लेग को $1.00 चुकाना ही होगा; बाकी $0 पर चले जाएँगे)।

व्यवहार में, आर्बिट्राज का अंतर आम तौर पर 0-3c होता है, जो हर लेग पर स्प्रेड और फ़ीस खा जाते हैं, और खुलने के कुछ मिनटों में गायब हो जाता है। क्षमता सबसे पतली लेग की लिक्विडिटी तक सीमित होती है।

आर्बिट्राज कुछ ख़ास रिज़ॉल्यूशन विफलताओं के भी अधीन होती है: एक "none of the above" परिणाम जो तब स्पष्ट रूप से हाँ पर रिज़ॉल्व होता है जब कोई नामित उम्मीदवार योग्य नहीं होता। अगर इवेंट में ऐसी लेग है और आपने उसे नहीं ख़रीदा, तो आपका "पूरा हेज" असली भुगतान चूक जाता है।

लेग-दर-लेग हेज निर्माण

किसी NegRisk लेग पर पोज़ीशन रखते हुए, आप प्रतिस्पर्धी लेग की हाँ अनुपात में ख़रीदकर हेज कर सकते हैं। अगर आपके पास Trump-हाँ 0.50 पर है और आप Trump के हारने के ख़िलाफ़ हेज करना चाहते हैं, तो आप बाकी नामित लेग का एक पोर्टफोलियो ख़रीदते हैं।

प्रति-लेग हेज भार ≈ Trump के हारने पर उस लेग की मौजूदा निहित प्रायिकता। सन्निकटन: weight_i = price_i / (1 - trump_price).

हेज अपूर्ण होता है क्योंकि इस्तेमाल की गई कीमतें एक क्षण-विशेष की होती हैं और ख़बर आने पर सशर्त प्रायिकताएँ बदल जाती हैं। हेज को साप्ताहिक या किसी बड़ी ख़बर पर रीबैलेंस करें। इसे ज़रूरत से ज़्यादा जटिल न बनाएँ; हेज का मकसद वैरियंस घटाना है, ख़त्म करना नहीं।

एग्ज़ीक्यूशन: ऑर्डर में neg_risk फ़्लैग

NegRisk से जुड़ा सबसे आम बग: ऑर्डर देने वाले पेलोड में negRisk: true भूल जाना। ऑर्डर API से स्वीकार हो जाता है पर गलत तरीके से सेटल होता है क्योंकि वह NegRisk एक्सचेंज के बजाय मानक CTF एक्सचेंज पर रूट हो जाता है।

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

सत्य का स्रोत: Gamma API से market.negRisk। इसे पढ़ें और आगे भेजें। कभी भी अंदाज़े के आधार पर फ़्लैग हार्डकोड न करें।

NegRisk बॉट में आम बग

कई बॉट के प्रोडक्शन डिबग लॉग से।

  1. negRisk फ़्लैग का न होना: ऑर्डर स्वीकार होते हैं, सेटलमेंट विफल होता है। उपाय: हर रैपर में फ़्लैग को लागू करें।
  2. "Other" लेग के बिना हेजिंग: "None of the above" परिणाम वाले इवेंट में, उसे छोड़ने वाला हेज पोर्टफोलियो अधूरा होता है। उपाय: हेज बनाते समय हमेशा Other लेग जाँचें।
  3. Sum-to-1 आर्बिट्राज को कम साइज़ में करना: आर्बर 1c बढ़त (edge) हासिल करता है पर प्रति लेग सिर्फ 5 शेयर ट्रेड करता है; कुल मुनाफ़ा स्प्रेड से पहले 5 सेंट, यानी शुद्ध रूप से नकारात्मक। उपाय: आर्बिट्राज को इतना साइज़ दें कि सार्थक पूर्ण डॉलर निकलें, दिखावटी प्रतिशत के पीछे न भागें।
  4. बासी लेग कीमत: बॉट 3 लेग की कीमतें लाता है, कुल 200ms लगता है, और लाने के दौरान आख़िरी लेग की कीमत बदल जाती है। उपाय: सभी लेग को समानांतर में लाएँ और स्नैपशॉट को एक ही अवलोकन की तरह मानें।

कोड: सभी लेग का स्नैपशॉट लें और 1.00 से कम जोड़ पकड़ें

संदर्भ: NegRisk इवेंट की सभी हाँ लेग को समानांतर में स्नैपशॉट करें, आर्बिट्राज पकड़ें।

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

सभी लेग का परमाणविक एग्ज़ीक्यूशन एक कठिन समस्या है और इसके लिए प्रति-लेग FOK और आंशिक फ़िल पर रोलबैक चाहिए (अध्याय 16 के stat-arb कोड जैसा ही पैटर्न)।

अक्सर पूछे जाने वाले प्रश्न

NegRisk बाज़ारों में sum-to-1 नियम क्या है?
NegRisk मल्टी-आउटकम बाज़ार की सभी हाँ लेग में, हाँ कीमतों का जोड़ 1 USD के करीब रहता है क्योंकि ठीक एक ही परिणाम जीतता है। अगर फ़ीस काटकर जोड़ 1.00 से नीचे चला जाए, तो हर लेग को अनुपात में ख़रीदना आर्बिट्राज मुनाफ़ा लॉक कर देता है। आर्बिट्राज दुर्लभ होती है और बहुत जल्दी झपट ली जाती है - इसे मुख्य रणनीति नहीं, बल्कि एक जिज्ञासा की तरह मानें।
NegRisk मूल्य-निर्धारण बाइनरी से कैसे अलग है?
बाइनरी: हाँ कीमत आपका सीधा प्रायिकता अनुमान है। NegRisk: किसी एक लेग की हाँ कीमत N विकल्पों के बीच उस ख़ास परिणाम के जीतने की प्रायिकता है। जैसे-जैसे N बढ़ता है, अलग-अलग कीमतें घटती हैं (प्रायिकताओं का जोड़ 1 होता है)। NegRisk ट्रेडिंग के लिए सापेक्ष प्रायिकताओं में सोचना पड़ता है, पूर्ण हाँ/नहीं में नहीं।
NegRisk बॉट में सबसे आम बग क्या है?
ऑर्डर देते समय neg_risk: true फ़्लैग भूल जाना। ऑर्डर या तो अस्वीकार होता है या गलत CTF पोज़ीशन पर रूट हो जाता है। हमने इसे प्रोडक्शन में झेला - हमारे ट्रेडर इतिहास में एक commit ख़ास तौर पर यही सुधार था। NegRisk ऑर्डर पर हमेशा neg_risk=true (Python) या negRisk: true (Node) सेट करें।
क्या मैं लेग हेज करके NegRisk पर पैसा कमा सकता हूँ?
सिद्धांत में हाँ (दो लेग के बीच स्प्रेड लॉक करके)। व्यवहार में फ़ीस ज़्यादातर रिटेल बॉट के लिए हेज बढ़त (edge) खा जाती हैं। हेजिंग मार्केट मेकिंग के दौरान इन्वेंटरी को तटस्थ रखने के लिए काम आती है, अकेली रणनीति के रूप में नहीं।
NegRisk बाज़ार कैसे ढूँढूँ?
gamma /events को ऐसे इवेंट के लिए फ़िल्टर करें जिनमें markets count > 2 हो और negRisk फ़्लैग सेट हो। आम श्रेणियाँ: चैंपियनशिप विजेता (NBA Finals MVP), चुनावी क्षेत्र (next Speaker), टूर्नामेंट ब्रैकेट। हर gamma इवेंट में उसका child markets array शामिल होता है।
क्या NegRisk बाज़ार बाइनरी से ज़्यादा लिक्विड हैं या कम?
प्रति लेग कम, कुल मिलाकर ज़्यादा। 30-team NBA Champion इवेंट में 24 घंटे का वॉल्यूम कुल 50K हो सकता है पर हर team बाज़ार सिर्फ 1.6K हो सकता है - जिससे प्रति-लेग ट्रेडिंग मुश्किल हो जाती है। कुल लिक्विडिटी असली होती है, बस बिखरी हुई होती है।