Протокол
Streaming market-data в качестве протокола транспорта использует WebSocket.
Ограничения
candle:subscribe
Подписка на свечи. Обратите внимание, что в случае отсутствия сделок в интервале свечи возможны пробелы в передаваемых данных.
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
| event | string | + | Название события |
| time | string | + | Время в формате RFC3339Nano |
| payload | object | + | Структура свечи |
| payload.o | double | + | Цена открытия |
| payload.c | double | + | Цена закрытия |
| payload.h | double | + | Наибольшая цена |
| payload.l | double | + | Наименьшая цена |
| payload.v | double | + | Объем торгов |
| payload.time | string | + | Время в формате RFC3339 |
| payload.interval | string | + | Interval |
| payload.figi | string | + | FIGI |
candle:unsubscribe
orderbook:subscribe
Подписка на стакан
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
| event | string | + | Название события |
| time | string | + | Время в формате RFC3339Nano |
| payload | object | + | Структура со стаканом |
| payload.depth | int | + | Глубина стакана |
| payload.bids | array[double,double] | + | Массив [Цена, количество] предложений цены |
| payload.asks | array[double,double] | + | Массив [Цена, количество] запросов цены |
| payload.figi | string | + | FIGI |
orderbook:unsubscribe
Отписка от стакана
instrument_info:subscribe
Подписка на информацию об инструменте
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
| event | string | + | Название события |
| time | string | + | Время в формате RFC3339Nano |
| payload | object | + | Структура с информацией по инструменту |
| payload.trade_status | string | + | Статус торгов |
| payload.min_price_increment | double | + | Шаг цены |
| payload.lot | double | + | Лот |
| payload.accrued_interest | double | — | НКД. Возвращается только для бондов |
| payload.limit_up | double | — | Верхняя граница заявки. Возвращается только для RTS инструментов |
| payload.limit_down | double | — | Нижняя граница заявки. Возвращается только для RTS инструментов |
| payload.figi | string | + | FIGI |
instrument_info:unsubscribe
Отписка от информации об инструменте
Сообщения об ошибке
К любому запросу можно добавить необязательное поле request_id, которое будет использовано в сообщении об ошибке
API Тиньков.Инвестиции. Первые шаги
Практически с первых дней я стал клиентом Тиньков.Инвестиции.
И с этого же момента меня терзают смутные сомнения — отражает ли личный кабинет объективную реальность?
Дело в том, что я покупаю ценные бумаги, номинированные в долларах, но в ЛК цены всех активов отображаются в долларах, а итоговая стоимость портфеля в рублях.
И мне непонятно, это доллар вырос или я такой результативный инвестор?
А как же комиссии, налоги и прочие дивиденды?
Вот бы взять все мои сделки и расписать по ФИФО, как в складском учете… А сверху положить полученные дивиденды, а потом вычесть налоги.
Вот тогда я и увижу понятный мне результат.
Оказалось, у Тинькова есть API, которое позволяет писать торговых роботов (мне это совсем не интересно), а также загружать данные по своему портфелю и операциям.
У этого API есть официальное описание, но мне не все было понятно, пришлось разбираться.
Результаты этих разборок представляю вашему вниманию.
Получение токена и установка библиотеки
Перед началом работы нужно установить библиотеку и получить токен.
Цитирую официальную инструкцию по получению токена:
Авторизация
Эти две строки делают все, что нам нужно.
Дальше работаем с переменной client.
Что у нас в портфеле
Получим содержимое нашего вашего портфеля:
Посмотрим основные данные первого элемента:
value — Цена бумаги
balance — Кличество бумаг в портфеле, value и currency — их денежное выражение.
figi — Financial Instrument Global Identifier (Финансовый Глобальный Идентификатор инструмента)
ticker — Тикер актива.
По этим данным мы можем узнать человекочитаемое название актива.
Для данного запроса нам это не нужно (см. поле name), но в других случаях пригодится.
Получаем название бумаги по FIGI и тикету
А вот поиск названия актива по тикеру у меня не работает :(((
Разработчики предложили обновить библиотеку, но даже после этого не взлетело.
Качаем справочник ценных бумаг
Впрочем, я решил этот вопрос кардинально. Скачал у Тинькова полный справочник торгуемых активов:
получил
Как видим, figi и name там есть. Для моих целей — более чем достаточно.
Получаем список операций
А вот самое интересное — получить список моих операций. В операции (в моем случае) попадают следующие действия:
Посмотрим, что получилось. В моем случае, представляет интерес этот элемент Вот что он собой являет
Нас интересуют поля:
Все не так просто (план и факт)
Как я понял, в quantity указано то количество бумаг, которые я хотел купить. А то, что фактически куплено, лежит в trades[i].quantity.
Т.е. если хотите обратится к фактическим сделкам, нужно перебрать то, что лежит в trades.
В ряде случаев, там None — например, для налогов или вводов/выводов средств.
Чтобы получить настоящие цифры, нужно смотреть и в сделки, и в биржевые операции:
Тинькофф инвестиции api php
PHP client for Tinkoff invest API (PHP клиент для API Тинькофф инвестиции)
or add to your compose.json
Include classes via autoloader
create token to use tinkoff invest on Tinkoff invest setting page
Create client instance for sandbox
Put money to your sandbox account (sandbox only)
Client register on sandbox (sandbox only)
Client remove account on sandbox (sandbox only)
Put stocks to your sandbox account (sandbox only)
Clear all positions on sandbox (sandbox only)
Get all stocks/bonds/etfs/currencies from market
Get instrument by ticker
Get history OrderBook
Get historical Candles
Get portfolio (if null, used default Tinkoff account)
Get portfolio balance
Get instrument lots count
Send limit order (default brokerAccountId = Tinkoff)
Send market order (default brokerAccountId = Tinkoff)
List of operations from 10 days ago to 30 days period
Getting instrument status
Get Candles and Order books
You can also to subscribe on changes order books, candles or instrument info: First of all, make a callback function to manage events:
Then subscribe to events
and finaly start listening new events
in this example we awaiting max 20 respnse and max for 60 seconds if you want no limits, you should make
to stop listening do
###CAUTION If you use subscriptions you should check figi on response, because you getting all subscribed instruments in one queue
Песочница API Тинькофф Инвестиции и операции заявок
Когда пару месяцев назад я выбирал брокера для погружения в пучину инвестиционного хайпа, то весь выбор для меня ( субъективно ) свелся к двум кандидатам Тинькофф Инвестиции и ВТБ Инвестиции. Одним из важнейших аргументов для меня было наличие каких либо интерфейсов как для получения данных о рынке, о сделках, об открытых позициях в аккаунте и для автоматизации торговли. Ни то что бы я какой то алготрейдер, но вот нравится мне идея щупать рынок кодом.
В бэкграунде у меня есть немного MQL4 ( MetaTrader 4 ) для Forex. Но это очень давний опыт и к нему я лет 10-15 не подходил. К сожалению на биржу MetaQuotes (вроде бы) не прорвались и это печально.
Впечатления от Open API Тинькофф Инвестиции
Понравилось. Простой Rest API, есть SDK, внятный мануал, легко получить доступы и есть Песочница где ( как я думал ) можно поиграться в Баффета. Ну что ещё нужно!
Здравствуй, Песочница, которая ничего не знает о рынке
. когда я дошел в своих экспериментах до игрищ с рынком в Песочнице я был изрядно удивлен, ошарашен, поражен, озадачен.
Вот есть в API метод /orders/market-order он должен отправить рыночную заявку чтобы купить бумагу по рыночной цене. В режиме песочницы этот метод купит (или продаст) бумагу по 100 (рублей). И продаст потом тоже за сто. И не важно что это за бумага, акция Сбера или 1 евро, в сделках будет операция покупки акции по 100 рублей. И никак эту цифру «сто» изменить нельзя. Мммм, чтооо?
А лимитная заявка /orders/limit-order исполнится сразу (то есть моментально, как рыночная) и исполнится по той цене что я поставлю в лимит. Мало того что как лимитная заявка этот метод, получается, не работает в принципе, так я могу купить 100500 лотов Сбера за рубль, а потом продать за 100000. Это как так то?
Справедливости ради, в доках такое поведение Песочницы, в целом, описано. Но это настолько странное поведение, что пока кодом это не увидишь осознания не придет.
По факту получается что Песочницу нельзя использовать для тестирования стратегий (в нормальном виде, без костылей). А для чего тогда она нужна? Возможно я что-то не понимаю и тут есть конкретный умысел?
Сложилось такое впечатление что команда пилила API и получалось хорошо, а на Песочнице бюджет кончился. Печалька!
Мне кажется что на Хабре, наверное, есть кому Песочница могла бы быть прикольным местом для лепки куличиков из виртуальных ценных бумаг. Если так, то давайте вместе попросим (наверное можно плюсами к статье) @tinkoff_bank выделить бюджет команде API и допилить Песочницу?
REST-протокол
Ограничение количества запросов
| Ресурс | Количество запросов для пользователя | Количество запросов на IP | Интервал ограничения |
|---|---|---|---|
| /sandbox | 120 | 1000 | 1 минута |
| /portfolio | 120 | 1000 | 1 минута |
| /market | 240 | 500 | 1 минута |
| /orders | 100 | 1000 | 1 минута |
| /orders/limit-order | 100 | 1000 | 1 минута |
| /orders/market-order | 100 | 1000 | 1 минута |
| /orders/cancel | 50 | 1000 | 1 минута |
| /operations | 120 | 1000 | 1 минута |
При превышении лимита запросов возвращается ошибка 429 Error: Too Many Requests
Ограничение количества запросов от Московской Биржи (MOEX)
Под запросами в биржу подразумевается выставление и отмена заявок
Генерация
REST API использует OpenAPI 3.0.0, для генерации клиентов необходимо использовать новую версию swagger-gen.

