POLYANA
54 subscribers
20 photos
1 video
18 links
We dive deeper into Polymarket than most.

Break down how to work with CLOB,
pricing, bots, and trading strategies.

For those who want to understand the market.
Download Telegram
Channel created
Канал создавался для личной рефлексии - теперь открываем его публично.

На Polymarket мы уже более 6 месяцев. Прошли через всё: от первых факапов до рабочего софта. Теперь делимся - чтобы ваш путь был проще.

Всё началось после того, как мы наткнулись на аккаунт Gabagool22. Увидели результаты и задались вопросом:
"А почему бы не написать что-то похожее?" - и понеслось.

Методом проб и ошибок выяснили, что 15-минутные маркеты - не наше. Причина простая: за 15 минут рынок успевает несколько раз сменить направление, шум перекрывает сигнал, а удерживать статистическое преимущество на таком горизонте значительно сложнее. В итоге остановились на 5-минутных опционах на BTC - достаточно коротко, чтобы работал моментум, и достаточно долго, чтобы успеть зайти.

На канале разберём всё, что нужно для работы с Polymarket на техническом уровне: архитектуру CLOB и matching engine, исполнение ордеров через py-clob-client с паттерном presign -> fire, микроструктуру рынка и динамику спреда, data pipeline от Binance WS до SQLite, инфраструктуру и деплой, все нужные эндпоинты и инструменты - а также бэктест с реальными результатами.

Любую идею можно реализовать. Если не сделаете вы - сделает кто-то другой.


POLYANA
Что такое BTC Up/Down на Polymarket

Каждые 5 минут на Polymarket открывается новый рынок. Вопрос простой: "BTC будет выше или ниже через 5 минут?"

Два токена: YES (вверх) и NO (вниз). Цена каждого - от $0.01 до $0.99.

Когда 5 минут заканчиваются - происходит РЕЗОЛВ.
Победивший токен становится $1.00.
Проигравший - $0.00.
Всё. Без нюансов.

Пример

BTC стоит $69,200. Открылось ОКНО 14:00–14:05.

Через 3 минуты BTC вырос до $69,250. Ты считаешь, что он останется выше. Покупаешь YES за $0.75.

Сценарий А: BTC в конце выше → YES = $1.00. Ты заработал +$0.25.
Сценарий Б: BTC упал ниже → YES = $0.00. Ты потерял -$0.75.

Где найти эти рынки

Каждое ОКНО - отдельный рынок с уникальным идентификатором. Находим через GAMMA API:

import requests, time

# Поточне 5-хв ВІКНО
now = int(time.time())
window_start = now - (now % 300)

slug = f"btc-updown-5m-{window_start}"
resp = requests.get(
"https://gamma-api.polymarket.com/events",
params={"slug": slug}
)
event = resp.json()[0]

for market in event["markets"]:
title = market["groupItemTitle"]
token_id = market["clobTokenIds"]
print(f"{title}: {token_id}")

# Виведе:
# Up: 28982754460...
# Down: 48776888529...


Кто устанавливает цену?

Не букмекер. Не Polymarket. Цену YES и NO определяет рынок - такие же трейдеры, как и ты. Они выставляют ордера в СТАКАН (книгу заявок), и из этого формируется цена.

Если все уверены, что BTC пойдет вверх - YES будет стоить $0.90+. Если есть неопределенность - где-то $0.50.

И вот здесь самое главное: рынок не всегда прав. Иногда YES стоит $0.65, а реальная вероятность Up - 85%. Эта разница - то, на чем можно зарабатывать.

#Entry | POLYANA
2
Обновленная база данных.

- polymarket_btc_5m_public.db
- BTC Up/Down 5-min raw data (Mar 11-24)
- ticks + orderbook + windows
- No strategy data included
- Size: 180 MB unzipped

#updated_data | POLYANA
Polymarket вводит новые комиссии - что меняется с 30 марта

Polymarket обновляет структуру комиссий. Сейчас TAKER FEE есть только на рынках Crypto и Sports. С 30 марта - на всех категориях, кроме Geopolitics.

Что сейчас (до 30 марта)

Crypto: peak rate 1.56%
Sports: peak rate 0.44%
Все остальное: 0%

Что будет (с 30 марта)

11 категорий, каждая со своей ставкой:

Категорія       Peak Rate   Maker Rebate
─────────────────────────────────────────
Crypto 1.80% 20%
Sports 0.75% 25%
Finance 1.00% 50%
Politics 1.00% 25%
Economics 1.50% 25%
Culture 1.25% 25%
Weather 1.25% 25%
Tech 1.00% 25%
Mentions 1.56% 25%
Other 1.25% 25%
Geopolitics 0% —


Как считается комиссия

# Формула:
# fee = C * p * feeRate * (p * (1 - p))^exponent
#
# C = кількість shares
# p = ціна share
# Peak rate = при p = 0.50 (максимальна невизначеність)
# При p → 0 або p → 1 комісія → 0

# Приклад: купуєш YES за $0.75 на Crypto ринку
p = 0.75
fee_rate = 0.072
exponent = 1
shares = 100

fee_per_share = p * fee_rate * (p * (1 - p)) ** exponent
# = 0.75 * 0.072 * (0.75 * 0.25)^1
# = 0.75 * 0.072 * 0.1875
# = 0.01013 за share (~1.01%)

total_fee = shares * fee_per_share
# = $1.01 на 100 shares


Что это означает для Up/Down трейдеров

BTC Up/Down - это категория Crypto. Peak rate вырастает с 1.56% до 1.80%.

Но есть нюанс. Комиссия симметричная - чем ближе цена к 0 или 1, тем меньше платишь. На наших типичных entry $0.70-0.85 эффективная ставка = ~1.0-1.3%.

При 80 трейдах в день со стейком $20:
Зараз:  ~$0.25/trade × 80 = ~$20/день
Після: ~$0.30/trade × 80 = ~$24/день
Різниця: +$4/день (~$120/міс)


Не критично, но съедает часть EDGE. Для стратегий с маленьким EV на трейд - может быть решающим.

Maker Rebate

20% собранных комиссий возвращаются мейкерам ежедневно. То есть если ставишь лимитные ордера, а не маркетные - часть комиссии получишь обратно.

Для ботов (API)


# Перевірити поточну ставку для токена:
import requests

resp = requests.get(
"https://clob.polymarket.com/fee-rate",
params={"token_id": your_token_id}
)
fee_bps = resp.json() # в basis points

# SDK (python/ts/rust) рахує автоматично
# REST API — потрібно додавати feeRateBps в signed order


Docs: docs.polymarket.com/trading/fees

#poly_updates | POLYANA
Как читать стакан на Polymarket

Ты уже знаешь, что цену YES и NO определяют трейдеры. Но как именно? Через СТАКАН - книгу ордеров.

Стакан состоит из двух сторон:

BID - сколько покупатели готовы заплатить
ASK - за сколько продавцы готовы продать

Ты всегда покупаешь по ASK. Продаешь по BID.

Пример

Открываем стакан YES токена:
ASK (продають)
$0.74 — 120 shares
$0.72 — 85 shares
$0.70 — 200 shares ← найкраща ціна
──────────────────────
BID (купують)
$0.68 — 150 shares ← найкраща ціна
$0.65 — 300 shares
$0.62 — 90 shares


Хочешь купить YES прямо сейчас - платишь $0.70. Хочешь продать - получаешь $0.68.

Разница между лучшим ASK и BID - это СПРЕД. Здесь: $0.70 - $0.68 = $0.02.

Почему спред важен?

Спред - это твой скрытый убыток при входе. Купил за $0.70, сразу же продал - получил $0.68. Минус $0.02 еще до того, как рынок вообще сдвинулся.

На активных окнах спред бывает $0.01-0.02. На "мертвых" - $0.05-0.10. Заходить в рынок с большим спредом = сразу быть в минусе.

Как получить стакан через API

import requests

token_id = "28982754460..." # YES токен

resp = requests.get(
"https://clob.polymarket.com/book",
params={"token_id": token_id}
)
book = resp.json()

best_ask = book["asks"][0] # найдешевший продавець
best_bid = book["bids"][0] # найдорожчий покупець

print(f"ASK: {best_ask['price']} x {best_ask['size']}")
print(f"BID: {best_bid['price']} x {best_bid['size']}")
print(f"Спред: {float(best_ask['price']) - float(best_bid['price']):.3f}")


Ликвидность

Еще одна вещь из стакана - сколько shares можно купить. Если ты хочешь купить на $500, а в ASK $0.70 стоит всего 50 shares ($35) - остальное придется добирать выше, по $0.72, $0.74...

Реальная цена входа для большого объема всегда хуже, чем видно вверху стакана. Это называется slippage.

——————————————

📖 СЛОВАРЬ

BID - максимальная цена покупателя в стакане
ASK - минимальная цена продавца в стакане
СПРЕД - разница между ASK и BID, скрытая стоимость входа
ЛИКВИДНОСТЬ - сколько объема доступно в стакане
SLIPPAGE - ухудшение цены при покупке большого объема
CLOB API - API для чтения книги ордеров на Polymarket

#Entry | POLYANA
3
Инфраструктура торгового бота для Polymarket BTC 5-мин бинарных опционов

Polymarket каждые 5 минут открывает бинарный рынок:
"BTC выше/ниже текущей цены через 5 минут?"
Ордербук с двумя токенами (YES/NO), резолв через Chainlink RTDS oracle. Разберем, как построить real-time pipeline для торговли на этих рынках.

1. Ландшафт API

Для полноценного бота нужны три источника данных одновременно:
Binance WS ──→ BTC ціна + потік угод (OFI)
Gamma API ──→ пошук ринків за slug + резолюція
CLOB API ──→ ордербук + розміщення ордерів


Market discovery — рынки появляються за ~30с до открытия окна:
import requests, time

def find_market(window_start_ts: int) -> dict | None:
slug = f"btc-updown-5m-{window_start_ts}"
url = f"https://gamma-api.polymarket.com/events?slug={slug}"
resp = requests.get(url, timeout=5)
events = resp.json()
if not events:
return None
event = events[0]
for m in event.get("markets", []):
tokens = m.get("clobTokenIds", [])
return {
"slug": slug,
"yes_token": tokens[0],
"no_token": tokens[1],
"condition_id": m.get("conditionId", ""),
}
return None

# Вікно кожні 5 хв (00:00, 00:05, 00:10...)
now = int(time.time())
window_start = now - (now % 300)
market = find_market(window_start)


2. Трюк с комплементарными токенами

На Polymarket YES + NO = $1.00. Это дает неочевидную возможность для лучшего входа:
def get_best_yes_entry(yes_best_ask, no_best_bid):
"""
Найкраща ціна для купівлі YES:
min(YES ask, 1 - NO bid)

Приклад: YES ask = 0.87, NO bid = 0.14
-> 1 - 0.14 = 0.86 -- дешевше через NO сторону!
"""
candidates = []
if yes_best_ask and 0.01 < yes_best_ask < 0.99:
candidates.append(yes_best_ask)
if no_best_bid and 0.01 < no_best_bid < 0.99:
candidates.append(round(1.0 - no_best_bid, 2))
return min(candidates) if candidates else None

def get_best_no_entry(no_best_ask, yes_best_bid):
"""Аналогічно для NO сторони."""
candidates = []
if no_best_ask and 0.01 < no_best_ask < 0.99:
candidates.append(no_best_ask)
if yes_best_bid and 0.01 < yes_best_bid < 0.99:
candidates.append(round(1.0 - yes_best_bid, 2))
return min(candidates) if candidates else None

Многие боты смотрят только на YES ask — и переплачивают на 1-3 цента. На 100 сделок в день это $1-3 потерянного edge ежедневно.

#Intermediate | POLYANA
POLYANA
Инфраструктура торгового бота для Polymarket BTC 5-мин бинарных опционов Polymarket каждые 5 минут открывает бинарный рынок: "BTC выше/ниже текущей цены через 5 минут?" Ордербук с двумя токенами (YES/NO), резолв через Chainlink RTDS oracle. Разберем, как…
3. Real-time волатильность: 4 метода

Волатильность — ключевой вход для любой модели на 5-мин опционах. 4 варианта, которые стоит рассчитывать параллельно:

import numpy as np

def compute_sigmas(prices, window_min=30):
"""prices: [(timestamp, btc_price), ...]"""
ts = np.array([p[0] for p in prices])
px = np.array([p[1] for p in prices])
avg = px.mean()

# 1. Trail -- std ціни / середня
trail = np.std(px) / avg

# 2. Realized -- std логарифмічних ретурнів
log_ret = np.diff(np.log(px))
realized = np.std(log_ret)

# 3. Range -- (high - low) / avg
range_vol = (px.max() - px.min()) / avg

# 4. Max rolling -- max ковзних 1-хв std
max_std = 0.0
for i in range(len(ts)):
mask = (ts >= ts[i] - 60) & (ts <= ts[i])
if mask.sum() >= 5:
local = np.std(px[mask]) / avg
max_std = max(max_std, local)

dur = (ts[-1] - ts[0]) / 60
return {
"trail": trail,
"trail_pmin": trail / max(dur, 0.1),
"realized": realized,
"realized_pmin": realized / max(dur, 0.1),
"range": range_vol,
"max_rolling": max_std,
}


Какой тип выбрать?

trail / realized — для моделей с нормальным распределением
range — робастный, не чувствительный к выбросам
max_rolling — консервативная оценка (завышает σ → меньше ложных сигналов)

Нормализация _pmin (per minute) позволяет корректно сравнивать разные таймфреймы.

4. Order Flow Imbalance с Binance


Поток Binance aggTrade даёт ~50 сообщений/сек для BTC. Из этого потока можно извлечь OFI — метрику давления покупателей/продавцов:
import json, time, threading
from collections import deque

class BinanceOFI:
def __init__(self, buffer_size=30_000):
self._buffer = deque(maxlen=buffer_size)
self._lock = threading.Lock()

def on_message(self, raw):
msg = json.loads(raw)
ts = msg["T"] / 1000
price = float(msg["p"])
qty = float(msg["q"])
is_sell = msg["m"] # True = market sell
notional = price * qty
with self._lock:
self._buffer.append((ts, notional, is_sell))

def compute(self):
now = time.time()
ofi_1 = ofi_5 = 0.0
buy_1 = sell_1 = 0.0
count_1 = 0
with self._lock:
cutoff = now - 300
while self._buffer and self._buffer[0][0] < cutoff:
self._buffer.popleft()
for ts, notional, is_sell in self._buffer:
signed = -notional if is_sell else notional
age = now - ts
if age <= 60:
ofi_1 += signed
count_1 += 1
if is_sell: sell_1 += notional
else: buy_1 += notional
ofi_5 += signed
total = buy_1 + sell_1
return {
"ofi_1min": ofi_1, "ofi_5min": ofi_5,
"buy_vol_1min": buy_1, "sell_vol_1min": sell_1,
"vol_imbalance": (buy_1-sell_1)/total if total else 0,
"trade_count_1min": count_1,
}


wss://stream.binance.com:9443/ws/btcusdt@aggTrade

Сильный дисбаланс buy/sell объема может быть предиктором направления BTC. Но нюанс — на микроструктуре OFI часто работает контр-интуитивно: когда все покупают, цена уже отразила это давление.

#Intermediate | POLYANA
POLYANA
3. Real-time волатильность: 4 метода Волатильность — ключевой вход для любой модели на 5-мин опционах. 4 варианта, которые стоит рассчитывать параллельно: import numpy as np def compute_sigmas(prices, window_min=30): """prices: [(timestamp, btc_price)…
5. Подводный камень: Chainlink ≠ Binance

Polymarket резолвит через Chainlink RTDS oracle, а не Binance:
import json

def check_resolution(event):
for market in event.get("markets", []):
prices = market.get("outcomePrices", "")
if not prices:
return None
prices = json.loads(prices)
return "UP" if prices[0] == "1" else "DOWN"
return None


На реальных данных ~4.7% рынков резолвятся иначе, чем показывает Binance.
Если ваш бот ориентируется на цену Binance — получаете систематическую ошибку почти в 5% сделок.

Причина: Chainlink агрегирует цену с нескольких бирж с собственной задержкой.

6. Архитектура бота

┌──────────────┐  ┌──────────────┐  ┌──────────────┐
│ Binance WS │ │ Gamma API │ │ CLOB API │
│ aggTrade │ │ market disc │ │ book+orders │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────┐
│ Collector (1s loop) │
│ BTC, delta, sigma[], OFI, tau, entry_price │
└────────────────────┬────────────────────────────┘
▼
┌─────────────────┐
│ Strategy Loop │
│ signal -> order│
└────────┬────────┘
│
┌───────────┼───────────┐
▼ ▼ ▼
┌──────────┐ ┌─────────┐ ┌────────┐
│ CLOB │ │ SQLite │ │Telegram│
│ Order │ │ Log │ │ Alert │
└──────────┘ └─────────┘ └────────┘


7. Полезные эндпоинты

# Ордербук
GET https://clob.polymarket.com/book?token_id={TOKEN_ID}

# Пошук ринку
GET https://gamma-api.polymarket.com/events?slug=btc-updown-5m-{UNIX_TS}

# BTC realtime
WSS wss://stream.binance.com:9443/ws/btcusdt@aggTrade

# CLOB WebSocket (ордербук + угоди)
WSS wss://ws-subscriptions-clob.polymarket.com/ws/market


TL;DR:
1. Рынки появляются примерно за 30 секунд — ищите через Gamma API по slug
2. Entry = min(YES ask, 1 − NO bid) — всегда проверяйте обе стороны
3. Считайте несколько типов волатильности параллельно
4. OFI с Binance aggTrade — мощная фича, но может работать контр-интуитивно
5. Chainlink ≠ Binance: ~5% расхождений
6. Архитектура: async collector + strategy loop + отдельный трекер позиций


#Intermediate | POLYANA
На Polymarket вышло новое обновление для ставок на спортивные исходы.

Теперь рыночные ордера исполняются с задержкой в 1 секунду перед сопоставлением (matching), ранее за 3 секунды.

Может есть смысл присмотреться к спорту?

#poly_updates | POLYANA
Так ли много людей зарабатывает на Prediction Markets?

Свежее исследование по Polymarket от ESSEC Business School и ECGI показывает картину довольно знакомую для любого рынка: основная масса участников теряет деньги, а прибыль уходит очень узкому кругу сильных игроков.

Авторы проанализировали данные за 2022–2025 годы: более 1,4 млн пользователей, 70 млн сделок и свыше $20 млрд объема.

Результат показательный: около 71% участников в минусе, а топ-1% забирает 84% всей прибыли. То есть Polymarket для большинства — это не “легкие деньги на новостях”, а довольно эффективный рынок, где слабые системно платят сильным.

Лучшие результаты чаще у тех, кто качественнее читает цену, лучше оценивает вероятности и действует дисциплинированнее. А вот путь к убыткам вполне типичный: ставки на лонгшоты, лишние сделки, импульсивная торговля и роль обычного taker’а вместо поставщика ликвидности.

Вывод простой: Polymarket может хорошо отражать коллективные ожидания, но зарабатывать на нем без реального преимущества над рынком намного сложнее, чем кажется со стороны.

Ознакомится самостоятельно:
https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6443103

#poly_updates | POLYANA
Polymarket переезжает на CLOB V2 — 28 апреля, ~11:00 UTC

Крупнейший апдейт биржи. Ожидается около часа даунтайма.

https://x.com/polymarketdevs/status/2045173502328594677?s=46

Что важно знать:
- Все открытые лимитки будут отменены при переключении
- V1 после миграции перестанет работать полностью
- Залог переезжает с USDC.e на pUSD (оборачивается через Collateral Onramp)
- Новые адреса контрактов и новая структура ордеров
- Если торгуете через API/SDK — обновить интеграцию надо до 22-го

Средства и позиции в безопасности. Новая версия уже открыта для тестов всем желающим.

По безопасности: контракты CTFv2 открыты, аудит от Cantina и Quantstamp, параллельно запущена багбаунти-программа на $5M.

Гайд по миграции: docs.polymarket.com/v2-migration


#poly_updates | POLYANA
Архив исторических данных стаканов (orderbooks) Polymarket.

В архиве публикуются почасовые снапшоты стаканов всех рынков.

Что внутри

• Orderbook данные Polymarket
• Hourly snapshots (обновление каждый час)
• Формат Parquet — удобный для аналитики и обработки больших данных
• Бесплатный доступ для исследований

Для чего можно использовать

— research и анализ prediction-маркетов
— бэктестинг торговых стратегий
— анализ ликвидности рынков
— обучение ML / AI моделей
— построение аналитических инструментов

Ссылки

Архив данных
https://archive.pmxt.dev/

Основной сайт
https://www.pmxt.dev/

GitHub
https://github.com/pmxt-dev/pmxt

Документация
https://www.pmxt.dev/docs

#poly_updates | POLYANA
This media is not supported in your browser
VIEW IN TELEGRAM
Полик запускает торговлю фьючами
POLYANA
Polymarket переезжает на CLOB V2 — 28 апреля, ~11:00 UTC Крупнейший апдейт биржи. Ожидается около часа даунтайма. https://x.com/polymarketdevs/status/2045173502328594677?s=46 Что важно знать: - Все открытые лимитки будут отменены при переключении - V1 после…
Polymarket проводит масштабное обновление биржи

Платформа перешла с USDC.e на Polymarket USD (pUSD) с конвертацией 1:1 к USDC, при этом для большинства пользователей процесс прошёл автоматически, а для API-трейдеров доступен через wrap. В рамках обновления были очищены ордербуки и временно приостанавливались торги, после чего система запущена с обновлённой архитектурой.

На фоне запуска платформа выделила 1 000 000 долларов вознаграждений для пользователей, которые обеспечат ликвидность в первые 24 часа после обновления, что делает текущий момент ключевым для активных участников рынка.

#poly_updates | POLYANA
1