Polymarket заменил RTDS: миграция на PolyBolt
15 сентября Polymarket тихо перевёл RTDS в разряд устаревших для референсных цен. Если ваш бот получает поток спот-цен, одновременно изменились шесть вещей — включая источник цен и формат символов, — и большинство из них ломается молча, а не громко.
Что изменилось и когда
15 сентября 2026 года Polymarket запустил PolyBolt по адресу wss://ws-live-v2.polymarket.com/ws и перевёл RTDS в устаревшие для референсных цен. crypto_prices, crypto_prices_chainlink и equity_prices переходят на новые каналы. Тема comments пока остаётся на RTDS.
Если ваш бот получает поток спот-цен, чтобы принимать какие-либо решения, — а на крипторынках Up/Down так делает большинство, — это касается вас. Одновременно изменились шесть вещей, и неприятно то, что некоторые из них ломаются тихо: вы остаётесь подключены, просто перестаёте получать те цены, которые, как вам кажется, получаете.
Шесть несовместимых изменений
| RTDS (устаревший) | PolyBolt | |
|---|---|---|
| URL | wss://ws-live-data.polymarket.com | wss://ws-live-v2.polymarket.com/ws |
| Аутентификация | Публичный | Нужны учётные данные CLOB API |
| Heartbeat | Клиент отправляет PING каждые 5 с | Ничего отправлять не нужно — сервер пингует каждые 25 с |
| Кадр подписки | {action, subscriptions:[{topic,type,filters}]} | {op, subscriptions:[{channel,filter}]} — filter — это объект, а не строка |
| Источник криптоцен | Binance / Chainlink | Pyth |
| Символы | btcusdt, btc/usd | btcusd — нижний регистр, USD, а не USDT |
Два изменения, которые отнимут больше всего времени
Источник цен сменился на Pyth. Ваша референсная цена теперь приходит от другого оракула, чем 14 сентября. Если вы калибровали пороги по тикам Binance, откалибруйте заново. И формат символов изменился — btcusdt и btc/usd теперь оба неверны. Неверный символ не вызывает ошибку; вы получаете подписку, которая никогда ничего не присылает.
Соответствие каналов
| Тема RTDS | Канал PolyBolt | Фильтр | Примечание |
|---|---|---|---|
crypto_prices | price.crypto | {"symbol":"btcusd"} | Источник Binance → Pyth; USDT → USD |
crypto_prices_chainlink | price.crypto | {"symbol":"btcusd"} | Источник Chainlink → Pyth |
crypto_prices_twap_sixty | price.crypto.twap | {"symbol":"btcusd","window_seconds":60} | 60-секундный TWAP Chainlink |
crypto_prices_twap_thirty | Нет | — | Замены не существует |
equity_prices | price.equity | {"symbol":"aapl"} | Тот же каталог, нижний регистр |
30-секундного TWAP просто больше нет
У crypto_prices_twap_thirty нет эквивалента в PolyBolt. Это важнее, чем кажется: 5-минутные крипторынки после 7 августа недолго разрешались по 30-секундному TWAP, а 14 августа перешли на 60 секунд. Если что-то в вашем стеке всё ещё использует 30-секундное окно, пути миграции у этого нет — нужен 60-секундный канал и заново откалиброванная модель.
Подключение
Сначала пройдите аутентификацию на открытом соединении, дождитесь подтверждения, затем подписывайтесь. Каналы референсных цен отклоняют подписки без аутентификации.
{
"op": "auth",
"rid": "a1",
"auth": {
"apiKey": "<api key>",
"secret": "<api secret>",
"passphrase": "<api passphrase>"
}
}Это те же учётные данные, которые вы получаете для торговли в CLOB, — ключ, секрет и passphrase вместе. Если вы их ещё не создавали, процесс L1/L2 описан в руководстве по эндпоинтам.
Три вещи, которые PolyBolt даёт, а RTDS не давал
- Снимок при каждой подписке. Каждая подписка возвращает цены за предыдущие две минуты с
snapshot: true(возможно, пустые). Инициализируйте локальное состояние по нему, затем применяйте живые обновления. В RTDS по тихому символу вы получали просто тишину и не знали, подключены ли вы или просто между тиками. - Плотный
seqи счётчикdropped. Наконец можно обнаруживать пропуски. В RTDS последовательности не было вовсе, так что пропущенное сообщение было невидимо. Отслеживайтеseqдля каждого канала и считайте любой скачок поводом для ресинхронизации. - Типизированные коды закрытия вместо сырого
1006:4001— аутентификация,4002— медленный потребитель,4003— сервер освобождается,4008— нарушение политики.4002означает, что вы слишком медленно вычитываете сокет, — это ошибка потребителя, а не сети, и переподключение её не исправит.
Используйте full_accuracy_value, а не value
value — это float; full_accuracy_value — точная десятичная строка. На рынке, который разрешается по сравнению TWAP, вы не захотите, чтобы сделку решало округление float в восьмом знаке. Кроме того: устаревшие кадры TWAP использовали window_s и цену в формате с фиксированной точкой E18. PolyBolt присылает десятичную строку — не применяйте преобразование E18, иначе ваши цены разойдутся на восемнадцать порядков.
Лимиты соединения
RTDS их не публиковал. PolyBolt публикует, и нарушение любого из них закрывает сокет с кодом 4008:
| Лимит | Значение |
|---|---|
| Подписок на соединение | 64 |
| Кадров подписки в секунду | 20 |
| Максимальный размер кадра | 64 KB |
| Кадров аутентификации | 8 |
Планировать стоит вокруг 64 подписок. Если вы отслеживаете BTC, ETH и SOL по споту и TWAP, это шесть, так что для криптобота запаса много, — но система, которая разворачивается на весь каталог акций, в него упрётся.
Миграция бота по шагам
- Получите учётные данные CLOB API, если у вас их нет. RTDS был публичным, PolyBolt — нет. Этот шаг блокирует всё остальное.
- Смените URL на
wss://ws-live-v2.polymarket.com/ws. - Удалите клиентский heartbeat. Цикл
PINGкаждые 5 секунд не просто не нужен — теперь это шум. Сервер пингует вас каждые 25 секунд. - Перепишите кадры подписки —
action→op,topic→channel, аfilterстановится JSON-объектом, а не строкой. - Исправьте все символы:
btcusdtиbtc/usdоба становятсяbtcusd. Нижний регистр, USD. - Обрабатывайте кадр снимка, чтобы не принять две минуты исторических данных за живые тики.
- Добавьте обнаружение пропусков по
seqи ресинхронизацию при скачке. - Перекалибруйте всё, что настроено на цены Binance. Теперь источник — Pyth.
Если вы используете TypeScript SDK
@polymarket/client версии 0.11.0 и новее оборачивает это: client.subscribe([{ topic: "prices.crypto", symbols: ["btcusd"] }]) на аутентифицированном SecureClient, и вы перебираете типизированные события типов subscribe и update. Аутентификация, кадрирование и heartbeat берутся на себя — общую картину миграции см. в руководстве по SDK.
Что это не меняет
Стоит быть точным, потому что легко мигрировать лишнее. Рыночный и пользовательский каналы CLOB не затронуты. wss://ws-subscriptions-clob.polymarket.com/ws/market по-прежнему передаёт обновления стакана и цен, по-прежнему требует клиентский PING каждые 10 секунд и по-прежнему скрывает best_bid_ask, new_market и market_resolved за custom_feature_enabled. Переехали только референсные цены. Подробности — в руководстве по WebSocket.
И более глубокое ограничение тоже не изменилось: поток даёт цены с момента подключения. Он не скажет, как выглядел стакан в прошлый вторник. Polymarket возвращает 404 для стакана разрешившегося рынка и хранит историю цен лишь примерно с одной точкой в минуту — поэтому для бэктестинга нужен архив, записанный, пока рынки работали. См. как устроены рынки Up/Down или найдите конкретный рынок через поиск рынка.
Часто задаваемые вопросы
- Что такое PolyBolt и когда он заменил RTDS?
- PolyBolt — это WebSocket Polymarket для референсных цен криптовалют, акций и TWAP, запущенный 15 сентября 2026 года по адресу wss://ws-live-v2.polymarket.com/ws. Он делает RTDS устаревшим для референсных цен: crypto_prices, crypto_prices_chainlink и equity_prices переходят на новые каналы PolyBolt. Тема comments пока остаётся на RTDS.
- Нужна ли аутентификация для PolyBolt?
- Да. Каналы референсных цен требуют учётных данных CLOB API — ключа, секрета и passphrase, — отправленных кадром аутентификации на открытом соединении до подписки. Это главное эксплуатационное отличие от RTDS, который был публичным. Дождитесь подтверждения аутентификации от сервера, прежде чем отправлять кадры подписки.
- Что заменило crypto_prices_chainlink?
- Канал price.crypto с фильтром {"symbol":"btcusd"}. Помимо названия меняются две вещи: источник переходит с Chainlink на Pyth, а формат символа меняется с btc/usd на btcusd в нижнем регистре. Для 60-секундного TWAP Chainlink используйте price.crypto.twap с window_seconds, равным 60. У темы 30-секундного TWAP замены в PolyBolt нет.
- Нужен ли в PolyBolt клиентский PING?
- Нет. В RTDS клиент отправлял текстовый PING каждые 5 секунд. В PolyBolt сервер пингует каждые 25 секунд, а клиент ничего не отправляет, хотя необязательный {"op":"ping"} принимается. Учтите, что рыночный канал CLOB не изменился и по-прежнему требует клиентский PING каждые 10 секунд.
- Почему я подключён к PolyBolt, но не получаю цены?
- Почти всегда это проблема формата символа. PolyBolt использует символы в нижнем регистре, оканчивающиеся на usd, поэтому btcusdt и btc/usd оба недопустимы — используйте btcusd. Неверный символ не вызывает ошибку; подписка просто ничего не присылает. Проверьте также, что аутентификация была подтверждена до отправки кадра подписки и что вы не принимаете начальный кадр снимка за единственные данные.
- Что означают коды закрытия PolyBolt?
- 4001 — ошибка аутентификации, 4002 — вы медленный потребитель и недостаточно быстро вычитываете сокет, 4003 — сервер освобождается, 4008 — нарушение политики, например превышение 64 подписок, 20 кадров подписки в секунду, кадр больше 64 KB или 8 кадров аутентификации. 4002 — это ошибка в вашем потребителе, а не сбой сети, так что переподключение без исправления пропускной способности просто повторит её.
Получите исторические данные, которые Polymarket не хранит
PolyTest записывает крипторынки Polymarket Up/Down в процессе их работы — 240M+ снимков с 8 уровнями глубины стакана, метками времени с точностью до долей секунды и сохранёнными разрешившимися рынками. Начните с 3-дневного бесплатного пробного периода.
Читать дальше
WebSocket в Polymarket: данные в реальном времени без обрывов
Опрос стакана — самый частый способ впустую сжечь бюджет лимита запросов. Вот четыре потока, параметры подписки, которые никто не документирует, и сбой, при котором ваш бот получает тишину и принимает её за затишье.
Как создать торгового бота для Polymarket
Большинство руководств по ботам для Polymarket построены на SDK, которых больше не существует. Здесь — актуальный путь от начала до конца: что устанавливать в 2026 году, как на самом деле работает аутентификация, где пробелы в данных и какие сбои убивают ботов в первую неделю.
Python SDK для Polymarket в 2026 году (и уход с py-clob-client)
Если ваш код всё ещё импортирует ClobClient из py_clob_client, он построен на устаревшем пакете — как и большая часть кода для Polymarket, который напишет вам ИИ-ассистент. Вот актуальный SDK и как на него перейти.