Движок сопоставления
Движок сопоставления книги ордеров Intotes отвечает за связывание ордеров на покупку и продажу на рынках типа orderbook. Он использует приоритет цена-время и поддерживает частичное исполнение, автоматическое обеспечение ликвидности и обновление балансов в реальном времени.
Приоритет цена-время
Ордера сопоставляются по двум правилам, применяемым по порядку:
- Приоритет цены: Ордера с лу чшей ценой сопоставляются первыми.
- Ордера на покупку сопоставляются с наименьшим ask (самый дешевый ордер на продажу).
- Ордера на продажу сопоставляются с наивысшим bid (самый дорогой ордер на покупку).
- Приоритет времени: Когда несколько ордеров существуют по одной цене, первым исполняется ордер, размещенный раньше (FIFO).
Процесс сопоставления
Когда поступает новый ордер, движок пытается сопоставить его немедленно:
Поступает ордер на покупку
- Движок просматривает сторону продаж книги ордеров, отсортированную по возрастанию цены (наименьшая первой).
- Если наименьшая цена ask меньше или равна цене ордера на покупку (для лимитных) или любой цене (для рыночных), происходит сопоставление.
- Сделка исполняется по цене ask (цене продавца).
- Если бюджет ордера на покупку не полностью израсходован, движок продолжает сопоставление со следующим наименьшим ask.
- Оставшийся бюджет (для лимитных ордеров) остается в книге ордеров как постоянный bid.
Поступает ордер на продажу
- Движок просматривает сторону покупок книги ордеров, отсортированную по убыванию цены (наивысшая первой).
- Если наивысшая цена bid больше или равна цене ордера на продажу (для лимитных) или любой цене (для рыночных), происходит сопоставление.
- Сделка исполняется по цене bid (цене покупателя).
- Если акции ордера на продажу не полностью проданы, движок продолжает сопоставление со следующим наивысшим bid.
- Оставшиеся акции (для лимитных ордеров) остаются в книге ордеров как постоянный ask.
Частичное исполнение
Ордера не обязаны исполняться за одно сопоставление. Крупный ордер на покупку может сопоставляться с несколькими меньшими ордерами на продажу, и наоборот. Каждое отдельное сопоставление создает отдельную запись сделки. Статус ордера переходит из pending в partial после первого неполного исполнения и в filled после полного потребления всей суммы.
Создание сделки
Каждое сопоставление ордера на покупку с ордером на продажу создает сделку с:
- Ценой: Цена исполнения (цена ожидающего ордера).
- Суммой: Количество акций, обмененных в этом сопоставлении.
- Комиссией покупателя:
price * fee%, списыва емая с покупателя. - Комиссией продавца:
price * fee%, списываемая с продавца. - Временными метками: Точное время исполнения.
Сделки транслируются в реальном времени через WebSocket-ленту по адресу /api/v1/ws/trades.
Обновление балансов
При каждой сделке балансы обновляются атомарно:
- Покупатель: Баланс уменьшается на
price * (1 + fee%) * shares. Позиция увеличивается на количество приобретенных акций. - Продавец: Баланс увеличивается на
price * (1 - fee%) * shares. Позиция уменьшается на количество проданных акций.
Все операции с балансами являются транзакционными для предотвращения несоответствий.
Автоматическая ликвидность
Для обеспечения торгуемости рынков даже при низком органическом объеме платформа поддерживает автоматическую ликвидность:
Контроль спреда
Система поддерживает спред между лучшим bid и лучшим ask на уровне 2 копейки или менее. Если спред расширяется сверх этого порога, система размещает ордера для его сужения.
Минимальный объем
Если общий объем по любой стороне книги ордеров (bid или ask) составляет менее 200 RUB, система автоматически добавляет ордера для достижения порога.
Периодичность обновления
Автоматическая лик видность пересчитывается:
- После каждой сделки -- для немедленного восполнения потребленной ликвидности.
- Каждые 5 минут -- как периодическая проверка для поддержания спреда и минимального объема даже на тихих рынках.
Ордера, размещенные системой, ведут себя идентично пользовательским ордерам в движке сопоставления. Они следуют тем же правилам приоритета цена-время и создают те же записи сделок.
Данные книги ордеров
Текущее состояние книги ордеров (все ожидающие bid и ask) доступно через эндпоинты деталей рынка. Каждый уровень показывает цену и общий объем по этой цене.
См. также
- Размещение ордеров -- Как отправить ордера в движок
- Типы ордеров -- Поведение л имитных vs. рыночных ордеров
- Комиссии и сборы -- Расчет комиссий по сопоставленным сделкам
- AMM-торговля -- Альтернативный механизм для LMSR-рынков