# Сервис котировок
Сервис котировок предназначен для получения различной биржевой информации, в том числе исторической. Все методы сервиса принимают на вход параметр `instrumentId`, в котором можно передать значение **instrument_uid** или **FIGI**.
[Подробнее об идентификаторах инструментов](/investAPI/faq_identification/)
<p>Есть несколько вариантов взаимодействия с сервисом: </p>
<ol>
<li><p><strong>Unary-методы</strong> — используются для загрузки исторических данных и получения информации, когда не нужна оперативность. Для методов есть ограничение на <a href="/investAPI/limits">количество запросов в минуту</a>.</p>
</li>
<li><p><strong>Bidirectional stream</strong> — используется для получения биржевой информации в реальном времени с минимально
возможными задержками. Для работы со стримом есть <a href="/investAPI/limits">лимитные ограничения</a>.</p>
<p>Также в стриме есть метод для <a href="/investAPI/head-marketdata/#_14">контроля консистентности активных подписок</a>.</p>
</li>
<li><p><strong>Server-side stream</strong> — используется для получения биржевой информации в реальном времени с минимально возможными задержками. В отличие от <a href="/investAPI/marketdata#marketdatastream">MarketDataStream</a>, в этом стриме передаётся объект со всеми типами подписок.</p>
<p>ServerSideStream нужен для корректной трансляции маркет-даты в браузерные клиенты по gRPC-web, который не поддерживает Bidirectional-стримы.</p>
<p>Для работы со стримом есть <a href="/investAPI/limits">лимитные ограничения</a>.</p>
</li>
</ol>
<blockquote>
<p><strong>Важно</strong><br>
Цены облигаций и фьючерсов в T-Invest API отображаются в пунктах. Для облигаций один пункт равен одному проценту номинала облигации. </p>
<p>Формула расчёта реальной стоимости фьючерса: <strong>price</strong> / <strong>min_price_increment</strong> * <strong>min_price_increment_amount</strong></p>
</blockquote>
## Формулы расчёта реальной стоимости инструментов в валюте
Значения:
* **price** — текущая котировка ценной бумаги;
* **nominal** — номинал облигации;
* **min_price_increment** — шаг цены;
* **min_price_increment_amount** — стоимость шага цены;
* **lot** — лотность инструмента.
### Акции
Формула расчёта: **price** * **lot**.
### Облигации
Пункты цены для котировок облигаций — это проценты номинала облигации. Формулы расчёта:
<ul>
<li><p>Пункты в валюту: <strong>price</strong> / 100 * <strong>nominal</strong>.</p>
</li>
<li><p>Пункты в валюту с учётом НКД: <strong>price</strong> / 100 * <strong>nominal</strong> + <strong>current_nkd</strong>. </p>
<p> НКД — накопленный купонный доход. Может возвращаться в параметрах <code>current_nkd</code> или <code>aci_value</code>. </p>
</li>
</ul>
### Валюта
Формула расчёта: **price** * **lot** / **nominal**.
>**Важно**<br>
>При торговле валютой учитывайте, что у таких валют как Иена, Армянский драм и Тенге `nominal` = `100`.
### Фьючерсы
Стоимость фьючерсов предоставляется в пунктах. Формула расчёта: **price** / **min_price_increment** * **min_price_increment_amount**.
## Получить исторические свечи
В процессе разработки торгового робота нужно анализировать различную историческую информацию — например,
свечи. Для получения исторических свечей по инструменту можно использовать метод [getCandles](/investAPI/marketdata#getcandles).
>**Обратите внимание**<br>
>Максимально допустимый период получения свечей за один запрос — один календарный год.
Получить данные за более длинный период можно поочередным вызовом метода.
>**Обратите внимание**<br>
>По фьючерсным контрактам дневные свечи в API и на Бирже отличаются.
Это связано с тем, что бокер считает день в пределах календарного дня, а Биржа от открытия предыдущей вечерней сессии.
## Получить цены последних сделок
Чтобы получить цены последних сделок всех доступных для торговли инструментов, используйте метод [getLastPrices](/investAPI/marketdata#getlastprices). В запросе нужно передать пустой массив `instruments`.
Если вам нужно оперативно получать информацию о цене последней сделки, мы рекомендуем использовать [подписку на поток обезличенных сделок](/investAPI/marketdata#subscribetradesrequest) в рамках [stream-соединения сервиса](/investAPI/marketdata#marketdatastream).
## Получить текущий стакан
[Биржевой стакан](https://www.tbank.ru/invest/account/help/trade-on-bs/bids/#q13) — один из ключевых показателей торгового инструмента. Стакан содержит заявки пользователей на покупку или продажу определённого инструмента.
Для получения стакана можно использовать метод [getOrderbook](/investAPI/marketdata#getorderbook).
Он также позволяет получать время формирования стакана на бирже, время получения цены закрытия и цены последней сделки.
Для высоколиквидных инструментов стакан может изменяться на бирже несколько раз в секунду, поэтому
использовать unary-метод не всегда удобно. В таком случае рекомендуем использовать
[подписку на стаканы](/investAPI/marketdata#subscribeorderbookrequest) в рамках
[stream-соединения сервиса](/investAPI/marketdata#marketdatastream).
## Bidirectional stream получения биржевой информации
В рамках stream-соединения можно получать поток интересующих данных. В рамках одного соединения пользователь
может подписаться на получение:
- стаканов — с глубиной 1, 10, 20, 30, 40 или 50;
- свечей;
- потока обезличенных сделок;
- статуса торговли инструментов;
- цен последних сделок;
- информации о своих подписках.
>**Важно**<br>
>В рамках одного запроса можно управлять подпиской только одного типа данных. <br>
>Чтобы подписаться на свечи и стаканы, нужно отправить два запроса через метод [marketdataRequest](/investAPI/marketdata#marketdatarequest) с информацией об изменении статуса подписки на свечи и стаканы.
Чтобы сохранить стабильное подключение при отсутствии данных в stream-соединении, сервер периодически
отправляется ping-пакет. Клиенту не нужно реагировать на него.
>**Обратите внимание**<br>
>Максимальное количество подписок на одно соединение ограничено [лимитной политикой](/investAPI/limits/) T-Invest API, но это ограничение не распространяется на подписку **info** — получение торгового статуса инструмента.
### Особенности трансляции свечей
Свечи в рамках bidirectional stream собираются из ленты обезличенных сделок в режиме реального времени.
Свечи отправляются не чаще одного раза в 300мс + свеча закрытия периода сбора. Но бывают ситуации, когда сделки с биржи фактически доходят уже после окончания периода сбора свечи — в таком случае в стрим отправляется ещё одна или более «корректирующая» свеча.
Если вам нужно получать свечи после закрытия интервала, используйте параметр `waiting_close`.
### Получить исторические рыночные данные по инструментам в виде годового архива
Через метод [GetHistory](/investAPI/get_history) можно получить ZIP-архив исторических минутных свечей за год.
>**Обратите внимание**<br>
>Максимально допустимый период получения свечей за один запрос — один календарный год.
Получить данные за более длинный период можно поочередным вызовом метода.
Также в методе [GetHistory](/investAPI/get_history) есть скрипт получения ZIP-архивов по списку инструментов за все доступные года. Скрипт выполняет поочередный вызов метода по всем доступным годам.
>**Обратите внимание**<br>
>Данные в архиве обновляются один раз в день — как правило, ночью. Текущего дня в архиве не будет.
### Лимиты на количество запросов на подписку
Для всех типов подписок в [bidirectional stream](/investAPI/marketdata/#marketdatastream) установлены ограничения максимального количества запросов на подписку.
Если количество запросов за минуту превысит 100, для всех элементов будет установлен статус [SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS](/investAPI/marketdata/#subscriptionstatus).
### Получить информацию о своих подписках
Информацию о своих подписках можно запросить через метод [marketDataStream](/investAPI/marketdata/#marketdatastream), передав параметр [GetMySubscriptions](/investAPI/marketdata/#getmysubscriptions).
Метод также используется для контроля активных подписок.
Запрос вернёт по одному сообщению на каждый тип активных подписок — `SubscribeLastPriceResponse`, `SubscribeInfoResponse`, `SubscribeTradesResponse`, `SubscribeOrderBookResponse`, `SubscribeCandlesResponse`.
#### Контроль активности стрима
Чтобы проверить работу стрима, используйте следующий механизм:
1. Храните информацию о подписках в своих приложениях.
2. Периодически или при возникновении сомнений отправляйте в стрим запрос [GetMySubscriptions](/investAPI/marketdata/#getmysubscriptions).
3. Запросите информацию об активных подписках из стрима.
4. Если данные из стрима расходятся с данными из собственного хранилища, повторно подпишитесь на недостающие данные. Если в стриме нет данных с активными подписками, перезапустите стрим.
### Получить цену закрытия
Чтобы получить цены закрытия всех доступных для торговли инструментов, используйте метод [GetClosePrices](/investAPI/marketdata/#getcloseprices). В запросе передайте пустой массив `instruments`.
Чтобы получить цену закрытия за предыдущий торговый день, в [запросе](/investAPI/marketdata/#instrumentclosepricerequest) передайте параметр `instrumentId` — идентификатор инструмента. Он принимает значение **instrument_uid** или **FIGI**.
### Торговые статусы инструментов и расписание торгов
[Торговые статусы инструментов и расписание торгов](https://russianinvestments.github.io/investAPI/faq_trading_status/)
Также рекомендуем смотреть актуальную информацию по режимам и статусам торгов на сайтах [Московской биржи](https://www.moex.com/) и [СПБ биржи](https://spbexchange.ru/).