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

Книга ордеров

Книга ордеров -- это основной движок сопоставления лимитных и рыночных ордеров на Intotes. Каждый рынок поддерживает собственную книгу ордеров, которая связывает покупателей и продавцов по согласованным ценам, используя стандартный приоритет цена-время.

Bid и Ask

Книга ордеров состоит из двух сторон:

  • Bid (ордера на покупку) -- трейдеры, готовые купить акции по заданной цене или ниже.
  • Ask (ордера на продажу) -- трейдеры, готовые продать акции по заданной цене или выше.

Bid сортируются от наивысшей к наименьшей цене, потому что самый агрессивный покупатель (наивысшая цена) должен быть сопоставлен первым. Ask сортируются от наименьшей к наивысшей цене, потому что самый агрессивный продавец (наименьшая цена) должен быть сопоставлен первым.

Приоритет цена-время

Когда несколько ордеров существуют на одном ценовом уровне, ордер, размещенный первым, исполняется первым. Это стандартная модель приоритета цена-время, используемая большинством бирж:

  1. Ордера сначала ранжируются по цене (лучшая цена побеждает).
  2. Среди ордеров по одной цене побеждает самый ранний ордер.

Структура OrderbookEntry

Каждый ценовой уровень в книге ордеров представлен записью, содержащей два поля:

{
"price": 6500,
"amount": 25000
}
ПолеТипОписание
priceint64Цена в копейках (6500 = 0.65 RUB)
amountint64Общий объем, доступный по этой цене, в копейках

Все денежные значения -- целые числа в копейках. Подробнее на странице Денежный формат.

Ответ книги ордеров

При запросе данных книги ордеров для рынка ответ содержит полную глубину по обеим сторонам:

{
"market_id": 101,
"bids": [
{ "price": 6500, "amount": 25000 },
{ "price": 6400, "amount": 18000 },
{ "price": 6300, "amount": 12000 }
],
"asks": [
{ "price": 6700, "amount": 20000 },
{ "price": 6800, "amount": 15000 },
{ "price": 6900, "amount": 10000 }
]
}
  • bids отсортированы по убыванию (лучший bid первым).
  • asks отсортированы по возрастанию (лучший ask первым).

Спред

Спред -- это разница между лучшим ask и лучшим bid:

spread = best_ask - best_bid

В примере выше спред составляет 6700 - 6500 = 200 копеек (0.02 RUB). Более узкий спред означает лучшую ликвидность и более низкие торговые затраты для участников.

Книга ордеров в памяти

Книга ордеров хранится полностью в памяти для максимальной производительности. Поиск лучших bid и ask выполняется за O(1) операций, что означает сопоставление ордеров и определение цен с минимальной задержкой независимо от глубины книги.

При запуске сервера книги ордеров восстанавливаются из сохраненных открытых ордеров в базе данных.

Автоматическая ликвидность

Для обеспечения достаточной глубины рынков Intotes автоматически управляет ликвидностью в книге ордеров:

  • Целевой спред: Система поддерживает спред на уровне 2 копеек (0.02 RUB) или ниже. Если спред расширяется сверх этого порога, система размещает ордера для его сужения.
  • Минимальный объем: Если общий объем по любой стороне книги падает ниже 200 RUB, система добавляет ордера для восстановления глубины.
  • Условия обновления: Ликвидность обновляется после каждой сделки, а также по периодическому расписанию каждые 5 минут, в зависимости от того, что наступит раньше.

Этот механизм автоматической ликвидности гарантирует, что трейдеры всегда могут исполнять сделки по разумным ценам, даже на менее активно торгуемых рынках. Ордера, размещенные системой, ведут себя идентично ордерам пользователей и следуют тем же правилам сопоставления.

Как работает сопоставление

Когда поступает новый ордер:

  1. Если это ордер на покупку, он сравнивается с существующими ask, начиная с наименьшей цены ask.
  2. Если это ордер на продажу, он сравнивается с существующими bid, начиная с наивысшей цены bid.
  3. Если цена входящего ордера пересекает противоположную сторону (например, покупка по 0.68 RUB при лучшем ask 0.67 RUB), ордер исполняется немедленно по цене ожидающего ордера.
  4. Если входящий ордер исполнен лишь частично, оставшаяся сумма размещается в книге по оригинальной лимитной цене.
  5. Если сопоставление невозможно, весь ордер остается в книге до исполнения или отмены.

Intotes использует гибридную модель: лимитные ордера сначала сопоставляются с книгой ордеров, а любой остаток, который не может быть исполнен ожидающими ордерами, направляется в LMSR AMM для исполнения с пулом ликвидности.