Перейти к содержанию

Сервис котировок

Сервис котировок предназначен для получения различной биржевой информации, в том числе исторической. Все методы сервиса принимают на вход параметр instrumentId, в котором можно передать значение instrument_uid или FIGI.

Подробнее об идентификаторах инструментов

Есть несколько вариантов взаимодействия с сервисом:

  1. Unary-методы — используются для загрузки исторических данных и получения информации, когда не нужна оперативность. Для методов есть ограничение на количество запросов в минуту.

  2. Bidirectional stream — используется для получения биржевой информации в реальном времени с минимально возможными задержками. Для работы со стримом есть лимитные ограничения.

    Также в стриме есть метод для контроля консистентности активных подписок.

  3. Server-side stream — используется для получения биржевой информации в реальном времени с минимально возможными задержками. В отличие от MarketDataStream, в этом стриме передаётся объект со всеми типами подписок.

    ServerSideStream нужен для корректной трансляции маркет-даты в браузерные клиенты по gRPC-web, который не поддерживает Bidirectional-стримы.

    Для работы со стримом есть лимитные ограничения.

Важно
Цены облигаций и фьючерсов в Tinkoff Invest API отображаются в пунктах. Для облигаций один пункт равен одному проценту номинала облигации.

Формула расчёта реальной стоимости фьючерса: price / min_price_increment * min_price_increment_amount

Формулы расчёта реальной стоимости инструментов в валюте

Значения:

  • price — текущая котировка ценной бумаги;
  • nominal — номинал облигации;
  • min_price_increment — шаг цены;
  • min_price_increment_amount — стоимость шага цены;
  • lot — лотность инструмента.

Акции

Формула расчёта: price * lot.

Облигации

Пункты цены для котировок облигаций — это проценты номинала облигации. Формулы расчёта:

  • Пункты в валюту: price / 100 * nominal.

  • Пункты в валюту с учётом НКД: price / 100 * nominal + current_nkd.

    НКД — накопленный купонный доход. Может возвращаться в параметрах current_nkd или aci_value.

Валюта

Формула расчёта: price * lot / nominal.

Важно
При торговле валютой учитывайте, что у таких валют как Иена, Армянский драм и Тенге nominal = 100.

Фьючерсы

Стоимость фьючерсов предоставляется в пунктах. Формула расчёта: price / min_price_increment * min_price_increment_amount.

Получить исторические свечи

В процессе разработки торгового робота нужно анализировать различную историческую информацию — например, свечи. Для получения исторических свечей по инструменту можно использовать метод getCandles.

Обратите внимание
Максимально допустимый период получения свечей за один запрос — один календарный год. Получить данные за более длинный период можно поочередным вызовом метода.

Получить цены последних сделок

Чтобы получить цены последних сделок всех доступных для торговли инструментов, используйте метод getLastPrices. В запросе нужно передать пустой массив instruments.

Если вам нужно оперативно получать информацию о цене последней сделки, мы рекомендуем использовать подписку на поток обезличенных сделок в рамках stream-соединения сервиса.

Получить текущий стакан

Биржевой стакан — один из ключевых показателей торгового инструмента. Стакан содержит заявки пользователей на покупку или продажу определённого инструмента.

Для получения стакана можно использовать метод getOrderbook. Он также позволяет получать время формирования стакана на бирже, время получения цены закрытия и цены последней сделки.

Для высоколиквидных инструментов стакан может изменяться на бирже несколько раз в секунду, поэтому использовать unary-метод не всегда удобно. В таком случае рекомендуем использовать подписку на стаканы в рамках stream-соединения сервиса.

Bidirectional stream получения биржевой информации

В рамках stream-соединения можно получать поток интересующих данных. В рамках одного соединения пользователь может подписаться на получение:

  • стаканов — с глубиной 1, 10, 20, 30, 40 или 50;

  • свечей;

  • потока обезличенных сделок;

  • статуса торговли инструментов;

  • цен последних сделок;

  • информации о своих подписках.

Важно
В рамках одного запроса можно управлять подпиской только одного типа данных.
Чтобы подписаться на свечи и стаканы, нужно отправить два запроса через метод marketdataRequest с информацией об изменении статуса подписки на свечи и стаканы.

Чтобы сохранить стабильное подключение при отсутствии данных в stream-соединении, сервер периодически отправляется ping-пакет. Клиенту не нужно реагировать на него.

Обратите внимание
Максимальное количество подписок на одно соединение ограничено лимитной политикой Tinkoff Invest API, но это ограничение не распространяется на подписку info — получение торгового статуса инструмента.

Особенности трансляции свечей

Свечи в рамках bidirectional stream собираются из ленты обезличенных сделок в режиме реального времени.

Свечи отправляются не чаще одного раза в 300мс + свеча закрытия периода сбора. Но бывают ситуации, когда сделки с биржи фактически доходят уже после окончания периода сбора свечи — в таком случае в стрим отправляется ещё одна или более «корректирующая» свеча.

Если вам нужно получать свечи после закрытия интервала, используйте параметр waiting_close.

Получить исторические рыночные данные по инструментам в виде годового архива

Через метод GetHistory можно получить ZIP-архив исторических минутных свечей за год.

Обратите внимание
Максимально допустимый период получения свечей за один запрос — один календарный год. Получить данные за более длинный период можно поочередным вызовом метода.

Также в методе GetHistory есть скрипт получения ZIP-архивов по списку инструментов за все доступные года. Скрипт выполняет поочередный вызов метода по всем доступным годам.

Обратите внимание
Данные в архиве обновляются один раз в день — как правило, ночью. Текущего дня в архиве не будет.

Лимиты на количество запросов на подписку

Для всех типов подписок в bidirectional stream установлены ограничения максимального количества запросов на подписку.

Если количество запросов за минуту превысит 100, для всех элементов будет установлен статус SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS.

Получить информацию о своих подписках

Информацию о своих подписках можно запросить через метод marketDataStream, передав параметр GetMySubscriptions. Метод также используется для контроля активных подписок.

Запрос вернёт по одному сообщению на каждый тип активных подписок — SubscribeLastPriceResponse, SubscribeInfoResponse, SubscribeTradesResponse, SubscribeOrderBookResponse, SubscribeCandlesResponse.

Контроль активности стрима

Чтобы проверить работу стрима, используйте следующий механизм:

  1. Храните информацию о подписках в своих приложениях.

  2. Периодически или при возникновении сомнений отправляйте в стрим запрос GetMySubscriptions.

  3. Запросите информацию об активных подписках из стрима.

  4. Если данные из стрима расходятся с данными из собственного хранилища, повторно подпишитесь на недостающие данные. Если в стриме нет данных с активными подписками, перезапустите стрим.

Получить цену закрытия

Чтобы получить цены закрытия всех доступных для торговли инструментов, используйте метод GetClosePrices. В запросе передайте пустой массив instruments.

Чтобы получить цену закрытия за предыдущий торговый день, в запросе передайте параметр instrumentId — идентификатор инструмента. Он принимает значение instrument_uid или FIGI.

Торговые статусы инструментов и расписание торгов

Торговые статусы инструментов и расписание торгов

Также рекомендуем смотреть актуальную информацию по режимам и статусам торгов на сайтах Московской биржи и СПБ биржи.