Перейти к основному содержимому

Рынки

Рынок -- это бинарный исход YES/NO внутри пула. Каждый рынок представляет одно утверждение, которое либо сбывается, либо нет. Пользователи торгуют, покупая или продавая акции YES и NO на рынке.


Типы рынков

Intotes поддерживает два различных типа рынков, определяемых полем market_type:

ТипЗначениеОписание
Orderbook"orderbook"Пиринговое сопоставление. Цены устанавливаются трейдерами, размещающими лимитные ордера. Движок сопоставления связывает ордера на покупку и продажу по совместимым ценам.
LMSR"lmsr"Автоматический маркетмейкер. Цены определяются функцией стоимости LMSR на основе существующих количеств. Каждая сделка совершается с AMM -- контрагент не нужен.

Большинство рынков на платформе используют тип LMSR. Рынки с книгой ордеров используются, когда желательно более глубокое пиринговое ценообразование.


Ключевые поля

ПолеТипОписание
idintegerУникальный идентификатор.
pool_idintegerПул, к которому принадлежит этот рынок.
namestringОтображаемое название (английский), например, "Manchester City" или "Выше $100k".
name_rustringОтображаемое название (русский).
yes_probabilityfloat (0-1)Текущая вероятность исхода YES. Отображается в UI и обновляется воркерами/сделками.
market_typestring"orderbook" или "lmsr".
volumeintegerОбщий объем торгов в копейках (сумма всех сумм сделок).
pausedbooleanПри true торговля временно приостановлена.
resolvedbooleanПри true рынок рассчитан.
winning_outcomestring | null"YES" или "NO" после разрешения. Null, пока не разрешен.
outcome_indexintegerПозиция этого рынка внутри его пула (индексация с 0). Используется при разрешении: YES побеждает только когда pool.won_side == outcome_index.
image_urlstringНеобязательный URL изображения для рынка.
created_attimestampКогда рынок был создан.

Пользовательские названия исходов

По умолчанию два исхода рынка обозначены как "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:

ПолеТипОписание
binteger | nullПараметр ликвидности в копейках. Управляет чувствительностью цен -- более высокий b означает, что цены меньше движутся за сделку. Null для рынков с книгой ордеров.
q_yesintegerТекущее количество выпущенных акций YES (в копейках).
q_nointegerТекущее количество выпущенных акций 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_idCLOB 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Пример названия
Рынок 00"Команда A побеждает"
Рынок 11"Ничья"
Рынок 22"Команда B побеждает"

Когда пул разрешается, pool.won_side устанавливается в индекс выигрышного рынка. Для этого рынка держатели YES побеждают. Для всех остальных рынков в пуле побеждают держатели NO.

Для простого бинарного пула (например, "Будет ли ETH выше $3,500?") есть один рынок, где YES означает, что утверждение верно, а NO означает, что оно ложно.


Базовая вероятность

Каждый рынок также отслеживает base_yes_probability (не выставляется в API). Это базовая вероятность, вокруг которой работает воркер дрейфа вероятности. Воркер дрейфа вводит небольшие случайные движения для имитации рыночной активности, но удерживает yes_probability в рамках этого базового значения.