מדריך Bot של Polymarket · פרק 15 מתוך 32

בוטים של microstructure בספורט ב־Polymarket: יתרון בזמן משחק, mispricing מונע־תוצאה, תגית ה־NBA ‏(745) ותגית ה־Tennis ‏(864), מקורות נתונים חיים, ודפוסי execution לשווקי ספורט בתדירות גבוהה.

מה מכסה הפרק הזה

שווקי ספורט הם הסגמנט הלא־פוליטי הפעיל ביותר באופן עקבי ב־Polymarket. הבוטים שעובדים מתחלקים לשתי קטגוריות ברורות: בוטי pre-game שתופסים את הקו ברגע שהוא נקבע, ובוטי microstructure בזמן משחק שמגיבים לתנועות ב־order book במהלך המשחק. הפרק הזה מכסה את שניהם, עם מזהי התגים, מקורות הנתונים, ותקציבי ה־latency הרלוונטיים לכל אחד.

שווקי ספורט הם הסגמנט הלא־פוליטי העמוס ביותר ב־Polymarket. דפוס ה־execution שעובד משלב feed חי של תוצאות (ESPN, PandaScore) עם אותות microstructure של ה־order book. הפרק הזה מכסה מה עובד במיוחד עבור NFL, NBA, כדורגל וטניס, ואיפה esports שונה.

  • למה שווקי ספורט ניתנים למסחר
  • Pre-game לעומת in-game (בוטים שונים)
  • מזהי tag מאומתים (745 NBA, 864 Tennis)
  • מקורות נתונים: ESPN, ‏official APIs, ‏on-screen
  • תקציב latency ל־in-game
  • מלכודת ה־0.99 / 0.01
  • קוד: להתחבר ל־games book ולהגיב

למה שווקי ספורט ניתנים למסחר

שווקי ספורט נסגרים בטווחי זמן מוגדרים (שעות עד ימים), יש להם נתוני live ציבוריים, והם מושכים זרימת orders רציפה במהלך המשחקים. שלושת אלה נחוצים כדי ששוק יהיה ניתן למסחר - שווקים פוליטיים חסרים "טווח זמן מוגדר", שווקי מזג אוויר חסרים "זרימה רציפה", וטורנירים אזוטריים חסרים "נתוני live ציבוריים".

אוכלוסיית ה־traders בשווקי ספורט גם מגוונת יותר מאשר, למשל, בשווקי בחירות. מהמרי ספורט מזדמנים מתמחרים באופן רגשי; traders מיודעים מתקנים לכיוון value הוגן לאורך מהלך המשחק. הפער בין השניים הוא היתרון של הבוט.

התפלגות ה־volume אינה אחידה: יום ראשון של NFL יגלגל מאות מיליוני דולרים על פני שווקי הספורט ב־Polymarket; משחק של יום שלישי בערב ב־Saudi Pro League עשוי לעשות פחות מ־$50k. התאימו את האסטרטגיה שלכם למקום שבו באמת יש activity.

Pre-game לעומת in-game (בוטים שונים)

שני עיצובים שונים מהותית של בוט.

Pre-game line-catcher: סורק שווקים שנפתחו זה עתה, מזהה lines מתומחרות לא נכון מול המודל שלכם או מול המספר של venue חד יותר, ומבצע buy ב־FOK. מחזיק עד ל־in-play, ולעיתים עד ההכרעה. מהירות: דקות ולא שניות. יתרון: מודל + line-shopping.

In-game microstructure: מתחבר ל־WebSocket של ה־order book של משחק חי, מגיב לאותות חוסר איזון + אירועי score בתוך שניות. מהירות: שניות ולא דקות. יתרון: latency + קריאת זרימת orders.

לשניים כמעט אין code משותף. יש להם פרופילי סיכון שונים, מקורות נתונים שונים, ואסטרטגיות יציאה שונות. בוט שמנסה לעשות את שניהם בסוף לא עושה אף אחד מהם טוב; בחרו אחד.

מזהי tag מאומתים (745 NBA, 864 Tennis)

מזהי tag לייצור שאומתו במאי 2026 עבור קטגוריות הספורט המרכזיות. השתמשו בהם כדי לסנן קריאות ל־/events ביעילות.

ספורט / ליגהTag IDtag slugהערות
NBA745nbaה־volume הגבוה ביותר אוק׳-יוני
NFL450nflשיא בימי א׳/ב׳ ספט׳-פבר׳
Tennis (all)864tennisכל השנה, לפי קצב הטורנירים
Soccer (general)1059soccerלשלב עם תתי־התגים למטה
EPL739epl
UCL2186uefa-champions-league
Esports (all)702esportsLoL+CS2+Valorant+Dota
MLB1245mlbשיא אפר׳-אוק׳
NHL823nhlשיא אוק׳-יוני

מזהי tag נשארים יציבים לאורך השנים. מתווספים tags חדשים (Saudi Pro League, ‏IPL) אבל tags ישנים לא ממוספרים מחדש.

מקורות נתונים: ESPN, ‏official APIs, ‏on-screen

עבור ספורט מסורתי, ה־API החינמי של לוח התוצאות של ESPN מכסה את כל מה שצריך: scores, ‏period/clock, ‏win-probability, ולעיתים גם מיקום הזריקה. לא נדרש key; יש rate limit רק ברמת ה־IP. דפוס ה־endpoint: https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard.

עבור esports, ל־ESPN אין coverage. אפשרויות: PandaScore ‏($30-60 לחודש, ה־industry standard), HLTV ‏(ל־CS2 בלבד, ניתן ל־scrape, ללא API), Liquipedia ‏(מתוחזקת על ידי הקהילה, ניתן ל־scrape, קצב עדכון איטי יותר).

feeds על המסך (תשלום על stream טלוויזיוני וקריאת scorebug באמצעות OCR) עובדים, אבל הם כבדים תפעולית. מומלץ רק אם יש לכם אסטרטגיה שדורשת עדכונים בפחות מ־3 שניות בספורט שאין לו API שמכסה אותו בזמן אמת.

תקציב latency ל־in-game

תקציב ה־latency מקצה לקצה עבור בוט reactive בזמן משחק.

  • אירוע score קורה: t=0
  • ה־feed המקורי משתקף: t+3-15 שניות (ESPN: כ־10 שניות; PandaScore: כ־3 שניות)
  • הבוט שלכם קורא את ה־feed: t+10-16 שניות
  • הבוט מחליט על פעולה: +50ms
  • הזמנת FOK נשלחת: +200-500ms
  • מתבצע match ב־CLOB: +300-1000ms (רשת + matching)

סה"כ: 11-17 שניות. הפירמות המקצועיות המהירות ביותר משיגות 3-5 שניות מקצה לקצה עם feeds פרימיום בתשלום ו־VPS באותה מיקום גאוגרפי. בוטים קמעונאיים שרצים על hosts רגילים ו־ESPN חינמי יהיו בקצה האיטי יותר.

אסטרטגיות שדורשות פחות מ־5 שניות אינן ישימות לקמעונאות. אסטרטגיות שכן עובדות בחלון של 10-17 שניות הן: תפיסת line אחרי score, הימור נגד תגובת־יתר, ועסקאות certainty בשלב מאוחר של המשחק.

מלכודת ה־0.99 / 0.01

כישלון ה־in-play הנפוץ ביותר של Bot ספורט: לקנות את המועמד המוביל הכבד ב־0.99 כשנשארה דקה, בציפייה לרווח קל של +1¢. שלוש סיבות לכך שזה נכשל.

ראשית, ההסתברות המשתמעת של 1% של האנדרדוג אינה אפס - קאמבקים מאוחרים קורים בתדירות שאינה זניחה. ניצחון "ודאי" ב־99.5%, שמבוצע 200 פעמים, מייצר הפסד אחד בגודל פוזיציה מלא.

שנית, ה־spread ב־0.99/0.01 אומר שאתם משלמים 99 סנט למניה, מרוויחים סנט אחד בהצלחה, ומפסידים 99 סנט בהיפוך נדיר. יחס סיכון-תגמול אכזרי.

שלישית, Bot שמשתמש ב־GTC sell ב־0.999 כמעט אף פעם לא יתמלא - אין קונים במחיר הזה. הפוזיציה פשוט נשארת עד ההכרעה. אם היא מנצחת, קיבלתם סנט אחד. אם ההיפוך קורה, אתם מפסידים 99 סנט.

המלכודת הזו היא כסף אמיתי שאבד על ידי בונים שלא עשו את החשבון. התרחקו משווקים מתומחרים ב־0.95+ אלא אם האסטרטגיה שלכם בנויה במיוחד לפרופיל redemption-arbitrage.

קוד: להתחבר ל־games book ולהגיב

Reference: להתחבר ל־WebSocket של משחק NBA מסוים, לרשום עדכוני book, ולשלוח 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()

תוספות לייצור: cooldown בין שליחות, מגבלת inventory לכל token, וכיבוי על book stale (אין הודעה במשך 30 שניות).

שאלות נפוצות

אילו תגיות ספורט הן הפעילות ביותר ב־Polymarket?
NBA ‏(tag_id 745), ‏Tennis ‏(tag_id 864), וכדורגל (משתנה לפי תחרות) מובילים ב־volume ל־24 שעות במהלך העונות שלהם. NFL מזנק מדי שבוע במהלך העונה הסדירה והפלייאוף. אימתנו בייצור את מזהי ה־tag של NBA ו־Tennis - את האחרים צריך לבדוק דרך ה־endpoint של gamma /tags לפני שסומכים עליהם.
האם אפשר לבנות Bot לשווקי ספורט בזמן משחק ולהרוויח?
ייתכן - אבל זה קשה. היתרון אמיתי (תוצאת live לעיתים מתומחרת לא נכון במשך 30-90 שניות) אבל גם Bots אחרים מסתכלים. התוצאות הטובות ביותר שראינו מגיעות משילוב של מקור נתוני score חי ומהיר עם כללים פשוטים ("היריב קלע, השוק עוד לא זז, קנה"). סטט־ארב טהור ללא מקור הנתונים מפסיד למתחרים מהירים יותר.
איפה משיגים נתוני ספורט חיים?
ל־ESPN.com יש endpoints לא רשמיים ב־JSON שמחזירים scores חיים - מספיק טוב להרבה אסטרטגיות. official APIs (NBA Stats API, ‏NFL public endpoints) אמינים יותר אבל איטיים יותר. חשבונות Twitter של כתבי שטח נותנים טקסט אבל דורשים parsing בעזרת LLM. אף אחד מהם אינו ברמת HFT; כולם "מהירים מספיק" לקמעונאות.
מהי מלכודת ה־0.99 / 0.01?
כאשר שוק ספורט נמצא ב־99 סנט YES (סביר מאוד שינצח), כמעט לא נשאר upside, ותנועה של סנט אחד יכולה למחוק רווח צפוי של חודשים. הרבה Bots נתפסים כשהם קונים ב־0.99 בניסיון לרדוף אחרי הסנט האחרון, ונחבלים כשאירוע לא צפוי מוריד את המחיר ל־0.85. כלל קשיח: לא לקנות מעל ~0.95 אלא אם חישוב ה־expected value שלכם חסין כדורים.
איך Polymarket ספורט משתווה ל־sportsbooks מסורתיים?
אין house edge על ה־spread (לעומת בערך 5-10% vig ב־FanDuel/DraftKings), אבל ה־liquidity דקה יותר וה־spreads יכולים להיות רחבים יותר. Polymarket מצטיין באירועים שהספרים המסורתיים מתמחרים בחסר - טורנירים בינלאומיים, esports, שווקי נישה. עבור NFL/NBA המיינסטרים, הספרים המסורתיים נזילים יותר אבל עולים יותר ב־vig.
האם הבוט שלי יכול לסחור בכמה שווקי ספורט במקביל?
כן - ואפילו כדאי. microstructure בספורט עובד הכי טוב כתיק של 5-20 משחקים במקביל. מגבלת פוזיציה לכל משחק (למשל 50 USD), מגבלת תיק (למשל 500 USD), וחשיפה לא קורלטיבית בין משחקים. ריכוז על משחק אחד ממקסם שונות.