Туториал по боту Полимаркет · Глава 15 из 32
Спортивные микроструктурные боты на Полимаркет: преимущество по ходу игры, неверная оценка из-за счёта, тег NBA (745) и тег Tennis (864), источники данных в реальном времени и паттерны исполнения для высокочастотных спортивных рынков.
Что охватывает эта глава
Спортивные рынки - самый стабильно активный неполитический сегмент на Полимаркет. Работающие боты делятся на две чёткие категории: ловцы линий до матча, которые торгуют после того, как линия уже установлена, и микроструктурные боты по ходу матча, которые реагируют на движение стакана заявок во время игры. Эта глава охватывает оба подхода с конкретными тегами, источниками данных и бюджетами задержки, применимыми к каждому.
Спортивные рынки - самый загруженный неполитический сегмент на Полимаркет. Рабочий паттерн исполнения сочетает поток счёта в реальном времени (ESPN, PandaScore) с микроструктурными сигналами стакана заявок. В этой главе рассматривается, что работает именно для NFL, NBA, футбола и тенниса, а также чем отличается киберспорт.
- Почему на спортивных рынках можно торговать
- До матча или в ходе матча (разные боты)
- Подтверждённые tag ID (745 NBA, 864 Tennis)
- Источники данных: ESPN, официальные API, считывание с экрана
- Бюджет задержки для торговли по ходу игры
- Ловушка 0.99 / 0.01
- Код: подписка на стакан игры и реакция на него
Почему на спортивных рынках можно торговать
Sports markets закрываются в определенные временные рамки (от часов до дней), имеют public live data и привлекают непрерывный order flow во время игр. Все три фактора необходимы для tradeable market - political markets не имеют «определенного временного окна», weather markets не имеют «непрерывного flow», а obscure tournaments не имеют «public live data».
Пул trader-ов на sports markets также более разнообразен, чем, скажем, на election markets. Casual sports bettors оценивают события эмоционально; informed traders в течение игры корректируют цену к fair value. Разница между ними и есть bot edge.
Распределение volume неравномерно: в NFL Sunday через Полимаркет sports markets проходит сотни миллионов долларов; матч Saudi Pro League во вторник вечером может дать меньше $50k. Размер strategy нужно подбирать под то, где реально идет action.
До матча или в ходе матча (разные боты)
Два принципиально разных bot design.
Ловец линий до матча: сканирует только что открывшиеся рынки, находит неверно оценённые линии относительно вашей модели или относительно котировки на более «остром» рынке и размещает покупку FOK. Удерживает позицию до начала игры, иногда до расчёта. Скорость: минуты, а не секунды. Преимущество: модель плюс поиск лучшей линии.
Микроструктура по ходу матча: подписывается на WebSocket стакана заявок текущей игры, реагирует на сигналы дисбаланса и события счёта в течение секунд. Скорость: секунды, а не минуты. Преимущество: задержка плюс чтение потока заявок.
У этих двух подходов почти нет общего code. У них разные risk profiles, разные источники data, разные exit strategies. Bot, который пытается делать и то и другое, в итоге не делает хорошо ни одно; выберите один.
Подтверждённые tag ID (745 NBA, 864 Tennis)
Production tag IDs, подтвержденные в мае 2026 для основных спортивных категорий. Используйте их для эффективной фильтрации вызовов /events.
| Вид спорта / лига | Tag ID | Tag slug | Примечания |
|---|---|---|---|
| NBA | 745 | nba | наибольший объём окт-июнь |
| NFL | 450 | nfl | пик вс/пн сен-фев |
| Tennis (весь) | 864 | tennis | круглый год, по календарю турниров |
| Soccer (общий) | 1059 | soccer | комбинируйте с под-тегами ниже |
| EPL | 739 | epl | |
| UCL | 2186 | uefa-champions-league | |
| Esports (весь) | 702 | esports | LoL+CS2+Valorant+Dota |
| MLB | 1245 | mlb | пик апр-окт |
| NHL | 823 | nhl | пик окт-июнь |
Tag IDs стабильны из года в год. Новые tags добавляются (Saudi Pro League, IPL), но старым tags не присваивают новые номера.
Источники data: ESPN, official APIs, on-screen
Для традиционных sports бесплатный ESPN scoreboard API покрывает все необходимое: scores, period/clock, win-probability, иногда shot location. API key не нужен; ограничение действует только на уровне IP. Шаблон endpoint: https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard.
Для esports у ESPN нет покрытия. Варианты: PandaScore ($30-60/mo, industry standard), HLTV (только CS2, можно scrape, без API), Liquipedia (поддерживается community, можно scrape, но медленнее cadence обновления).
On-screen feeds (платить за TV stream и читать scorebug через OCR) работают, но operationally тяжелые. Рекомендуются только если у вас есть strategy, требующая обновлений быстрее 3 секунд для sport, у которого нет real-time API.
Бюджет задержки для торговли по ходу игры
Сквозной бюджет задержки для реактивного бота, торгующего по ходу игры.
- Происходит результативное событие: t=0
- Источник отражает событие: t+3-15с (ESPN: ~10с; PandaScore: ~3с)
- Ваш бот читает поток: t+10-16с
- Бот принимает решение: +50мс
- Ордер FOK размещён: +200-500мс
- Исполнение в CLOB: +300-1000мс (сеть + матчинг)
Итого: 11-17 секунд. Самые быстрые professional firms достигают 3-5 секунд end-to-end с paid premium feeds и co-located VPS. Retail bots, работающие на стандартных hosts и бесплатном ESPN, находятся в более медленном диапазоне.
Strategies, которым нужны sub-5s, не подходят для retail. Strategies, которые работают в окне 10-17s: line-catching after a score, fading overreactions, late-game certainty plays.
Ловушка 0.99 / 0.01
Самый частый failure in-play sports bot: покупка heavy favorite по 0.99 за минуту до конца в надежде на легкие +1¢. Почему это не работает, есть три причины.
Во-первых, 1% implied probability у underdog - это не ноль: поздние comebacks случаются с ненулевой частотой. Win с вероятностью 99.5%, сыгранный 200 раз, даст один loss на весь размер position.
Во-вторых, spread на 0.99/0.01 означает, что вы платите 99¢ за share, зарабатываете 1¢ при успехе и теряете 99¢ при редком reversal. Risk-reward здесь жестокий.
В-третьих, bot, использующий GTC sell на 0.999, почти никогда не исполнится - покупателей по этой цене нет. Position дотягивается до resolution. Если она выигрывает, вы получили 1¢. Если случается reversal, вы теряете 99¢.
Эта ловушка - реальные деньги, потерянные builders, которые не просчитали math. Держитесь подальше от markets с ценой 0.95+ unless ваша strategy специально построена под redemption-arbitrage profile.
Код: подписка на книгу матча и реакция
Образец: подпишитесь на 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()
Дополнения для продакшна: пауза между срабатываниями, лимит инвентаря на токен, остановка при устаревшей книге (нет сообщений 30 с).


