Как тестировать стратегии Polymarket на ордербуке
Последняя цена, снятая раз в час, не скажет вам, исполнился бы ваш ордер или нет. Вот как тестировать стратегии Polymarket на той книге, против которой они действительно торговали бы.
Чтобы корректно протестировать стратегию Polymarket, вы проигрываете исторический ордербук, против которого стратегия торговала бы, — полную лестницу bid/ask на каждое изменение — и рассчитываете исполнение по той ликвидности, что действительно там стояла. Бэктест по последней цене или одному mid систематически завышает ваше преимущество, потому что прячет спред и слиппедж, которые платит реальный ордер.
Почему бэктест по последней цене врёт
Большинство свободно доступных данных Polymarket — это последняя цена сделки, часто снятая раз в час. Этого хватает, чтобы нарисовать график, и не более того. Бэктест же должен отвечать на куда более сложный вопрос: если бы мой ордер стоял в книге (или пересёк спред) в тот момент, исполнился бы он, в каком объёме и по какой цене?
Чтобы ответить, нужен ордербук — каждая стоящая заявка bid и ask вместе с её объёмом, а не одно-единственное число. Стратегия, протестированная по mid, исходит из того, что она всегда исполнялась по mid с нулевым слиппеджем, а это не так никогда. На краткосрочных крипторынках, где спреды расширяются ближе к расчёту, такое допущение способно превратить убыточную стратегию в мнимо прибыльную.
Шаг 1 — Получите данные ордербука с полной глубиной
Начните с данных, которые фиксируют полную книгу с обеих сторон и записываются на каждое изменение, а не по фиксированному таймеру. DepthFeed захватывает Polymarket по событиям, напрямую из CLOB websocket, поэтому каждое событие книги и изменения цены записывается с полной лестницей bid/ask — а не как часовой или поминутный сэмпл, который пропускает всю жизнь пятиминутного рынка.
Выгружайте нужные рынки через REST API: найдите их запросом GET /v3/{coin}/markets, затем заберите глубину из /v3/{coin}/markets/{id}/snapshots. Каждый snapshot несёт массивы цен и объёмов bid/ask плюс биржевую и принимающую метки времени в epoch-millis.
Шаг 2 — Восстановите книгу на каждый момент
Проигрывайте снимки (snapshots) в порядке меток времени, чтобы воссоздать книгу такой, какой она была в любое мгновение. Поскольку данные событийные, восстановление точно между событиями — никаких догадок с интерполяцией. Именно на это состояние реагирует ваша стратегия: best bid, best ask, глубина за каждым из них и спред.
Шаг 3 — Моделируйте исполнение по реальной глубине
Теперь честно симулируйте исполнение. Маркет-ордер проходит по книге: он исполняется сначала против лучшего уровня, затем следующего, пока не исчерпает свой объём, — поэтому его средняя цена хуже касания (touch) всякий раз, когда он съедает больше, чем верхний уровень. Стоящий в книге ордер встаёт в очередь и исполняется лишь тогда, когда рынок проторговывает его цену с достаточным объёмом позади.
Расчёт исполнения по записанной лестнице — в этом весь смысл: он даёт реалистичный слиппедж и вероятность исполнения вместо фантазии о том, что вы всегда торговали по mid.
Шаг 4 — Подтяните цену базового актива
Крипторынки up/down на Polymarket движимы спот-движением базового актива. Каждый snapshot DepthFeed соединяется с высокочастотной референсной ценой Binance по метке времени epoch-millis, так что вы можете сопоставить состояние книги со спот-движением, которое переоценило контракт, — это критично для любой стратегии, торгующей связь между ценой крипты и подразумеваемой вероятностью рынка.
Шаг 5 — Запуститесь вживую на том же коде
Исторический REST API и живой поток WebSocket выдают идентичные JSON-объекты snapshot. Это значит, что загрузчик, который вы написали для проигрывания истории, читает живой фид без изменений — никакого переписывания между исследованием и продакшеном. Прогоните бэктест, проверьте, затем направьте тот же код на wss://api.depthfeed.com/v3/stream и торгуйте.
Частые ошибки
- Данные по последней цене: скрывают спред и слиппедж, завышают доходность в бэктесте.
- Снимки с фиксированным интервалом: часовой или поминутный сэмпл пропускает большую часть жизни 5-минутного рынка.
- Игнорирование позиции в очереди: предположение, что стоящие ордера всегда исполняются, завышает пассивные стратегии.
- Заглядывание в будущее (look-ahead bias): реагируйте только на данные с принимающей меткой времени не позже момента вашего решения.
- Пропуск базового актива: преимущество в crypto up/down обычно живёт в связке спот → вероятность.
Key takeaways
- 01Тестируйте по ордербуку, а не по последней цене — именно глубина определяет исполнение.
- 02Используйте событийные данные: сэмплы с фиксированным интервалом упускают жизнь краткосрочных рынков.
- 03Моделируйте маркет-ордера, проходящие по книге, и стоящие ордера, ждущие в очереди.
- 04Подтягивайте цену базовой крипты, чтобы поймать связь спот → вероятность.
- 05Выбирайте данные, у которых история и живой фид в одном формате, чтобы торговать тем же кодом, что и в бэктесте.
Последняя цена, снятая раз в час, не скажет вам, исполнился бы ваш ордер или нет. Вот как тестировать стратегии Polymarket на той книге, против которой они действительно торговали бы.
Начать бесплатно