Рынки
Рынок -- это бинарный исход YES/NO внутри пула. Каждый рынок представляет одно утверждение, которое либо сбывается, либо нет. Пользователи торгуют, покупая или продавая акции YES и NO на рынке.
Типы рынков
Intotes поддерживает два различных типа рынков, определяемых полем market_type:
| Тип | Значение | Описание |
|---|---|---|
| Orderbook | "orderbook" | Пиринговое со поставление. Цены устанавливаются трейдерами, размещающими лимитные ордера. Движок сопоставления связывает ордера на покупку и продажу по совместимым ценам. |
| LMSR | "lmsr" | Автоматический маркетмейкер. Цены определяются функцией стоимости LMSR на основе существующих количеств. Каждая сделка совершается с AMM -- контрагент не нужен. |
Большинство рынков на платформе используют тип LMSR. Рынки с книгой ордеров используются, когда желательно более глубокое пиринговое ценообразование.
Ключевые поля
| Поле | Тип | Описание |
|---|---|---|
id | integer | Уникальный идентификатор. |
pool_id | integer | Пул, к которому принадлежит этот рынок. |
name | string | Отображаемое название (английский), например, "Manchester City" или "Выше $100k". |
name_ru | string | Отображаемое название (русский). |
yes_probability | float (0-1) | Текущая вероятность исхода YES. Отображается в UI и обновляется воркерами/сделками. |
market_type | string | "orderbook" или "lmsr". |
volume | integer | Общий объем торгов в копейках (сумма всех сумм сделок). |
paused | boolean | При true торговля временно приостановлена. |
resolved | boolean | При true рынок рассчитан. |
winning_outcome | string | null | "YES" или "NO" после разрешения. Null, пока не разрешен. |
outcome_index | integer | Позиция этого рынка внутри его пула (индексация с 0). Используется при разрешении: YES побеждает только когда pool.won_side == outcome_index. |
image_url | string | Необязательный URL изображения для рынка. |
created_at | timestamp | Когда рынок был создан. |
Пользовательские названия исходов
По умолчанию два исхода рынка обозначены как "YES" и "NO". Для ясности рынки могут определять пользовательские названия:
| Поле | Описание | Пример |
|---|---|---|
yes_name | Пользовательская метка для исхода YES. | "Выше $100k" |
no_name | Пользовательская метка для исхода NO. | "Ниже $100k" |
yes_name_ru | Русская метка для YES. | |
no_name_ru | Русская метка для NO. |
Эти названия отображаются в торговом интерфейсе вместо стандартных YES/NO, когда присутствуют.
Поля, специфичные для LMSR
Рынки с market_type: "lmsr" имеют дополнительные поля, управляющие ценообразованием AMM:
| Поле | Тип | Описание |
|---|---|---|
b | integer | null | Параметр ликвидности в копейках. Управляет чувствительностью цен -- более высокий b означает, что цены меньше движутся за сделку. Null для рынков с книгой ордеров. |
q_yes | integer | Текущее количество выпущенных акций YES (в копейках). |
q_no | integer | Текущее количество выпущенных акций NO (в копейках). |
Функция стоимости LMSR использует эти значения для вычисления цен:
C(q) = b * ln(e^(q_yes/b) + e^(q_no/b))
Вероятность YES в любой момент:
P(YES) = e^(q_yes/b) / (e^(q_yes/b) + e^(q_no/b))
Когда пользователь покупает акции YES, q_yes увеличи вается, что толкает цену YES вверх, а цену NO -- вниз.
Подробнее см. LMSR AMM.
Синхронизация с Polymarket
Рынки могут быть связаны с исходами Polymarket для синхронизации цен в реальном времени:
| Поле | Описание |
|---|---|
polymarket_token_id | CLOB token ID соответствующего исхода Polymarket. При установке фоновый воркер синхронизирует вероятность YES через WebSocket. |
Состояния рынка
Рынок проходит через несколько состояний в течение своего жизненного цикла:
Активный
paused: false,resolved: false- Торговля открыта. Пользователи могут размещать ордера и совершать сделки.
- Цены обновляются с каждой сделкой (LMSR) или сопоставлением ордеров (orderbook).
Приостановлен
paused: true,resolved: false- Торговля временно приостановлена (например, во время перерыва в живом спортивном событии или ожидания объявления результата).
- Существующие ордера остаются в книге, но новые сделки не исполняются.
Разрешен
resolved: true,winning_outcomeустановлен в"YES"или"NO"- Исход известен. Все позиции рассчитаны:
- Победители получают 10,000 за акцию (в копейках).
- Проигравшие получают 0.
- Дальнейшая торговля невозможна.
Рынки внутри пула
Пул может содержать несколько рынков. Для спортивного события с опцией ничьей (has_draw: true) типичная структура:
| Рынок | outcome_index | Пример названия |
|---|---|---|
| Рынок 0 | 0 | "Команда A побеждает" |
| Рынок 1 | 1 | "Ничья" |
| Рынок 2 | 2 | "Команда B побеждает" |
Когда пул разрешается, pool.won_side устанавливается в индекс выигрышного рынка. Для этого рынка держатели YES побеждают. Для всех остальных рынков в пуле побеждают держатели NO.
Для простого бинарного пула (например, "Будет ли ETH выше $3,500?") есть один рынок, где YES означает, что утверждение верно, а NO означает, что оно ложно.
Базовая вероятность
Каждый рынок также отслеживает base_yes_probability (не выставляется в API). Это базовая вероятность, вокруг которой работает воркер дрейфа вероятности. Воркер дрейфа вводит небольшие случайные движения для имитации рыночной активности, но удерживает yes_probability в рамках этого базового значения.