Данные книги ордеров
Каждый рынок на Intotes поддерживает актуальную книгу ордеров с ожидающими лимитными ордерами. Эндпоинт книги ордеров предоставляет снимок всех открытых bid и ask, который можно использовать для отображения глубины, расчета спреда и оценки цен исполнения.
Эндпоинт
GET /api/v1/market/orderbook/{market_id}
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
market_id | string | ID рынка для запроса. |
Ответ
{
"market_id": "mkt_001",
"bids": [
{ "price": 5500, "amount": 120000 },
{ "price": 5400, "amount": 85000 },
{ "price": 5200, "amount": 200000 }
],
"asks": [
{ "price": 5700, "amount": 95000 },
{ "price": 5800, "amount": 150000 },
{ "price": 6000, "amount": 60000 }
]
}
Справочник полей
| Поле | Тип | Описание |
|---|---|---|
market_id | string | Рынок, которому принадлежит книга ордеров. |
bids | array | Ордера на покупку, отсортированные по убыванию цены. |
asks | array | Ордера на продажу, отсортированные по возрастанию цены. |
bids[].price | integer | Цена bid по шкале 0--10000. |
bids[].amount | integer | Общий объем по данному ценовому уровню, в акциях-копейках. |
asks[].price | integer | Цена ask по шкале 0--10000. |
asks[].amount | integer | Общий объем по данному ценовому уровню, в акциях-копейках. |
Порядок сортировки
- Bid отсортированы от наивысшей к наименьшей цене. Первый bid -- это лучший bid (наивысшая цена, которую покупатель готов заплатить).
- Ask отсортированы от наименьшей к наивысшей цене. Первый ask -- это лучший ask (наименьшая цена, которую продавец готов принять).
Этот порядок означает, что начало каждого массива всегда представляет наиболее конкурентную цену.
Понимание цен
Цен ы -- целые числа в диапазоне от 0 до 10000, представляющие вероятность от 0% до 100% с двумя десятичными знаками точности.
| Необработанная цена | Отображение |
|---|---|
0 | 0.00% |
2500 | 25.00% |
5500 | 55.00% |
10000 | 100.00% |
Для преобразования в читаемый процент: price / 100.
Понимание объемов
Объемы выражены в акциях-копейках. Одна полная акция равна 100 акциям-копейкам. Для отображения количества целых акций по ценовому уровню:
shares = amount / 100
Например, объем 120000 означает, что 1,200 акций доступно по данному ценовому уровню.
Расчет спреда
Спред -- это разница между лучшим ask и лучшим bid:
spread = best_ask.price - best_bid.price
Используя пример ответа выше:
spread = 5700 - 5500 = 200 (т.е. 2.00 процентных пункта)
Узкий спред указывает на ликвидный, активно торгуемый рынок. Широкий спред предполагает тонкую ликвидность или низкую торговую активность.
Интерпретация книги ордеров
Глубина
Книга ордеров показывает, сколько ликвидности доступно по каждому ценовому уровню. Сумма объемов по всем уровням bid дает общую глубину покупок; сумма ask -- глубину продаж.
total_bid_depth = sum(bid.amount for each bid)
total_ask_depth = sum(ask.amount for each ask)
Оценка цены исполнения
Для оценки стоимости рыночной покупки N акций пройдите по стороне ask:
- Начните с наименьшего ask.
- Потребляйте акции по этой цене, пока уровень не исчерпан или ваш ордер не заполнен.
- При необходимости перейдите к следующему уровню ask.
- Средневзвешенная цена по потребленным уровням -- это ваша оценка цены исполнения.
Та же логика работает в обратном направлении для рыночных продаж, проходя по стороне bid.
Гибридное исполнение (Orderbook + AMM)
Intotes использует гибридную модель: входящие ордера сначала сопоставляются с ожидающими лимитными ордерами в книге ордеров. Любой остаток, который не может быть заполнен книгой ордеров, направляется в автоматический маркетмейкер LMSR (AMM). Это означает:
- Снимок книги ордеров показывает только ликвидность лимитных ордеров.
- Дополнительная ликвидность всегда доступна через AMM, поэтому ордера никогда не останутся неисполненными (хотя цена AMM может отличаться от цены книги ордеров).
- Для небольших ордеров на ликвидных рынках книга ордеров обычно предоставляет лучшие цены, чем AMM.
Пример: Получение и отображение книги ордеров
curl "https://api.intots.com/api/v1/market/orderbook/mkt_001"
const res = await fetch('/api/v1/market/orderbook/mkt_001');
const book = await res.json();
const bestBid = book.bids[0];
const bestAsk = book.asks[0];
const spread = bestAsk.price - bestBid.price;
console.log(`Best Bid: ${bestBid.price / 100}% (${bestBid.amount / 100} shares)`);
console.log(`Best Ask: ${bestAsk.price / 100}% (${bestAsk.amount / 100} shares)`);
console.log(`Spread: ${spread / 100} pp`);
Советы
- Опрашивайте периодически или комбинируйте с WebSocket-лентой сделок для поддержания актуальности отображения. Эндпоинт книги ордеров возвращает снимок на момент времени.
- Пустые массивы для
bidsилиasksозначают отсутствие ожидающих лимитных ордеров на этой стороне. AMM по-прежнему обеспечивает ликвидность. - Ценовые уровни агрегированы. Каждая запись представляет общий объем всех отдельных ордеров по данной точной цене.