Сервис котировок
Все методы сервиса котировок принимают на вход instrumentId
- параметр, в который можно передать значение instrument_uid или FIGI.
Получить более подробную информацию можно на странице об идентификаторах инструментов.
Данный сервис предназначен для получения различной (в т.ч. исторической) биржевой информации. Существует два варианта взаимодействия с сервисом котировок:
- Unary-методы — данный вариант следует использовать в случаях, когда не требуется оперативность получения информации или для загрузки исторических данных. Существует ограничение на количество запросов в минуту, подробнее: Лимитная политика.
- Bidirectional-stream — используется для получения биржевой информации в реальном времени с минимально возможными задержками. Для работы со стрим-соединениями также существуют ограничения, согласно лимитной политике.
- Server-side-stream — используется для получения биржевой информации в реальном времени с минимально возможными задержками. В отличие от MarketDataStream в данном стриме передаётся объект, содержащий все типы подписок. ServerSideStream необходим для корректной трансляции маркетдаты в браузерные клиенты по gRPC-web, который не поддерживает bidirection стримы. Для работы со стрим-соединениями также существуют ограничения, согласно лимитной политике.
Важно! В сервисе 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.
Обратите внимание, что максимально допустимый период получения свечей за один запрос — 1 календарный год. Получение данных за более длинный период возможно поочередным вызовом метода.
Получение цен последних сделок
В процессе работы алгоритма торговли может потребоваться получение цены последней сделки по инструменту или инструментам. Для реализации данной потребности следует использовать метод getLastPrices. Используя данный метод, вы можете получить цены последних сделок всех доступных для торговли инструментов — для этого требуется передать пустой массив instruments.
Если для реализации алгоритма требуется оперативно получать информацию о цене последней сделки, то команда TINKOFF INVEST API рекомендует использовать подписку на поток обезличенных сделок в рамках 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-архив исторических минутных свечей за год.
Обратите внимание, что максимально допустимый период получения свечей за один запрос — 1 календарный год. Получение данных за более длинный период возможно поочередным вызовом метода.
Также в методе GetHistory для удобства представлен скрипт получения zip-архивов по списку инструментов за все доступные года. Скрипт выполняет поочередный вызов метода по всем доступным годам.
Обратите внимание на то, что данные в архиве обновляются раз в сутки, как правило ночью, соответственно текущего дня в архиве не будет.
Лимиты на количество запросов на подписку
Для всех типов подписок в Bidirectional-stream установлены ограничения максимального количества запросов на подписку. Если количество запросов за минуту превысит 100, то для всех элементов будет установлен статус SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS.
Получение информации о своих подписках
Для получения информации о своих подписках в методе marketDataStream предусмотрен специальный запрос на получение информации о своих подписках - get_my_subscriptions
.
Получение своих подписок
Для получения списка своих подписок можно запросить в методе marketDataStream GetMySubscriptions.
Получение цены закрытия
В процессе работы алгоритма торговли может потребоваться получение цены закрытия по инструменту или инструментам. Для реализации данной потребности следует использовать метод GetClosePrices. Используя данный метод, вы можете получить цены закрытия всех доступных для торговли инструментов — для этого требуется передать пустой массив instruments.
Данный метод для всех бумаг возвращает цену закрытия за предыдущий торговый день.
Принимает на вход instrumentId
- параметр, в который можно передать значение instrument_uid или FIGI.
Торговые статусы инструментов и расписание торгов
Информацию о статусах инструментов и расписаниях торгов вы можете получить на странице Торговые статусы инструментов и расписание торгов.
Также рекомендуем смотреть актуальную информацию по режимам и статусам торгов на сайтах Московской биржи и СПБ биржи.