آموزش ربات پلیمارکت · فصل 15 از 32
رباتهای ریزساختار بازار ورزشی در پلیمارکت: مزیت در حین بازی، قیمتگذاری نادرست ناشی از نتیجهٔ بازی، tag مربوط به NBA (745) و tag مربوط به Tennis (864)، منابع داده زنده، و الگوهای اجرا برای بازارهای ورزشی با فرکانس بالا.
این فصل چه چیزهایی را پوشش میدهد
بازارهای ورزشی فعالترین بخش غیرسیاسی در پلیمارکت هستند. رباتهایی که جواب میدهند به دو دسته کاملاً مشخص تقسیم میشوند: رباتهای pre-game line-catcher که بعد از تعیین شدن خط معامله میکنند، و رباتهای in-game microstructure که در طول بازی به حرکت دفتر سفارشات واکنش نشان میدهند. این فصل هر دو را همراه با tag IDهای مشخص، منابع داده، و بودجههای تأخیر مربوط به هرکدام پوشش میدهد.
بازارهای ورزشی شلوغترین بخش غیرسیاسی در پلیمارکت هستند. الگوی اجراییِ مؤثر، یک فید امتیاز زنده (ESPN، PandaScore) را با سیگنالهای ریزساختار دفتر سفارشات ترکیب میکند. این فصل مشخصاً توضیح میدهد چه چیزی برای NFL، NBA، فوتبال، و tennis کار میکند، و esports چه تفاوتی دارد.
- چرا بازارهای ورزشی قابل معامله هستند
- pre-game در برابر in-game (رباتهای متفاوت)
- tag IDهای تأییدشده (745 NBA، 864 Tennis)
- منابع داده: ESPN، APIهای رسمی، روی صفحه
- بودجه تأخیر برای in-game
- دام 0.99 / 0.01
- کد: اشتراک به دفتر سفارشات یک بازی و واکنش نشان دادن
چرا بازارهای ورزشی قابل معامله هستند
بازارهای ورزشی در بازههای زمانی مشخص (از چند ساعت تا چند روز) حلوفصل میشوند، داده زنده عمومی دارند، و در طول بازیها جریان سفارش پیوسته جذب میکنند. هر سه برای قابل معامله بودن یک بازار ضروریاند - بازارهای سیاسی "بازه زمانی مشخص" را ندارند، بازارهای آبوهوا "جریان پیوسته" را ندارند، تورنمنتهای گمنام "داده زنده عمومی" را ندارند.
جمعیت معاملهگران در بازارهای ورزشی هم متنوعتر از مثلاً بازارهای انتخاباتی است. شرطبندهای معمولیِ ورزشی با احساس قیمتگذاری میکنند؛ معاملهگران آگاه در طول بازی قیمت را به سمت ارزش منصفانه اصلاح میکنند. فاصله بین این دو، مزیت ربات است.
توزیع حجم یکنواخت نیست: یک یکشنبهٔ NFL میتواند صدها میلیون دلار را در بازارهای ورزشی پلیمارکت جابهجا کند؛ یک مسابقهٔ شب سهشنبهٔ Saudi Pro League شاید کمتر از 50 هزار دلار حجم داشته باشد. استراتژی خود را متناسب با جایی تنظیم کنید که واقعاً فعالیت آنجاست.
pre-game در برابر in-game (رباتهای متفاوت)
دو طراحی کاملاً متفاوت برای ربات.
Pre-game line-catcher: بازارهایی را که تازه باز شدهاند اسکن میکند، خطهای با قیمتگذاری نادرست را در برابر مدل شما یا در برابر عدد یک پلتفرم حرفهایتر شناسایی میکند، و یک خرید FOK ثبت میکند. نگهداری تا حین بازی و گاهی تا حلوفصل. سرعت: دقیقهای، نه ثانیهای. مزیت: مدل + مقایسهٔ خطها.
In-game microstructure: به WebSocket دفتر سفارشات یک بازی زنده مشترک میشود و در عرض چند ثانیه به سیگنالهای عدمتعادل + رویدادهای امتیاز واکنش میدهد. سرعت: ثانیهای، نه دقیقهای. مزیت: تأخیر + خواندن جریان سفارش.
این دو تقریباً هیچ کدی را با هم به اشتراک نمیگذارند. پروفایل ریسک متفاوت دارند، منبع داده متفاوت دارند، و استراتژی خروج متفاوت. رباتی که بخواهد هر دو را انجام دهد معمولاً هیچکدام را خوب انجام نمیدهد؛ یکی را انتخاب کنید.
tag IDهای تأییدشده (745 NBA، 864 Tennis)
tag IDهای محیط تولید که در مه 2026 برای دستههای اصلی ورزشی تأیید شدهاند. از اینها برای فیلتر کردن مؤثر فراخوانیهای /events استفاده کنید.
| ورزش / لیگ | Tag ID | Tag slug | یادداشتها |
|---|---|---|---|
| NBA | 745 | nba | بیشترین حجم، اکتبر تا ژوئن |
| NFL | 450 | nfl | اوج یکشنبه/دوشنبه، سپتامبر تا فوریه |
| Tennis (همه) | 864 | tennis | تمام سال، با ریتم تورنمنتی |
| فوتبال (عمومی) | 1059 | soccer | با tagهای فرعیِ زیر ترکیب کنید |
| EPL | 739 | epl | |
| UCL | 2186 | uefa-champions-league | |
| Esports (همه) | 702 | esports | LoL+CS2+Valorant+Dota |
| MLB | 1245 | mlb | اوج آوریل تا اکتبر |
| NHL | 823 | nhl | اوج اکتبر تا ژوئن |
tag IDها در طول سالها ثابت میمانند. tagهای جدید اضافه میشوند (Saudi Pro League، IPL)، اما tagهای قدیمی دوباره شمارهگذاری نمیشوند.
منابع داده: ESPN، APIهای رسمی، روی صفحه
برای ورزشهای سنتی، API رایگانِ تابلوی امتیاز در ESPN تمام چیزی را که نیاز دارید پوشش میدهد: امتیاز، دوره/زمان بازی، احتمال برد، و گاهی موقعیت شوت. نیاز به کلید ندارد؛ فقط در سطح IP محدودیت نرخ دارد. الگوی endpoint: https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard.
برای esports، ESPN هیچ پوششی ندارد. گزینهها: PandaScore (30-60 دلار در ماه، استاندارد صنعت)، HLTV (فقط CS2، قابل استخراج، بدون API)، Liquipedia (نگهداریشده توسط جامعه، قابل استخراج، با ریتم بهروزرسانی کندتر).
فیدهای روی صفحه (پرداخت برای یک استریم تلویزیونی و خواندن نوار امتیاز با OCR) کار میکنند، اما از نظر عملیاتی سنگین هستند. فقط اگر استراتژیای دارید که به بهروزرسانیهای زیر 3 ثانیه روی ورزشی نیاز دارد که هیچ APIای آن را در زمان واقعی پوشش نمیدهد، توصیه میشوند.
بودجه تأخیر برای in-game
بودجه تأخیر سرتاسری برای یک ربات واکنشی in-game.
- رویداد امتیاز رخ میدهد: t=0
- فید منبع آن را منعکس میکند: t+3-15s (ESPN: حدود 10s؛ PandaScore: حدود 3s)
- ربات شما فید را میخواند: t+10-16s
- ربات تصمیم میگیرد: +50ms
- سفارش FOK ثبت میشود: +200-500ms
- در CLOB تطبیق داده میشود: +300-1000ms (شبکه + تطبیق)
جمع کل: 11-17 ثانیه. سریعترین شرکتهای حرفهای با فیدهای پولیِ ممتاز و VPS هممکانشده، بهصورت سرتاسری به 3-5 ثانیه میرسند. رباتهای خرد که روی هاستهای استاندارد و ESPN رایگان اجرا میشوند در انتهای کندتر این طیف قرار دارند.
استراتژیهایی که به زیر 5 ثانیه نیاز دارند برای کاربر خرد عملی نیستند. استراتژیهایی که در بازه 10-17 ثانیه خوب کار میکنند عبارتاند از: گرفتن خط بعد از امتیاز، معامله در خلاف جهتِ واکنشهای افراطی، و حرکتهای مبتنی بر قطعیت در اواخر بازی.
دام 0.99 / 0.01
رایجترین شکست حین بازی در رباتهای ورزشی: خرید یک فِیوریتِ سنگین در 0.99 با یک دقیقه مانده، با امید به +1¢ آسان. سه دلیل برای شکست آن.
اول، آن 1% احتمال ضمنی برای آندرداگ صفر نیست - بازگشتهای دیرهنگام با بسامدی غیرقابلچشمپوشی رخ میدهند. یک برد 99.5% قطعی، اگر 200 بار بازی شود، یک باخت در اندازه کامل موقعیت تولید میکند.
دوم، اسپرد در 0.99/0.01 یعنی شما هر سهم را 99 سنت میخرید، در صورت موفقیت 1 سنت سود میکنید، و در برگشتِ نادر 99 سنت ضرر میدهید. نسبت ریسک به بازده بیرحمانه است.
سوم، رباتی که با فروش GTC روی 0.999 کار میکند بهندرت پر میشود - در آن قیمت خریداری وجود ندارد. موقعیت تا حلوفصل ادامه پیدا میکند. اگر برنده شود، 1 سنت گرفتهاید. اگر برگشت رخ دهد، 99 سنت از دست میدهید.
این دام، پول واقعیِ از دسترفته توسط سازندگانی است که محاسبات را انجام نداده بودند. از بازارهای با قیمت 0.95+ دور بمانید مگر اینکه استراتژی شما مشخصاً برای پروفایل redemption-arbitrage ساخته شده باشد.
کد: اشتراک به دفتر سفارشات یک بازی و واکنش نشان دادن
مرجع: به WebSocket یک بازی خاص NBA مشترک شوید، بهروزرسانیهای دفتر سفارشات را لاگ کنید، و در صورت سیگنال عدمتعادل یک FOK بفرستید.
import websocket, json
THRESHOLD = 0.5 # imbalance level to trigger
def on_message(ws, message):
msg = json.loads(message)
if msg.get("event_type") != "book": return
bids = msg.get("bids", [])
asks = msg.get("asks", [])
bid_depth = sum(float(b["price"]) * float(b["size"]) for b in bids[:5])
ask_depth = sum(float(a["price"]) * float(a["size"]) for a in asks[:5])
total = bid_depth + ask_depth
if total < 100: return # too illiquid
imb = (bid_depth - ask_depth) / total
if abs(imb) > THRESHOLD:
print(f"signal imb={imb:.2f} bid={bid_depth:.0f} ask={ask_depth:.0f}")
# fire FOK here
ws = websocket.WebSocketApp(
"wss://ws-subscriptions-clob.polymarket.com/ws/market",
on_open=lambda ws: ws.send(json.dumps({"type":"Market","markets":["<CONDITION_ID>"]})),
on_message=on_message
)
ws.run_forever()
افزودنیهای محیط تولید: فاصلهٔ زمانی بین شلیکها، سقف موجودی برای هر token، توقف روی دفتر کهنه (اگر 30 ثانیه هیچ پیامی نیاید).


