Тинькофф инвестиции api java

Протокол

Streaming market-data в качестве протокола транспорта использует WebSocket.

Ограничения

  • Доступно 6 TCP-соединений на одного пользователя.

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 java

OpenAPI SDK для Java

Данный проект представляет собой инструментарий на языке Java для работы с OpenAPI Тинькофф Инвестиции, который можно использовать для создания торговых роботов.

Для сборки библиотеки понадобится Apache Maven версии не ниже 3, а также JDK версии не ниже 8. Затем в терминале перейдите в директорию проекта и выполните следующую команду

Или с помощью docker

Скорее всего вы увидите ошибки, связанные с подпроектом example — он требует JDK версии 11. Однако, сам SDK должен скомпилироваться.

После успешной сборки в поддиректории sdk-java8\target появится jar-файл openapi-java-sdk-java8- , который можно подключить к любому другому Java-проекту (или Java-совместимому, например, на таких языках, как Kotlin и Scala).

Где взять токен аутентификации?

В разделе инвестиций вашего личного кабинета tinkoff. Далее:

  • Перейдите в настройки
  • Проверьте, что функция «Подтверждение сделок кодом» отключена
  • Выпустите токен для торговли на бирже и режима «песочницы» (sandbox)
  • Скопируйте токен и сохраните, токен отображается только один раз, просмотреть его позже не получится, тем не менее вы можете выпускать неограниченное количество токенов

Для проекта можно сгенерировать javadoc-документацию с помощью команды

Или с помощью docker

Проект разделён на 3 части:

  • core — содержит интерфейсы всех частей REST API и Streaming API, а также модели данных, которые они используют;
  • sdk-java8 — содержит реализацию core-интерфейсов с использованием http-клиента из библиотеки OkHttp;
  • example — простой пример использования core-интерфесов, реализованных в sdk-java8 (для компиляции необходим jdk11).

Модели данных core-части подготовлены для работы с JSON при помощи Jackson аннотаций.

Документацию непосредственно по OpenAPI можно найти по ссылке.

Каждая часть может быть подключена в качестве зависимости

Для непосредственного взаимодействия с OpenAPI нужно создать подключение.

А пример готового робота есть?

Пример готового робота пока отсутствует, но планируется к добавлению.

У меня есть вопрос

Основной репозиторий с документацией — в нем вы можете задать вопрос в Issues и получать информацию о релизах в Releases.

Если возникают вопросы по данному SDK, нашёлся баг или есть предложения по улучшению, то можно задать его в Issues.

Источник

API Тиньков.Инвестиции. Первые шаги

Практически с первых дней я стал клиентом Тиньков.Инвестиции.

И с этого же момента меня терзают смутные сомнения — отражает ли личный кабинет объективную реальность?

Дело в том, что я покупаю ценные бумаги, номинированные в долларах, но в ЛК цены всех активов отображаются в долларах, а итоговая стоимость портфеля в рублях.

И мне непонятно, это доллар вырос или я такой результативный инвестор?

А как же комиссии, налоги и прочие дивиденды?

Вот бы взять все мои сделки и расписать по ФИФО, как в складском учете… А сверху положить полученные дивиденды, а потом вычесть налоги.

Вот тогда я и увижу понятный мне результат.

Оказалось, у Тинькова есть API, которое позволяет писать торговых роботов (мне это совсем не интересно), а также загружать данные по своему портфелю и операциям.

У этого API есть официальное описание, но мне не все было понятно, пришлось разбираться.
Результаты этих разборок представляю вашему вниманию.

Получение токена и установка библиотеки

Перед началом работы нужно установить библиотеку и получить токен.

Цитирую официальную инструкцию по получению токена:

  1. Зайдите в свой аккаунт на tinkoff.ru
  2. Перейдите в раздел инвестиций
  3. Перейдите в настройки
  4. Функция «Подтверждение сделок кодом» должна быть отключена
  5. Выпустите токен OpenApi для биржи и Sandbox. Возможно система попросит вас авторизоваться еще раз, не беспокойтесь, это необходимо для подключения робота к торговой платформе.
  6. Скопируйте токен и сохраните, токен отображается только один раз, просмотреть его позже не получится, тем не менее вы можете выпускать неограниченное количество токенов.

На момент написания статью токен выдавался на странице www.tinkoff.ru/invest/settings, кнопка в нижней части страницы.

С токеном для песочницы у меня возникали ошибки, поэтому я начал экспериментировать с боевой версией. Чего и вам желаю (Осторожно: не купите-продайте случайно что-то лишнее).

Авторизация

Эти две строки делают все, что нам нужно.

Дальше работаем с переменной client.

Что у нас в портфеле

Получим содержимое нашего вашего портфеля:

Посмотрим основные данные первого элемента:

В моем случае это:

value — Цена бумаги
balance — Кличество бумаг в портфеле, value и currency — их денежное выражение.

figi — Financial Instrument Global Identifier (Финансовый Глобальный Идентификатор инструмента)
ticker — Тикер актива.

По этим данным мы можем узнать человекочитаемое название актива.

Для данного запроса нам это не нужно (см. поле name), но в других случаях пригодится.

Получаем название бумаги по FIGI и тикету

Эта API-функция у меня работает как надо. Видим, что ‘BBG000BWPXQ8’ -> ‘British American Tobacco’.

А вот поиск названия актива по тикеру у меня не работает :(((

Разработчики предложили обновить библиотеку, но даже после этого не взлетело.

Качаем справочник ценных бумаг

Впрочем, я решил этот вопрос кардинально. Скачал у Тинькова полный справочник торгуемых активов:

получил
Как видим, figi и name там есть. Для моих целей — более чем достаточно.

Получаем список операций

А вот самое интересное — получить список моих операций. В операции (в моем случае) попадают следующие действия:

  • PayIn — Пополнение брокерского счета
  • PayOut — Вывод денег
  • BuyCard — Покупка с карты
  • Sell — Продажа
  • BrokerCommission — Комиссия брокера
  • Dividend — Выплата дивидендов
  • Tax — Налоги
  • TaxDividend- Налоги c дивидендов
  • ServiceCommission — Комиссия за обслуживание

Код для выгрузки портфеля:

Посмотрим, что получилось. В моем случае, представляет интерес этот элемент Вот что он собой являет
Нас интересуют поля:

  • date — дата сделки
  • figi — код актива
  • operation_type — тип операции
  • payment — сумма операции. У налогов или комиссий указана именно она. price при этом None
  • price — цена одной бумаги
  • quantity — плановое количество бумаг
  • trades — реальные биржевые сделки

Сразу возник вопрос — зачем нам какие-то trades, если есть price и quantity?

Все не так просто (план и факт)

Как я понял, в quantity указано то количество бумаг, которые я хотел купить. А то, что фактически куплено, лежит в trades[i].quantity.

Т.е. если хотите обратится к фактическим сделкам, нужно перебрать то, что лежит в trades.

В ряде случаев, там None — например, для налогов или вводов/выводов средств.

Чтобы получить настоящие цифры, нужно смотреть и в сделки, и в биржевые операции:

Читают сейчас

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

Похожие публикации

Что недоговаривают Тинькофф Инвестиции. Вытаскиваем все данные по портфелю через API в большую таблицу Excel

Пользователи массово жалуются на сбой в приложениях «Тинькофф» и «Тинькофф Инвестиции»

Отслеживаем состояние своего портфеля у брокера «Тинькофф Инвестиции» через Google Таблицы

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Минуточку внимания

Комментарии 63

Оказалось, у Тинькова есть API, которое позволяет писать торговых роботов (мне это совсем не интересно)

А вот мне, наоборот, оказалось интересно. Начал возиться с этим чуть больше недели назад. Написал программу, которая сигнализирует о необычных состояниях на рынке, дальнейшие решения я уже принимал вручную. В принципе, понравилось.

Главная проблема — API очень простой, но одновременно и очень сырой. Часто тормозит и глючит. Поиграться — нормально, но если торговать профессионально, то есть варианты и получше.

Был бы рад ссылкам

Специализированные брокеры. Полноценно пока не интересовался этой темой, поэтому ссылок не дам.

Там в квике есть lua, на которой худо бедно можно накорябать робота, графики с индивидуальными индикаторами, или шлюз в другие миры.
Но квик что-то подтормаживает, знающие люди говорят, для htf надо брать плазу2 и колокейшн у брокера.

знающие люди говорят, для htf надо брать плазу2 и колокейшн у брокера

Рано или поздно пытливый программистский ум все равно захочет хоть немного HFT — бота с реакцией в несколько секунд. О миллисекундах, к сожалению, речи не идёт — это удел кровавого энтерпрайса и крупных игроков.

Я имею в виду тормоза самого Тинькоффа как сервиса. В обычном режиме там тоже всё исполняется в момент, но в периоды высокой активности на бирже, когда самое лучшее время делать деньги, он встаёт колом.

Но в целом я Т не особо за это ругаю: у него изначально была другая направленность — не на профессиональных трейдеров, а просто на желающих пощупать возможность заработка на инвестициях в долгосроке. API для торговли они предоставили совсем недавно.

Ну вот представьте: накупили вы этих плазов, поставили колокейшн в золотом корпусе, запустили скрипты и ждете. А на другом конце интернета сидят условные Мамут с Усмановым, смотрят на экраны своих HFT и ржут над вами.

Почему ржут? А потому что пока скрипит ваша плаза в колокейшне, у них уже миллиончик+миллиончик+миллиончик…

А в режиме read-only через API Тинькофф можно считать только свои позиции?

Имел ввиду получение собственных открытых позиций — цена покупки, дата, количество.
Без возможности торговли. Для синхронизации со своими сервисами по учету.

Кто-нибудь знает — Тинькофф единственный брокер, которые имеет своё открытое апи?
В первую очередь интересен только просмотр позиций без возможностей торговли.

В IB и так нет проблем с экспортом отчетов.
Проблема с рос. брокерами — нет единой формы, они периодически меняются, а сбербанк (бывший тройка диалог) — так в плане отчетов вообще ловить нечего — невозможно даже определить начальную цену позиции.

И оно открыто? А кто кроме Тинькова имеет открытое апи?

Тинькофф Инвестиции, ITI Capital (АО «ИК «Ай Ти Инвест»).
А знаете ещё кто имеет апи?

А после слияния с Фридом Финанс апи сохранилось?

Вот тут становится непонятно, что вы подразумеваете под «Открытым АПИ».

Ну для меня это значит, что имеется подробная документация по протоколу и возможность написания собственных клиентов, а не только плагинов и скриптов для квика.

Я хотел бы через API получать свои открытые позиции в режиме только чтения.

И мне непонятно, это доллар вырос или я такой результативный инвестор?

Я себе написал замену Excel для учёта сделок.
Всё считает. Можно посмотреть состояние портфеля на любую дату. Главное все сделки в систему завести… Можно отчёт брокера импортировать. Зацените кто хочет, https://izi-invest.ru

Относительно «а итоговая стоимость портфеля в рублях» — у Тинькофф есть переключатель (в мобильных приложениях на значок рубля нажать, если не путаю), можно и в долларах смотреть

Вах, не прошло и полгода, что называется…

Когда я, будучи их клиентом, спросил о кусочке API для всего-то ежедневного получения курса евродоллара, меня первую неделю не могли понять вообще, вторую отвечали безопасники (упс? я вообще-то технарей спрашивал) разных уровней и задавали острожные, хоть и дурацкие на взгляд программиста, вопросы, а на третью посоветовали… парсить их главную страницу, где выводится курс…
Передовой банк, что уж тут.

Приветствую, коллега. Так вышло, что почти одновременно с вами я начал вынашивать идею о написании своего клиента для OpenAPI на Ruby. Как раз сегодня я зарелизил свою поделку, консольный клиент для вывода портфолио брокерского счёта.

Моя задача — сделать консольную утилиту для просмотра полной итоговой суммы и процентов моего портфеля. Однако, столкнулся с несколькими недостатками данного API.

1. Отсутствие итоговой суммы и процентов доходности в API. Хотя бы в приближённом виде. А это то, ради чего я вообще начал писать код.
2. Список позиций на счёте вроде хорош, но в нём не хватает процентов доходности и оценочной стоимости каждой позиции. Пришлось писать кучу кода для вычисления процентов.
3. Каждая позиция в своей валюте, это вроде понятно и правильно. Но когда я собрался посчитать общую стоимость, это вылилось в нетривиальную задачу. Оказывается в API нет биржевого курса долларов/евро. Пришлось считать так: брать данные своих активов доллар и евро и через сумму и доходность высчитывать курс к рублю. Потом я прохожу по списку позиций и каждую позицию умножаю на курс к рублю, чтобы получить рублёвый итог.

По итогу несмотря на кучу неточных вычислений я получил довольно точные цифры, отличающиеся от приложения на доли процентов. И мне порой даже кажется, что мои данные чуть точнее, поскольку я сам вывел все формулы и сам по ним считаю свои денежки 🙂

Во избежание ошибок float-вычислений, использую BigDecimal — этакий float с гарантированной десятичной точностью. То есть складывая 1.1 + 1.2 получится 2.3, а не 2.2999999999999.

API в целом рабочее, но немного бесполезненькое. Иногда замирает, иногда некоторые поля приходят нулевые, пару раз ловил 500. Может через вебсокеты получится что-то интересное добыть.

Я курс доллара тоже у Тинькова беру

cd2 = datetime.now(tz=timezone(‘Europe/Moscow’))
cd1 = cd2 — timedelta(days=3)
cur = client.market.market_candles_get(‘BBG0013HGFT4’, cd1, cd2, ‘day’)

if len(cur.payload.candles) == 0:
print(»)
else:
print(cur.payload.candles[len(cur.payload.candles) — 1])

Это инструмент USD000UTSTOM — курс с поставкой валюты «завтра», но меня устраивает.

Источник

Читайте также:  Руководство для начинающих binance
Оцените статью