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

Последняя свеча

Этот метод 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

После установления WebSocket-соединения клиент отправляет сообщение на подписку.

Подписка на последнюю свечу

Назначение: подписка на обновление последней свечи по инструменту и таймфрейму.

{
"subscribeType": 0,
"dataType": 1,
"timeFrame": "M1",
"instruments": [
{
"classCode": "TQBR",
"ticker": "SBER"
}
]
}

Поля запроса

ПолеГдеТипОбяз.Описание
subscribeTypeТелоnumber (enum)даТип сообщения:
0 — Подписка
1 — Отписка
dataTypeТелоnumber (enum)даТип данных:
1 — Свечи
timeFrameТелоstring (enum)даТаймфрейм свечи:
M1 — 1 минута
M5 — 5 минут
M15 — 15 минут
M30 — 30 минут
H1 — 1 час
H4 — 4 часа
D — 1 день
W — 1 неделя
MN — 1 месяц
instrumentsТелоarrayдаСписок инструментов для подписки
instruments[].tickerТелоstringдаБиржевой тикер
instruments[].classCodeТелоstringдаКод класса ценной бумаги

Отписка от последней свечи

Чтобы отписаться, используется то же сообщение, но с subscribeType = 1:

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

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

Сервер отправляет сообщения о результате подписки и обновлениях свечей.

Успешный ответ о подписке

{
"responseType": "CandleStickSuccess",
"subscribeType": 0,
"ticker": "SBER",
"classCode": "TQBR",
"timeFrame": "M1",
"dateTime": "2024-11-10T10:30:00.000Z"
}

Структура данных успешной подписки

ПолеТипОбяз.Описание
responseTypestring (enum)даCandleStickSuccess – успешная подписка
subscribeTypenumber (enum)даТип сообщения:
0 — Подписка
1 — Отписка
tickerstringдаКод инструмента
classCodestringдаКод класса ценной бумаги
timeFramestring (enum)даТаймфрейм свечи:
M1 — 1 минута
M5 — 5 минут
M15 — 15 минут
M30 — 30 минут
H1 — 1 час
H4 — 4 часа
D — 1 день
W — 1 неделя
MN — 1 месяц
dateTimestring (datetime)даДата и время ответа (UTC)

Успешный ответ с данными свечи

{
"responseType": "CandleStick",
"ticker": "SBER",
"classCode": "TQBR",
"timeFrame": "M1",
"open": 244.20,
"close": 244.50,
"high": 244.70,
"low": 243.90,
"volume": 3200,
"dateTime": "2024-11-10T10:30:00.000Z"
}

Структура данных ответа с данными

ПолеТипОбяз.Описание
responseTypestring (enum)даCandleStick – получение данных
tickerstringдаКод инструмента
classCodestringдаКод класса ценной бумаги
timeFramestring (enum)даТаймфрейм свечи:
M1 — 1 минута
M5 — 5 минут
M15 — 15 минут
M30 — 30 минут
H1 — 1 час
H4 — 4 часа
D — 1 день
W — 1 неделя
MN — 1 месяц
opennumberдаЦена открытия
closenumberдаЦена закрытия
highnumberдаМаксимальная цена
lownumberдаМинимальная цена
volumenumberдаОбъём торгов в валюте
dateTimestring (datetime)даДата и время свечи (UTC)

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

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

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

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

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

Во всех примерах ниже предполагается, что у вас уже есть корректный ACCESS_TOKEN.

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: 1,
timeFrame: "M1",
instruments: [{ classCode: "TQBR", ticker: "SBER" }],
};

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

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

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

❗ Ошибки

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