विश्व कप की शुरुआत होते ही बाजार ने हमें एक छोटा सा सबक दे दिया: मजबूत टीमें हारती नहीं हैं, बल्कि उनके हारने का अंदाज़ अक्सर हमारी कल्पना से कहीं ज़्यादा रचनात्मक होता है।
उदाहरण के लिए, स्पेन बनाम केप वर्डे 0:0। मैच से पहले अगर केवल ताकत, रैंकिंग और टीम की गहराई देखी जाए, तो ज़्यादातर लोगों की सहज धारणा यही होती: स्पेन को जीतना चाहिए, है न? लेकिन फ़ुटबॉल की यही सबसे दिलचस्प और सबसे कष्टदायक बात है। आप सोचते हैं कि आपने "मजबूत टीम की जीत" खरीदी है, लेकिन असल में आपने 90 मिनट की पूरी कहानी का एक एपिसोड खरीदा है। पहले 15 मिनट में कोई गोल नहीं हुआ, बाजार में हलचल; आधे घंटे तक 0:0, बाजार भौंहें चढ़ाने लगता है; 70वें मिनट तक कोई हलचल नहीं, तो पहले से सुरक्षित दिखने वाली मजबूत टीम की जीत अचानक इतनी सुरक्षित नहीं रह जाती।
यहाँ एक क्लासिक विरोधाभास सामने आता है: आर्बिट्रेज (arbitrage) अच्छा है, भविष्यवाणी कठिन है।
असली आर्बिट्रेज सैद्धांतिक रूप से जोखिम-मुक्त होना चाहिए। उदाहरण के लिए, ऐसे कॉन्ट्रैक्ट का एक सेट खोजना जो परस्पर अनन्य और संपूर्ण हो, ताकि चाहे कुछ भी हो, पोर्टफोलियो भुगतान कर पाए और खरीद लागत भुगतान राशि से कम हो। यह बहुत अच्छा लगता है, एक ट्रेडर के लिए सपने जैसा। लेकिन यहाँ समस्या यह है: ऐसे अवसर बहुत कम होते हैं, और जब दिखते भी हैं तो बहुत जल्दी गायब हो जाते हैं, और उनकी क्षमता भी पर्याप्त नहीं होती।
भविष्यवाणी अलग बात है। आप यह अनुमान लगा सकते हैं कि मजबूत टीम के जीतने की संभावना अधिक है, आप टीम की संरचना, फॉर्म, शेड्यूल, चोटों का विश्लेषण कर सकते हैं, और बेटिंग ऑड्स से निहित संभावनाओं को भी देख सकते हैं, लेकिन मैच सिर्फ इसलिए हमारे साथ सहयोग नहीं करेगा क्योंकि हमने गंभीरता से विश्लेषण किया। विशेष रूप से फ़ुटबॉल में, एक जल्दी रेड कार्ड, एक पोस्ट, एक विचित्र VAR (वीडियो असिस्टेंट रेफरी) निर्णय, आपके खूबसूरत तर्क को मैच के बाद के विश्लेषण में तीन सेकंड के मौन में बदल सकता है।
तो सवाल उठता है: यदि शुद्ध आर्बिट्रेज बहुत दुर्लभ है, और शुद्ध भविष्यवाणी बहुत यादृच्छिक है, तो क्या हम इन दोनों के बीच में खड़े हो सकते हैं? बाजार ने हमें कुछ पूर्व संभावनाएँ दी हैं, जैसे मजबूत टीम की जीत की कीमत, 0:0 की कीमत, 0:1 की कीमत। ये कीमतें हवा से नहीं आती हैं; ये बाजार के विभिन्न परिदृश्यों के सामूहिक मूल्यांकन को दर्शाती हैं। क्या हम इन पूर्व संभावनाओं का उपयोग कर सकते हैं, और अपना एक छोटा सा गणितीय मॉडल जोड़कर, एक अपूर्ण लेकिन अधिक सुरक्षित पोर्टफोलियो तैयार कर सकते हैं, ताकि "पथ अभिसरण" (path convergence) की एक खिड़की खोल सकें?
यह इस विचार की शुरुआत है।
यह पारंपरिक जोखिम-मुक्त आर्बिट्रेज नहीं है, और न ही सिर्फ अंदाज़े से की गई भविष्यवाणी है। यह एक समझौता है: पहले यह स्वीकार करना कि बाजार द्वारा दी गई मुख्य संभावनाएँ संदर्भ के योग्य हैं, फिर कम संभावना वाले रास्तों का उपयोग करके मुख्य निर्णय के सबसे कमज़ोर हिस्से की रक्षा करना, और साथ ही एक सरल मॉडल के माध्यम से यह जाँचना कि कीमत स्वीकार्य है या नहीं।
मान लीजिए कि एक मैच में, ब्राज़ील स्पष्ट रूप से हैती से मजबूत है। बाजार द्वारा दिया गया ब्राज़ील की जीत का मूल्य 0.89 है, जो दर्शाता है कि ब्राज़ील की जीत एक मजबूत मुख्य पथ है। लेकिन हम सीधे केवल ब्राज़ील की जीत नहीं खरीदते हैं, बल्कि साथ ही दो सुरक्षा पथों का भी अध्ययन करते हैं: 0:0 और 0:1। क्योंकि किसी मजबूत टीम की जीत के बारे में सबसे कष्टदायक प्रारंभिक परिदृश्य अक्सर सभी परिणाम नहीं होते, बल्कि जब मैच लंबे समय तक गोल रहित रहता है या कमज़ोर टीम एक गोल कर लेती है।
इस प्रकार, प्रारंभिक पोर्टफोलियो इस प्रकार है:
text
ब्राज़ील जीत Yes
0:0 Yes
0:1 Yes
मान लीजिए कीमतें हैं:
text
ब्राज़ील जीत = 0.89
0:0 = 0.016
0:1 = 0.011
तीन पैरों की कुल लागत:
text
C = 0.89 + 0.016 + 0.011 = 0.917
यह सेट संपूर्ण घटनाओं का सेट नहीं है। इसमें 1:1, 0:2, 2:2, या अन्य अजीब परिदृश्य शामिल नहीं हैं। इसलिए यदि इसे मैच के अंत तक रखा जाए, तो यह निश्चित रूप से नुकसान दे सकता है, और सीधा नुकसान हो सकता है। लेकिन इसकी एक महत्वपूर्ण विशेषता है: यह बाजार द्वारा पहले से दी गई तीन संभावनाओं को एक साथ जोड़ता है, जिससे मुख्य जीत के चारों ओर एक पथों की टोकरी बनती है।
यदि अंततः ब्राज़ील जीतता है, तो पोर्टफोलियो 1 का भुगतान करता है। यदि अंततः 0:0 या 0:1 होता है, तो भी 1 का भुगतान होता है। अर्थात, यह खरीदता है:
text
ब्राज़ील जीत ∪ 0:0 ∪ 0:1
यदि इनमें से कोई भी पथ घटित होता है, तो परिपक्वता पर भुगतान 1 होगा। लागत 0.917 है, कवर किए गए पथों के भीतर 0.083 का अंतर है। लेकिन असली कुंजी मैच के अंत में नहीं, बल्कि बीच में है।
यदि ब्राज़ील जल्दी गोल करता है और स्कोर 1:0 हो जाता है, तो 0:0 और 0:1 के सुरक्षा पैर लगभग बेकार हो जाते हैं, लेकिन ब्राज़ील की जीत की कीमत बढ़ जाएगी। यदि उस समय ब्राज़ील जीत का विक्रय मूल्य प्रारंभिक कुल लागत से अधिक हो, और साथ ही कुछ लाभ भी हो, तो हम मुख्य जीत को बेच सकते हैं और इस पोर्टफोलियो को समय से पहले समाप्त कर सकते हैं।
सूत्र सरल है:
text
लाभ शर्त = ब्राज़ील जीत का बोल मूल्य >= प्रारंभिक कुल लागत C + लक्ष्य लाभ
उदाहरण के लिए, लक्ष्य लाभ 0.02 रखें:
text
ट्रिगर मूल्य = 0.917 + 0.02 = 0.937
यदि 1:0 के बाद ब्राज़ील जीत का बोल मूल्य 0.95 हो जाता है, तो:
text
लॉक किया गया लाभ = 0.95 - 0.917 = 0.033
यहाँ हम मैच के अंत में पुरस्कार पाने पर निर्भर नहीं हैं, बल्कि इस बात पर निर्भर हैं कि मैच का पथ एक अनुकूल शाखा में प्रवेश कर गया है, जिससे हम पोर्टफोलियो को समय से पहले बेच सकते हैं। यह प्रक्रिया कुछ हद तक बाजार द्वारा एक छोटी सी खिड़की खोलने जैसा है; आप उस खिड़की के पास खड़े होकर कविता न लिखें, बल्कि पहले उस खिड़की से निकल जाएँ।
लेकिन यहाँ एक और समस्या है: तीन पैर सस्ते लगते हैं, क्या यह निश्चित रूप से खरीदने लायक है? आवश्यक नहीं। बाजार मूल्य केवल पहली स्तर की जानकारी है। हमें एक स्वयं का संदर्भ मापदंड चाहिए, भले ही वह बहुत सरल हो।
यहाँ मैंने सबसे बुनियादी पॉइसन गोल मॉडल का उपयोग किया है।
फ़ुटबॉल के स्कोर को मोटे तौर पर दो टीमों द्वारा 90 मिनट में स्वतंत्र रूप से गोल करने की एक यादृच्छिक प्रक्रिया के रूप में देखा जा सकता है। मान लीजिए कि घरेलू टीम के 90 मिनट में अपेक्षित गोल λ_home हैं, और अतिथि टीम के अपेक्षित गोल λ_away हैं, तो घरेलू टीम के i गोल और अतिथि टीम के j गोल करने की संभावना इस प्रकार लिखी जा सकती है:
text
P(i, j) = Pois(i; λ_home) × Pois(j; λ_away)
जहाँ:
text
Pois(k; λ) = e^(-λ) × λ^k / k!
यह मॉडल निश्चित रूप से बहुत मोटा है। फ़ुटबॉल दो स्वतंत्र लॉटरी मशीनें नहीं है; गोल के बाद रणनीति बदल जाती है, रेड कार्ड बदल जाता है, और मानसिकता भी बदल जाती है। लेकिन इसकी अच्छी बात यह है कि यह सरल और पारदर्शी है, जो हमें कम से कम पूरी तरह से अंदाजे पर निर्भर नहीं रहने देता।
मैच से पहले, पॉइसन मॉडल हमें एक प्रारंभिक संदर्भ दे सकता है। हम मैन्युअल रूप से λ_home और λ_away दे सकते हैं, या प्रोग्राम को बाजार के सटीक स्कोर ऑड्स से उन्हें निकालने दे सकते हैं। उदाहरण के लिए, 0:0, 0:1, 1:0, 1:1, 2:0, 2:1, 3:0 जैसे स्कोर ऑड्स, प्रत्येक बाजार द्वारा दी गई एक संभावना बिंदु है। प्रोग्राम को λ_home और λ_away का ऐसा सेट खोजना होगा जो पॉइसन मॉडल द्वारा गणना की गई स्कोर संभावनाओं को इन बाजार कीमतों के यथासंभव करीब लाए।
दूसरे शब्दों में, बाजार कह रहा है: "मुझे लगता है कि ये स्कोर लगभग इतने पैसे के लायक हैं।" पॉइसन मॉडल धीरे से कहता है: "ठीक है, मैं उन्हें फिट करने की कोशिश करता हूँ, ताकि देख सकूँ कि इस कीमत सेट के पीछे कितनी गोल करने की ताकत छिपी है।"
रणनीति में निम्नलिखित कॉन्फ़िगर किया जा सकता है:
python
CALIBRATE_LAMBDA_FROM_MARKET = True
MODEL_SCORE_SAMPLES = "0-0,0-1,1-0,1-1,2-0,2-1,3-0"
ये स्कोर केवल मॉडलिंग के लिए उपयोग किए जाते हैं, ऑर्डर देने के लिए नहीं। वास्तविक ट्रेडिंग के पैर अभी भी ये होंगे:
text
लक्ष्य टीम की जीत
0:0
0:1
कोड में λ फिट करने के लिए ग्रिड सर्च (grid search) का उपयोग किया गया है। यह जटिल नहीं है, लेकिन बहुत सहज है।
python
def fit_lambdas_from_score_markets(quotes, model_score_legs, event_state=None):
samples = []
live_score = event_state.get("score_tuple") if event_state else None
minute = event_state.get("elapsed") if event_state else None
is_live = bool(live_score and minute not in [None, ""])
for leg in model_score_legs:
q = quotes.get(leg["name"])
p_market = quote_probability(q)
if p_market is None:
continue
target_h, target_a = parse_score_text(leg["score"])
if is_live:
current_h, current_a = live_score
if current_h > target_h or current_a > target_a:
continue
samples.append((target_h - current_h, target_a - current_a, p_market, leg["score"]))
else:
samples.append((target_h, target_a, p_market, leg["score"]))
if len(samples) < 2:
return None
best = None
for ih in range(5, 501, 5):
lh = ih / 100.0
for ia in range(5, 501, 5):
la = ia / 100.0
err = 0.0
for add_h, add_a, p_market, _score in samples:
p_model = poisson_pmf(add_h, lh) * poisson_pmf(add_a, la)
err += (p_model - p_market) ** 2
if best is None or err < best["err"]:
best = {"lambda_home": lh, "lambda_away": la, "err": err, "samples": samples}
if is_live:
ratio = max(0.01, max(0.0, 90.0 - float(minute)) / 90.0)
best["lambda_home"] = best["lambda_home"] / ratio
best["lambda_away"] = best["lambda_away"] / ratio
best["source"] = "live_score_markets"
else:
best["source"] = "pre_match_score_markets"
return best
मैच से पहले, यह λ केवल प्रारंभिक कैलिब्रेशन है। क्योंकि मैच अभी शुरू नहीं हुआ है, कोई रीयल-टाइम पथ अपडेट नहीं होता, स्कोर डिफ़ॉल्ट रूप से 0:0 रहता है, और शेष समय 90 मिनट है। इस चरण में हम इसका उपयोग एंट्री फ़िल्टरिंग के लिए करते हैं:
text
模型覆盖概率 = P(目标队胜) + P(0:0) + P(0:1)
और आवश्यकता है:
text
模型覆盖概率 - 市场成本 >= 安全边际
केवल जब बाजार मूल्य पर्याप्त सस्ता हो और मॉडल भी इस बास्केट में थोड़ी बढ़त देखे, तभी पोजीशन खोलने की अनुमति है।
असली मजा मैच शुरू होने के बाद आता है।
मैच शुरू होते ही पॉइसन मॉडल स्थिर नहीं रहता। मान लीजिए मैच 30वें मिनट पर है और स्कोर अभी भी 0:0 है, तो शेष समय केवल 60 मिनट है। भविष्य के गोलों की तीव्रता शेष समय के अनुपात में कम हो जाएगी:
text
λ_home_remaining = λ_home × (90 - t) / 90
λ_away_remaining = λ_away × (90 - t) / 90
अगर स्कोर पहले से 1:0 है, तो 0:0 और 0:1 अब संभव नहीं हैं। इस स्थिति में मॉडल को वर्तमान स्कोर से शुरू करके केवल शेष समय में कितने गोल होंगे, इसकी गणना करनी चाहिए। अंतिम स्कोर 2:0, 2:1, 3:0, 1:1 जैसे अभी भी संभव स्कोर ही नए अनुमान में भाग लेंगे।
यही रीयल-टाइम पॉइसन अपडेट की कुंजी है: हर मिनट यांत्रिक रूप से प्री-मैच λ को छोटा नहीं करना, बल्कि वर्तमान स्कोर, शेष समय और अभी भी संभव सटीक स्कोर बाजारों को मिलाकर, यह पुनः अनुमान लगाना कि मैच आगे कैसे बढ़ सकता है।
अंतिम रणनीति तीन स्तरों के निर्णयों में बदल जाती है।
पहला स्तर बाजार लागत है:
text
win_ask + 0:0_ask + 0:1_ask <= 最大允许成本
दूसरा स्तर पॉइसन फ़िल्टर है:
text
模型覆盖概率 - 市场成本 >= 安全边际
तीसरा स्तर पथ अभिसरण है:
text
当前组合 bid 价值 >= 初始成本 + 目标利润
केवल जब पहला और दूसरा स्तर एक साथ संतुष्ट हों, तभी एंट्री पर विचार किया जाता है। एंट्री के बाद, मॉडल पर अंतिम परिणाम की कल्पना करने के लिए भरोसा नहीं किया जाता, बल्कि वास्तविक बाजार bid का उपयोग करके यह तय किया जाता है कि पोजीशन बंद की जा सकती है या नहीं। मॉडल एंट्री की गुणवत्ता बढ़ाने का काम करता है, और बाजार यह तय करता है कि मुनाफा कब निकालना है।
कॉन्ट्रैक्ट खोज को भी जितना संभव हो सरल रखा गया है। Polymarket के World Cup मार्केट के slug बहुत नियमित होते हैं। उदाहरण के लिए, एक मैच का event slug है:
python
EVENT_SLUG = "fifwc-aut-jor-2026-06-17"
अगर हम Jordan की जीत पर दांव लगा रहे हैं, तो संबंधित जीत कॉन्ट्रैक्ट का प्रत्यय है:
python
WIN_SUFFIX = "jor"
फिर ट्रेड के लिए आवश्यक तीन कॉन्ट्रैक्ट सीधे बनाए जा सकते हैं:
python
def yes_symbol(slug):
return slug + "_USDC.Yes"
def build_legs():
legs = [
{
"name": "win",
"slug": EVENT_SLUG + "-" + WIN_SUFFIX,
"symbol": yes_symbol(EVENT_SLUG + "-" + WIN_SUFFIX),
"kind": "win",
}
]
for score in parse_scores(PROTECT_SCORES):
legs.append(
{
"name": "score_" + score.replace("-", "_"),
"slug": EVENT_SLUG + "-exact-score-" + score,
"symbol": yes_symbol(EVENT_SLUG + "-exact-score-" + score),
"kind": "score",
"score": score,
}
)
return legs
यहाँ कोशिश करें कि टीम के नामों का उपयोग करके अस्पष्ट खोज न करें। जैसे Jordan खोजने पर Michael B. Jordan, Jordan Pickford, Jordan Spieth आसानी से मिल जाते हैं, और फिर फुटबॉल रणनीति शुरू होने से पहले ही मनोरंजन उद्योग, इंग्लैंड के गोलकीपर और गोल्फ एक साथ बैठ जाते हैं। event slug का उपयोग करके कॉन्ट्रैक्ट बनाना अधिक साफ है।
मैच के दौरान रीयल-टाइम स्कोर की भी आवश्यकता होती है। पहले संस्करण में इसे सीधे Polymarket Gamma event से लिया जा सकता है:
python
def get_event_state():
data = get_json(GAMMA_BASE + "/events", slug=EVENT_SLUG)
e = data[0]
return {
"title": e.get("title"),
"score": e.get("score"),
"score_tuple": parse_score(e.get("score")),
"elapsed": e.get("elapsed"),
"period": e.get("period"),
"live": bool(e.get("live")),
"ended": bool(e.get("ended")),
"start_time": e.get("startTime"),
}
वर्तमान बेचने योग्य मूल्य के लिए वास्तविक ऑर्डर बुक के bid का उपयोग करें:
python
def basket_bid_value(legs, quotes):
total = 0.0
for leg in legs:
pos = positions.get(leg["name"], {})
amount = float(pos.get("amount", 0))
if amount <= 0:
continue
q = quotes.get(leg["name"])
if not q or q["bid"] is None:
continue
total += amount * q["bid"]
return total
लाभ-बुकिंग का निर्णय:
python
cost = current_position_cost()
value = basket_bid_value(legs, quotes)
target = cost + TARGET_PROFIT * SHARES
if value >= target:
close_all()
यह न्यूनतम संस्करण है। यह दिखावा नहीं करता कि उसने फुटबॉल पूर्वानुमान की समस्या हल कर ली है, और न ही यह दावा करता है कि वह स्थिर आर्बिट्रेज कर सकता है। यह सिर्फ "आर्बिट्रेज" और "पूर्वानुमान" के बीच की ग्रे ज़ोन का अध्ययन करने का एक प्रयास है।
आर्बिट्रेज की खूबसूरती निश्चितता में है, लेकिन निश्चितता दुर्लभ है। पूर्वानुमान का आकर्षण बड़ी जगह में है, लेकिन यादृच्छिकता भी बड़ी है। यह रणनीति जो करती है, वह यह है कि बाजार द्वारा दी गई पूर्वानुमान कीमत को सामग्री के रूप में लेती है, एक उच्च संभावना वाले मुख्य निर्णय के साथ, दो कम संभावना वाले सुरक्षा पथ जोड़ती है, और फिर प्वासों मॉडल के साथ एक मोटा फ़िल्टर लगाकर एक ऐसी खिड़की बनाने का प्रयास करती है जो मैच के दौरान जल्दी बंद हो सके।
जोखिम को स्पष्ट रूप से बताना होगा। यह कॉम्बिनेशन कोई पूर्ण घटना नहीं है, न ही जोखिम-मुक्त आर्बिट्रेज है। यह उन मैचों के लिए उपयुक्त है जहाँ मजबूत और कमजोर टीम के बीच का अंतर बड़ा हो, मुख्य पथ पर्याप्त स्पष्ट हो, और सुरक्षा पथों की कीमत पर्याप्त कम हो। अगर मैच 50-50 है, या सुरक्षा पथ पहले से ही महँगे हैं, तो जबरदस्ती करने का कोई मतलब नहीं है। सबसे बड़ी समस्या यह है कि यह सभी प्रतिकूल रास्तों को कवर नहीं करता, जैसे 1:1, 0:2, 2:2, जो कॉम्बिनेशन में स्पष्ट नुकसान पहुँचा सकते हैं। इसलिए पोजीशन सीमा, अधिकतम नुकसान और स्टॉप-लॉस नियम निर्धारित करना आवश्यक है; "आर्बिट्रेज जैसा दिखता है" इसलिए इसे आर्बिट्रेज नहीं माना जा सकता।
प्वासों मॉडल कोई जादू नहीं है। यह सिर्फ एक बहुत ही साधारण गणितीय आधार है, जो हमें "मुझे लगता है यह कीमत अच्छी है" से एक कदम आगे ले जाकर "कम से कम एक पारदर्शी मॉडल से इस कीमत की जाँच की गई है" तक पहुँचाता है। यह गलत हो सकता है, बाजार भी गलत हो सकता है, और हम स्वयं और भी अधिक गलत हो सकते हैं। ट्रेडिंग का सबसे ईमानदार हिस्सा शायद यह स्वीकारना है कि ये सब गलत हो सकते हैं, और फिर कोशिश करना कि गलती एक बार में पूरी मेज न पलट दे।
यह प्रयास बहुत उथला है। यह एक सवाल पूछने जैसा है: जब शुद्ध आर्बिट्रेज के अवसर कम होते जा रहे हैं, और शुद्ध पूर्वानुमान बहुत कठिन है, तो क्या हम बाजार द्वारा पहले से दी गई संभावनाओं का उपयोग करके अधिक संरचित ट्रेड बना सकते हैं? यह कल्पना नहीं कि जोखिम को खत्म किया जाए, बल्कि जोखिम को खोलकर देखा जाए कि वह किन रास्तों से आ रहा है।
शायद यह उत्तर नहीं है, लेकिन यह एक छोटा सा गड्ढा है जिसे खोदना जारी रखना उचित है। पूर्वानुमान हमें बताता है कि मुख्य सड़क कौन सी चौड़ी हो सकती है, आर्बिट्रेज की सोच हमें याद दिलाती है कि केवल दिशा न देखें, बल्कि पोर्टफोलियो की संरचना भी देखें। दोनों के बीच, शायद अभी भी बहुत कुछ खोजा जाना बाकी है।
रणनीति स्रोत कोड: Polymarket फुटबॉल पथ अभिसरण रणनीति
- 1




