Лонгрид 7 из 13Курс
Получать данные через WebSocket
Содержание
REST вернул снимок на момент запроса. Для постоянно меняющихся данных откроем одно соединение wss://api.finam.ru/ws и подпишемся на котировки.
Какие подписки доступны
Тип | Данные |
|---|---|
QUOTES | Котировки по списку инструментов |
ORDER_BOOK | Изменения стакана по инструменту |
BARS | Свечи по инструменту и таймфрейму |
INSTRUMENT_TRADES | Рыночные сделки по инструменту |
ORDERS | Собственные заявки по счёту |
TRADES | Собственные сделки по счёту |
ACCOUNT | Изменения состояния счёта |
Один сокет может обслуживать несколько подписок. Команды UNSUBSCRIBE и UNSUBSCRIBE_ALL позволяют освободить ненужные подписки без открытия нового соединения.
Дождитесь рукопожатия
После подключения сервер присылает событие HANDSHAKE_SUCCESS. Только после него пример отправляет SUBSCRIBE. Это делает порядок запуска явным и соответствует официальным примерам клиента.
REST и WebSocket кодируют decimal по-разному
В REST котировка выглядит так:
В WebSocket — так:
Поэтому в потоковом коде используется quote.last, а не quote.last.value. Нельзя без проверки переносить модель ответа из одного протокола в другой.
Как устроен конверт
type | Что находится внутри |
|---|---|
DATA | subscription_type, timestamp и полезная нагрузка payload |
ERROR | error_info с типом, кодом и сообщением |
EVENT | event_info, например HANDSHAKE_SUCCESS или CONNECTION_CLOSED |
Почему поток всё равно требует REST
WebSocket сообщает об изменениях, но не заменяет восстановление состояния. После запуска или обрыва:
получите свежий access_key;
подключитесь и дождитесь HANDSHAKE_SUCCESS;
восстановите подписки;
запросите актуальный снимок через REST;
сопоставьте снимок с локальными заявками и позициями.
Конец лонгрида