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

Котировки

WebSocket API позволяет получать котировки инструмента в реальном времени.


🔌 WebSocket URL

wss://ws.broker.ru/trade-api-market-data-connector/api/v1/market-data/ws

🔐 Аутентификация

Перед установкой WebSocket-соединения клиент должен передать access-token в HTTP-заголовке:

Authorization: Bearer <ACCESS_TOKEN>

Подробнее об авторизации см. раздел Авторизация.


🧱 Общий формат сообщений

Все сообщения в WebSocket передаются в формате JSON.

  • Клиент → сервер: команды подписки / отписки.
  • Сервер → клиент: подтверждения подписки, данные котировок, ошибки.

📤 Сообщения client → server

Подписка на котировки

{
"subscribeType": 0,
"dataType": 3,
"instruments": [
{ "ticker": "SBER", "classCode": "TQBR" }
]
}

Поля запроса

ПолеГдеТипОбяз.Описание
subscribeTypeТелоnumber (enum)даТип сообщения:
0 — Подписка
1 — Отписка
dataTypeТелоnumber (enum)даТип данных:
3 — Котировка
instrumentsТелоarrayдаСписок инструментов для подписки
instruments[].tickerТелоstringдаБиржевой тикер
instruments[].classCodeТелоstringдаКод класса бумаги

Отписка

{
"subscribeType": 1,
"dataType": 3,
"instruments": [
{ "ticker": "SBER", "classCode": "TQBR" }
]
}

📥 Ответы server → client

Успешный ответ

{
"responseType": "Quotes",
"ticker": "SBER",
"classCode": "TQBR",
"type": "refresh",
"dateTime": "2024-11-01T10:00:00.000Z",
"securityTradingStatus": 17,
"currency": "RUB",
"bid": 305.86,
"offer": 305.96,
"open": 304.76,
"close": 304.75,
"high": 307.24,
"low": 304.75,
"theoreticalPrice": 0,
"last": 305.97,
"bidYield": 0,
"offerYield": 0,
"change": 1.05,
"changeRate": 0.34
}

Поля ответа

ПолеТипОписание
responseTypestring (enum)Тип сообщения: Quotes — данные котировки
tickerstringБиржевой тикер
classCodestringКод класса бумаги
typestringТип объекта котировки
dateTimestring (datetime)Время обновления данных (UTC)
securityTradingStatusnumber (enum)Статус торговли инструментом
2 — Торги приостановлены
17 — Торги открыты
18 — Торги закрыты
100 – Закрытие торгов
101 — Открытие торгов
102 — Аукцион
103 — Аукцион закрытия
104 — Дискретный аукцион
currencystringВалюта котировки
lastnumberПоследняя цена сделки
bidnumberЛучшая цена покупки
offernumberЛучшая цена продажи
opennumberЦена открытия торговой сессии
closenumberЦена закрытия предыдущей сессии
highnumberМаксимальная цена за день
lownumberМинимальная цена за день
theoreticalPricenumberЦена расчетная (у опциона)
bidYieldnumberДоходность котировок покупки (для облигаций)
offerYieldnumberДоходность котировок продажи (для облигаций)
changenumberИзменение цены за текущую сессию, в валюте цены
changeRatenumberИзменение цены за текущую сессию, в %

Пример ответа с ошибкой

{
"responseType": "Quotes",
"errors": [
{
"message": "Input JSON structure does not match structure, 'ticker' field is undefined.",
"code": "INCORRECT_JSON"
}
]
}

Структура данных ошибки

ПолеТипОписание
responseTypestring (enum)Тип сообщения. Для ошибок по сделкам — Quotes
errors[].messagestringТекст ошибки
errors[].codestring (enum)Код ошибки:
NO_DATE — нет данных
NOT_FOUND — инструмент не найден
INCORRECT_JSON – невалидный json
BAD_REQUEST — ошибка выполнения
UNAUTHORIZED — клиент не авторизован

💻 Примеры использования

import WebSocket from "ws";

const URL = "wss://ws.broker.ru/trade-api-market-data-connector/api/v1/market-data/ws";

const ws = new WebSocket(URL, {
headers: {
Authorization: "Bearer YOUR_ACCESS_TOKEN",
},
});

ws.on("open", () => {
const subscribeMessage = {
subscribeType: 0,
dataType: 3,
instruments: [{ ticker: "SBER", classCode: "TQBR" }],
};

ws.send(JSON.stringify(subscribeMessage));
});

ws.on("message", (event) => {
const payload = JSON.parse(event.toString());
console.log(payload);
});

ws.on("error", (error) => {
console.error("WebSocket error:", error);
});

❗ Ошибки

HTTPОшибкаОписание
400BadRequestНеверные параметры
500Internal Server ErrorВнутренняя ошибка сервера