آموزش ربات پلی‌مارکت · فصل 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 IDTag slugیادداشت‌ها
NBA745nbaبیشترین حجم، اکتبر تا ژوئن
NFL450nflاوج یکشنبه/دوشنبه، سپتامبر تا فوریه
Tennis (همه)864tennisتمام سال، با ریتم تورنمنتی
فوتبال (عمومی)1059soccerبا tagهای فرعیِ زیر ترکیب کنید
EPL739epl
UCL2186uefa-champions-league
Esports (همه)702esportsLoL+CS2+Valorant+Dota
MLB1245mlbاوج آوریل تا اکتبر
NHL823nhlاوج اکتبر تا ژوئن

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 ثانیه هیچ پیامی نیاید).

سؤالات متداول

کدام tagهای ورزشی در پلی‌مارکت فعال‌تر هستند؟
NBA (tag_id 745)، Tennis (tag_id 864)، و فوتبال (بسته به مسابقه متفاوت است) در طول فصل‌های خودشان حجم 24 ساعته را رهبری می‌کنند. NFL هر هفته در فصل عادی و پلی‌آف جهش می‌کند. ما tag IDهای NBA و Tennis را در محیط تولید تأیید کرده‌ایم - بقیه باید قبل از اتکا، از طریق endpoint gamma /tags بررسی شوند.
آیا می‌توانم روی بازارهای ورزشی in-game به‌صورت سودده ربات بزنم؟
احتمالاً - اما سخت است. مزیت واقعی است (نتیجهٔ زندهٔ بازی اغلب برای 30 تا 90 ثانیه با قیمت‌گذاری نادرست می‌ماند) اما ربات‌های دیگر هم در حال نگاه کردن هستند. بهترین نتیجه‌هایی که دیده‌ایم از ترکیب یک منبع دادهٔ امتیاز زندهٔ سریع با قاعده‌های ساده به‌دست آمده‌اند ("حریف امتیاز گرفت، بازار هنوز حرکت نکرده، بخر"). stat-arb خالص بدون منبع داده از رقبای سریع‌تر شکست می‌خورد.
از کجا داده‌های ورزشی زنده بگیرم؟
ESPN.com endpointهای JSON غیررسمی دارد که امتیاز زنده برمی‌گردانند - برای بسیاری از استراتژی‌ها کافی است. APIهای رسمی (NBA Stats API، endpointهای عمومی NFL) قابل‌اعتمادتر اما کندترند. حساب‌های Twitter خبرنگاران ورزشی متن می‌دهند اما به تجزیه با LLM نیاز دارند. هیچ‌کدام در سطح HFT نیستند؛ همگی برای کاربر خرد به‌اندازهٔ کافی "سریع" هستند.
دام 0.99 / 0.01 چیست؟
وقتی یک بازار ورزشی روی 99 سنت YES است (یعنی احتمال برد بسیار بالا)، تقریباً هیچ فضای سودی باقی نمانده و یک حرکت 1 سنتی می‌تواند سود مورد انتظار چند ماهه را پاک کند. بسیاری از ربات‌ها با خرید در 0.99 و تعقیب آخرین سنت گیر می‌افتند و وقتی یک رخداد غیرمنتظره قیمت را به 0.85 می‌اندازد ضربه می‌خورند. قانون سخت: بالاتر از حدود 0.95 نخرید مگر اینکه محاسبهٔ ارزش مورد انتظار شما بی‌نقص باشد.
ورزش در پلی‌مارکت نسبت به سایت‌های شرط‌بندی سنتی چه تفاوتی دارد؟
روی اسپرد مزیت خانه ندارد (در مقایسه با حدود 5-10% vig در FanDuel/DraftKings)، اما نقدینگی کمتر است و اسپردها می‌توانند گسترده‌تر باشند. پلی‌مارکت برای رویدادهایی که کتاب‌های سنتی آن‌ها را کم‌قیمت‌گذاری می‌کنند عالی است - تورنمنت‌های بین‌المللی، esports، بازارهای خاص. برای NFL/NBA اصلی، کتاب‌های سنتی نقدینگی بیشتری دارند اما هزینهٔ vig بالاتر است.
آیا ربات من می‌تواند هم‌زمان روی چندین بازار ورزشی معامله کند؟
بله - و باید هم همین کار را بکند. ریزساختار بازار ورزشی بهترین عملکرد را به‌صورت یک پرتفوی از 5 تا 20 بازی هم‌زمان دارد. سقف موقعیت برای هر بازی (مثلاً 50 USD)، سقف پرتفوی (مثلاً 500 USD)، و قرارگیری در معرض ریسکِ نامرتبط در بازی‌های مختلف. متمرکز شدن روی یک بازی واریانس را به حداکثر می‌رساند.