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

Портфель

WebSocket API предоставляет данные о позициях портфеля, стоимости активов, P/L, валютных остатках и блокировках в режиме реального времени.


🔌 WebSocket URL

wss://ws.broker.ru/trade-api-bff-portfolio/api/v1/portfolio/ws

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

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

Authorization: Bearer <ACCESS_TOKEN>

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


📥 Формат server → client

Сервер отправляет массив объектов — каждая запись описывает одну позицию в портфеле.


Структура данных

Ниже приведены ключевые параметры позиций.

ПолеТипОписание
typestringТип позиции
subAccountIdstring (uuid)ID субсчета (deprecated)
agreementIdstring (uuid)ID генерального соглашения (deprecated)
accountstringТорговый счет
exchangestringКод биржи
tickerstringТикер инструмента
displayNamestringНаименование инструмента
baseAssetTickerstringТикер базового актива
currencystringВалюта цены
expireDatedateДата экспирации
upperTypestring (enum)Верхнеуровневый тип инструмента
instrumentTypestring (enum)Тип инструмента
termstringКод срока расчетов
quantitynumberКоличество (шт.)
lockednumberКоличество активов, занятых под активные заявки или ГО
balancePricenumberБалансовая цена (цена открытия позиции) в валюте цены
currentPricenumberТекущая цена
balanceValuenumberБалансовая стоимость (цена открытия позиции) в валюте цены
balanceValueRubnumberБалансовая стоимость в рублях
balanceValueUsdnumberБалансовая стоимость в долларах
balanceValueEurnumberБалансовая стоимость в евро
currentValuenumberТекущая стоимость в валюте цены
currentValueRubnumberТекущая стоимость в рублях
currentValueUsdnumberТекущая стоимость в долларах
currentValueEurnumberТекущая стоимость в евро
unrealizedPLnumberИзменение цены с момента открытия позиции
unrealizedPercentPLnumberИзменение цены с момента открытия позиции, %
dailyPLnumberДневное изменение цены с момента открытия позиции
dailyPercentPLnumberДневное изменение цены с момента открытия позиции, %
portfolioSharenumberДоля в портфеле, % (от рублевой стоимости портфеля)
scaleintegerКоличество знаков
minimumStepnumberМинимальный шаг цены
boardstringКод класса ценной бумаги
priceUnitstringЕдиница цены
faceValuenumberНоминал (для облигаций)
accruedIncomenumberНакопленный купонный доход (для облигаций)
logoLinkstringСсылка на логотип инструмента (deprecated)
isBlockedbooleanПризнак блокированного класса
isBlockedTradeAccountbooleanЗаблокирован ли торговый счет
lockedForFuturesnumberЗанято под ГО по фьючерсам
ratioQuantitynumberКоличество в лоте

📋 Пример ответа

[
{
"type": "moneyLimit",
"subAccountId": "49909a5f-8cfe-441a-b3b7-86054eb97922",
"agreementId": "80675226-b724-4abb-92f8-56bf5c7bf7f0",
"account": "1234567/25",
"exchange": "MOEX",
"ticker": "RUB",
"displayName": "RUB",
"baseAssetTicker": "",
"currency": "RUB",
"upperType": "CURRENCY",
"instrumentType": "CURRENCY",
"term": "T0",
"quantity": 4544.79,
"locked": 0,
"balancePrice": 1,
"currentPrice": 1,
"balanceValue": 4544.79,
"balanceValueRub": 4544.79,
"balanceValueUsd": 55.8843,
"balanceValueEur": 48.0981,
"currentValue": 4544.79,
"currentValueRub": 4544.79,
"currentValueUsd": 55.8843,
"currentValueEur": 48.0981,
"unrealizedPL": 0,
"unrealizedPercentPL": 0,
"dailyPL": 0,
"dailyPercentPL": 0,
"portfolioShare": 0,
"scale": 4,
"minimumStep": 0.01,
"board": "",
"priceUnit": "",
"faceValue": 0,
"accruedIncome": 0,
"isBlocked": false,
"isBlockedTradeAccount": false,
"lockedForFutures": 0,
"ratioQuantity": 0,
"expireDate": ""
},
{
"type": "depoLimit",
"subAccountId": "49909a5f-8cfe-441a-b3b7-86054eb97922",
"agreementId": "80675226-b724-4abb-92f8-56bf5c7bf7f0",
"account": "3534991/25",
"exchange": "MOEX",
"ticker": "SBER",
"displayName": "Сбербанк",
"baseAssetTicker": "",
"currency": "RUB",
"upperType": "RUSSIA",
"instrumentType": "STOCK",
"term": "T0",
"quantity": 2,
"locked": 0,
"balancePrice": 300.5267,
"currentPrice": 296,
"balanceValue": 601.0533,
"balanceValueRub": 601.0533,
"balanceValueUsd": 7.3908,
"balanceValueEur": 6.361,
"currentValue": 592,
"currentValueRub": 592,
"currentValueUsd": 7.2794,
"currentValueEur": 6.2652,
"unrealizedPL": -9.0533,
"unrealizedPercentPL": -1.5062,
"dailyPL": 0,
"dailyPercentPL": 0,
"portfolioShare": 0,
"scale": 2,
"minimumStep": 0.01,
"board": "TQBR",
"priceUnit": "",
"faceValue": 3,
"accruedIncome": 0,
"isBlocked": false,
"isBlockedTradeAccount": false,
"lockedForFutures": 0,
"ratioQuantity": 0,
"expireDate": ""
}
]

💻 Примеры подключения

import WebSocket from "ws";

const URL = "wss://ws.broker.ru/trade-api-bff-portfolio/api/v1/portfolio/ws";

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

ws.on("open", () => {
console.log("connected");
});

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

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

❗ Ошибки

HTTPОшибкаОписание
401UNAUTHORIZEDПользователь не авторизован
400VALIDATION_ERRORОшибка валидации
404NOT_FOUNDДанные не найдены
500INTERNAL_SERVER_ERRORОшибка сервера