как узнать api токен тинькофф
API Тиньков.Инвестиции. Первые шаги
Практически с первых дней я стал клиентом Тиньков.Инвестиции.
И с этого же момента меня терзают смутные сомнения — отражает ли личный кабинет объективную реальность?
Дело в том, что я покупаю ценные бумаги, номинированные в долларах, но в ЛК цены всех активов отображаются в долларах, а итоговая стоимость портфеля в рублях.
И мне непонятно, это доллар вырос или я такой результативный инвестор?
А как же комиссии, налоги и прочие дивиденды?
Вот бы взять все мои сделки и расписать по ФИФО, как в складском учете… А сверху положить полученные дивиденды, а потом вычесть налоги.
Вот тогда я и увижу понятный мне результат.
Оказалось, у Тинькова есть API, которое позволяет писать торговых роботов (мне это совсем не интересно), а также загружать данные по своему портфелю и операциям.
У этого API есть официальное описание, но мне не все было понятно, пришлось разбираться.
Результаты этих разборок представляю вашему вниманию.
Описание API
Еще описание
Получение токена и установка библиотеки
Перед началом работы нужно установить библиотеку и получить токен.
Цитирую официальную инструкцию по получению токена:
Авторизация
Эти две строки делают все, что нам нужно.
Дальше работаем с переменной client.
Что у нас в портфеле
Получим содержимое нашего вашего портфеля:
Посмотрим основные данные первого элемента:
value — Цена бумаги
balance — Кличество бумаг в портфеле, value и currency — их денежное выражение.
figi — Financial Instrument Global Identifier (Финансовый Глобальный Идентификатор инструмента)
ticker — Тикер актива.
По этим данным мы можем узнать человекочитаемое название актива.
Для данного запроса нам это не нужно (см. поле name), но в других случаях пригодится.
Получаем название бумаги по FIFI и тикету
А вот поиск названия актива по тикеру у меня не работает :(((
Разработчики предложили обновить библиотеку, но даже после этого не взлетело.
Качаем справочник ценных бумаг
Впрочем, я решил этот вопрос кардинально. Скачал у Тинькова полный справочник торгуемых активов:
получил
Как видим, figi и name там есть. Для моих целей — более чем достаточно.
Получаем список операций
А вот самое интересное — получить список моих операций. В операции (в моем случае) попадают следующие действия:
Посмотрим, что получилось. В моем случае, представляет интерес этот элемент Вот что он собой являет
Нас интересуют поля:
Все не так просто (план и факт)
Как я понял, в quantity указано то количество бумаг, которые я хотел купить. А то, что фактически куплено, лежит в trades[i].quantity.
Т.е. если хотите обратится к фактическим сделкам, нужно перебрать то, что лежит в trades.
В ряде случаев, там None — например, для налогов или вводов/выводов средств.
Чтобы получить настоящие цифры, нужно смотреть и в сделки, и в биржевые операции:
Как узнать api токен тинькофф
С 05.04.2021 пользователям intelinvest.ru стала доступна настройка прямой интеграции с брокером Тинькофф. В течение двух недель после выхода обновления мы провели несколько важных доработок, а также собрали самые частые вопросы пользователей, на которое постарались ответить в данной статье.
Безопасность
Как хранится у вас токен? Брокер не рекомендует передавать третьим лицам.
Токена API хранится в зашифрованном виде, воспользоваться токеном для чтения записей о совершенных сделках может только владелец аккаунта. Ключом к зашифрованному токену является пароль, который указывается в настройках интеграции. Такой пароль не хранится, он известен только владельцу аккаунта.
Что будет, если кто-то получит доступ в мой личный кабинет Intelinvest?
В случае доступа третьих лиц в личный кабинет пользователя скопировать или воспользоваться токеном API нельзя.
Intelinvest.ru не передает данные пользователей третьим лицам
Можно ли как-то (случайно) совершить сделку у брокера через Intelinvest?
Intelinvest.ru не оказывает брокерские услуги и не может отправлять торговые поручения через OpenAPI.
Решил отменить интеграцию, как убрать токен?
Настроенную интеграцию можно отменить в любой момент, зашифрованное значение токена удаляется. Также клиент Тинькофф может сменить токен API в личном кабинете брокера.
Настойка интеграции
Использовал загрузку отчетов брокера, как настроить интеграцию?
Используйте раздел Настройки — Импорт сделок. Выбрав в роли брокера Тинькофф перейдите в настройку интеграции(кнопка Интеграция).
Рекомендуем производить настройку интеграции в пустой портфель, не содержащий других сделок.
Проверка списка сделок по API происходит от последней сделки в портфеле до настоящего момента.
В окне настроек необходимо указать пароль, это пароль аккаунта?
В окне настроек необходимо указать ваш индивидуальный API токен для торговли (инструкция «как получить api токен» находится на странице импорта), и установить пароль (пароль может быть любым, но его необходимо запомнить).
Указал токен, но настройки не сохраняются
Настройка интеграции с API токеном для песочницы не производится.
Ознакомьтесь с подробной инструкцией «Как получить API токен» на странице импорта.
У меня несколько счетов, как настроить интеграцию?
Если у Вас больше 1 счета в Тинькофф, после указания токена и пароля появится поле выбора. Необходимо указать счет (как правило Брокерский или ИИС) по которому будет произведена настройка.
Для интеграции по нескольким счетам используйте отдельные портфели. Добавить портфель можно через Управление портфелями.
Добавил новую сделку у брокера, в Intelinvest ее нет. Как обновляются сделки?
Предоставляемый брокером токен API позволяет отправлять торговые поручения, в связи с чем для безопасности использования введено обязательное условие: шифрование токена с помощью пароля, который не хранится в базе и известен только владельцу аккаунта.
Для обновления списка сделок перейдите в Импорт сделок, нажмите «Обновить данные» и укажите пароль для интеграции. Система проверит сделки от последней даты в портфеле до текущего момента и дополнит портфель необходимыми записями.
Через API попадает полный список сделок, даже если они совершены 5 минут назад.
Результаты импорта
Если в результатах импорта есть комментарий «Неверный идентификатор бумаги» напишите почту вашего аккаунта в службу технической поддержки. После проведения проверки данных поступающих от Tinkoff Open API будут внесены корректировки для автоматического распознавания таких бумаг.
Если в вашем портфеле присутствуют еврооблигации, на данный момент сделки с такими бумагами не импортируются. Внести их можно в ручном режиме через «Пользовательские активы«.
РЕПО сделки не были импортированы
РЕПО (брокер может брать часть активов клиента в кредит, предоставляя за это вознаграждение) сделки не импортируются, так как не оказывают значительного влияния на расчеты доходности. На сумму вознаграждения за такие операции автоматически заводится корректировка баланса.
Маржинальная торговля(кредитное плечо)
Сделки маржинальной торговли на данный момент не учитываются. Импорт переносит сделки обычного режима торговли. Внести сделки с кредитным плечом можно через интерфейс ручного ввода в режиме портфеля PRO (Управление портфелями).Когда сделки будут попадать автоматически, без проверки пароля?
Прочие вопросы
Когда сделки будут попадать автоматически, без проверки пароля?
Отключение шифрования данных возможно после предоставления брокером токена, у которого доступ только на чтение записей(read only), без возможности отправить торговое поручение.
Будут ли интеграции с другими брокерами?
Работа в данном направлении уже проводится. Переговорный процесс занимает много времени, так как большинство брокеров не имеют открытой документации по API.
Будет ли интеграция доступна в мобильном приложении?
Да, основная работа проделана в одном из ближайших обновлений такая возможность будет добавлена и в приложение.
Песочница 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 и допилить Песочницу?
Отслеживаем состояние своего портфеля у брокера «Тинькофф Инвестиции» через Google Таблицы
Наверняка многие ведут учет сделок и следят за состоянием своего портфеля в Google-таблицах или в Excel. Раньше мне приходилось вручную вносить информацию о каждом купленном или проданном инструменте и это отнимало значительную часть моего времени. Тогда мне захотелось автоматизировать этот процесс и я начал искать способы реализации данной идеи.
Я обнаружил статью пользователя ErhoSen. Из неё я узнал, что брокер «Тинькофф Инвестиции» предлагает своим клиентам API для взаимодействия с брокерским счетом с индивидуально-инвестиционным счетом (ИИС). С его помощью можно получить список акций, валютных пар, узнать стоимость бумаги по тикеру, просмотреть список операций по счету, получить информацию о своем портфеле и т.д. Однако, мне не хватило существующего функционала скрипта и я решил дописать его, добавив туда свои функции.
Получение токена
Работа с API происходит через токен. Процесс получения токена описан в документации на GitHub’е. Для его получения нужно:
Вставьте свой токен в ячейку B1 в листе «Настройки».
Важно! После вставки токена не удаляйте и не переименовывайте лист “Настройки”. Если в ячейке B3 появится текущий курс доллара — поздравляем, все готово к работе.
Основные функции скрипта:
Пример работы функции getPortfolio для получения портфеля
Ручное обновление данных
Сначала нужно нажать на кнопку Обновить в подменю TI (появится справа от вкладки Справка).
После этого появится окно с предупреждением:
Нажимаем Продолжить. Далее появится еще одно предупреждающее окно, где нужно будет нажать на Дополнительные настройки и в раскрывшемся поле выбрать Перейти на страницу «Tinkoff Invest» (небезопасно):
Данные действия необходимо выполнять потому, что скрипт для изменения значения ячейки Z1 должен сначала получить доступ к текущей таблице, чтобы он исполнялся только в ней. После этого у нас есть возможность по запросу обновить данные в таблице. Пример ручного обновления для функции getPrice(«AMD»;$Z$1):
ВНИМАНИЕ! У разработчика данного скрипта не будет доступа к Вашему Google-аккаунту, к списку таблиц на Диске или к токену. Если Вы опасаетесь за сохранность своих данных, то можете скопировать мой скрипт и вставить его в свою таблицу. Для этого в Google Sheets откройте свою таблицу и в верхнем меню нажмите на Инструменты, а затем на Редактор скриптов.
У вас откроется среда для создания скриптов Google. Сотрите в окне код, расположенный по умолчанию, скопируйте код по ссылке и вставьте его в окно.
После этого сохраните скрипт, задав любое название проекту и самому скрипту. Затем перейдите обратно в таблицу, создайте лист “Настройки” и в ячейку В1 вставьте свой токен для OpenAPI. После этого Вы можете работать с таблицей.
Заключение
Хочу выразить благодарность ErhoSen за его статью и исходный код, который был доработан мною.
Также для личного пользования я создал Telegram бота, в планах на будущее довести эту идею до ума, если идея найдет отклик. Бот удобен в случаях, когда не хочется терять время на вход в приложение Тинькофф Инвестиции, кто часто сидит за ноутбуком и не хочет постоянно авторизовываться на сайте, или же для хранения истории изменений содержимого портфеля.
Что недоговаривают Тинькофф Инвестиции. Вытаскиваем все данные по портфелю через API в большую таблицу Excel
Однако, когда инвестиции приобретают серьёзный характер, инвестору нужны точные и подробные данные по его портфелю, в частности, для оценки эффективности инвестирования. И вот здесь с приложением возникают неоднозначности.
Описание проблемы
Рассмотрю на примере своего портфеля (не ИИС) в мобильном приложении. (С даты публикации приложение может обновиться).
На главном экране видим ободряющие значения:
У меня здесь сразу возникают вопросы:
Каким образом была посчитана эта зелёная сумма и 12,21%? Причём, несколько дней назад у меня было что-то около +17%, потом я зафиксировал одну бумагу с профитом, стоимость портфеля почти не изменилась, а вот этот зелёный «общий процент» сразу упал до 12,21.
Мой портфель почти полностью в иностранных бумагах и USD. Каким образом это было переведено в рубли: по курсу ЦБ или по рынку?
Сколько от этой суммы у меня реально останется после уплаты налогов и комиссий, если я продам весь портфель и выведу деньги?
Заходим в раздел Портфельная аналитика, и находим там уже другие значения:
Почему на главной странице было +955 644, а здесь почти на 2 миллиона больше?
Кстати, здесь уже можно посмотреть результаты за год, приложение выводит сумму, но не процент.
Пока всё выглядит весьма оптимистично, открываю профиль в Пульсе.
Вот это результат! Посмотрим по-подробнее.
Здесь приведены результаты по месяцам. За 4 месяца текущего года +6,67%, а если посмотреть на 2020 год, там у меня +31,41%. Для сравнения, если не ошибаюсь, S&P 500 за 2020 год вырос на 16,26%. Не совсем понимаю, как я мог его так обогнать, если только дело не в курсовой разнице. В любом случае, это не вяжется с обозначенными на главном экране +12,21% за всё время, т.к. 2019 и 2018 года тоже зелёные. В общем, не понятно, как и в какой валюте они считают, надо разбираться.
Поиск решения
Чтобы внести больше ясности в процесс инвестирования, сделать этот процесс более осознанным, мне нужно:
Разобраться, как вычисляются значения, отображаемые в мобильном приложении
Выяснить реальные показатели эффективности портфеля
Узнать общие суммы налога и комиссий, которые я уплатил за всё время
Вычислить сумму, которую я могу вывести со счёта, после уплаты налогов при продаже портфеля
Это особенно актуально в свете того, что портфель у меня, в основном, валютный, а налог считается в рублях относительно официального курса на день покупки актива. Поскольку я начал покупать бумаги несколько лет назад, когда USD был гораздо дешевле, налог при фиксации прибыли может оказаться огромным сюрпризом и съесть существенную часть отображаемой на главном экране суммы.
Собрать все возможные данные по портфелю и визуализировать их в удобной для меня форме, такой как таблица Excel, с которой я смогу дальше работать средствами самого Excel или Google Sheets.
Есть вариант пытать персонального менеджера и службу поддержки, но переписка с ними бывает утомительна, и они не помогут с визуализацией данных. Лучше написать программное средство, чтобы формировать результат в удобной для меня форме и делать это автоматически.
Проблема только в том, что я не программист и с банковскими API раньше не работал. Видимо, пришла пора попробовать.
Знакомство с API
Находим официальную страницу Open API от Тинькофф:
На странице предлагаются SDK: Java, C#, Go, NodeJS.
Приведены и неофициальные: Python @daxartio,Python @Awethon, Python @Fatal1ty, PHP, Ruby.
Ничего из того, что я умею. В основном, я делал DIY проекты на Arduino-подобных контроллерах с WiFi, проектировал и заказывал для своих электронных устройств печатные платы, делал небольшие одностраничные WEB-интерфейсы и телеграм-боты для взаимодействия с этими устройствами. Т.е., в основном я работал с железом и писал прошивки на Arduino Wiring (на основе C++).
Из представленного списка мне больше всего импонировал Python, я писал на нём что-то на уровне print(‘Hello World’) и давно хотел познакомиться поглубже. Поэтому, я решил, что буду делать проект с Тинькофф API на Python.
Это сильно помогло мне продвинуться на начальном этапе: понять, как получать данные с API.
Если коротко, работает это так:
Устанавливаем и настраиваем его на своей машине
Устанавливаем через PIP библиотеку tinvest
Открываем редактор кода, например Idle, импортируем установленную библиотеку:
Создаём объект для дальнейшей работы с API:
В my_token выше подставлем свой API key, который получаем в личном кабинете брокера.
Я не стал пробовать в демо-счёте, сразу указал API своего реального портфеля.
Создаём объект с позициями портфеля:
positions = client.get_portfolio() Это сложный массив, который содержит информацию по каждой бумаге.
Создаём объект с операциями. Здесь указывается дата начала инвестирования и текущая дата в определённом формате.
operations = client.get_operations(from_=account_data[‘start_date’], to=account_data[‘now_date’])
Получаем рыночные курсы валют (понадобятся для дальнейших расчётов):
course_usd = client.get_market_orderbook(figi=’BBG0013HGFT4′, depth=20
course_eur = client.get_market_orderbook(figi=’BBG0013HJJ31′, depth=20)
И чтобы в нашей будущей таблице появились не только бумаги, но и валюты кэшем, запросим и их тоже:
for pos in positions.payload.positions:
ecxelFileName = ‘tinkoffReport_’ + today + ‘.xlsx’
Так, на этом этапе, у меня получилась небольшая программка, создающая таблицу с базовой информацией по бумагам, получаемой по API, а именно:
Наименование, тикер, валюта бумаги, количество бумаг, средняя цена покупки, ожидаемая выручка.
Из имеющихся данных простой арифметикой высчитывались: текущая рыночная цена одного лота и суммарная стоимость всей позиции.
Писалось всё в Idle, выглядело как-то так: (НЕ ПОВТОРЯТЬ!)
НЕ ПОВТОРЯТЬ
Подглядывая в проекты других разработчиков на Python, я тогда ещё мало что понимал, но было очевидным, что их проекты пишутся совсем по-другому, и мне придётся менять структуру в корне.
Я решил переписать всё заново, как положено, и в более удобной среде разработки.
Знакомство с Python
В качестве более продвинутой среды, ребята с работы посоветовали PyCharm.
С ним дело пошло гораздо продуктивнее, среда автоматически дрессирует писать в соответствии с PEP8 (стандарт оформления кода).
Общие знания по Python я брал из своего любимого справочника: https://www.w3schools.com/
Просто прошерстил все его статьи по питону сверху вниз, и потом периодически обращался за подробностями.
Вообще, чисто субъективно, мне этот язык сразу понравился. Порадовала краткость путей решения задач. Сложилось впечатление, что если просто нужно, чтобы что-то заработало, оно здесь заработает в два счёта, без лишних заморочек. Гуглится всё элементарно, по крайней мере, на моём уровне сложности. Чаще всего, решения находил на https://stackoverflow.com/
Структура программы
Структура таблицы
— Позиции
В левой части таблицы выводится информация по текущему портфелю:
Параметры (базовые, из API):
Параметры, посчитанные на основе базовых:
Сразу после блока с рыночными ценами, располагается самый сложный, с точки зрения расчётов, блок: стоимость активов по ЦБ и расчёт ожидаемого налога при продаже.
Сложность в том, что бумага могла приобретаться частями, в разные дни, а могла частично продаваться. Здесь действует такое правило, что первой продаётся та бумага, которая первой покупалась.
Чтобы решить эту задачу, я придумал сделать для каждой позиции упорядоченный список (массив). Программа пробегает по всем операциям покупки, находя операции с figi данной бумаги, и каждая покупка добавляет в список количество ячеек, соответствующее количеству приобретённых бумаг. Каждая ячейка содержит значение, соответствующее цене покупки в рублях по курсу ЦБ на дату операции. А каждая продажа удаляет нужное количество ячеек из начала списка. Затем считается среднее значение по оставшимся ячейкам, так получается средняя цена покупки в рублях по курсу ЦБ.
Был небольшой подвох, связанный с тем, что в списке операций от Tinkoff API есть не только выполненные, но и нулевые операции, которые пришлось отсеивать.
Чтобы API ЦБ РФ не решил, что мы его ддосим, я поставил небольшую задержку. В итоге, всё считается как надо, но этот этап обрабатывается ощутимо медленно. Чтобы обработались мои 15 позиций и 430 операций, приходится ждать около 1 минуты.
Наверняка это можно как-то оптимизировать, но, в принципе, мы не торопимся.
Разобравшись с самым сложным этапом, можно составить следующие колоночки:
— Операции
Справа от раздела с позициями, выводим колоночки со всем типами операций, которые может нам предоставить Tinkoff API. Их много, на один скриншот не влезают, но на большом мониторе помещается:
Под каждой колоночкой считается сумма. Это как раз то, что нам не покажет брокер. И здесь есть кое-что интересное.
Теперь мы можем сравнить сумму внесённых средств и сумму выведенных (в переводе на рубли по курсу ЦБ)
Ещё можно посчитать сумму всех купонов и дивидендов, а также, внимание:
все комиссии, уплаченные брокеру, и все налоги, удержанные брокером!
Итак, вот мы получили и разложили перед глазами все имеющиеся данные.
Теперь можно сделать из них выводы.
— Аналитика
Я впихнул этот маленький раздел прямо под таблицей с позициями.
Кстати, что касается дат, я не учитывал часовые пояса, и это может где-то выплыть.
Кстати, из-за появления в портфеле позиции «Сегежа» в первый день после IPO программа не могла выполниться и выдавала ошибку. На следующий день по бумаге с API стали приходить нормальные данные и программа снова заработала.
Если что, форма W8BEN, у меня, на данный момент, по некоторым причинам, не действует.
Итого, в российский бюджет я уже уплатил 117 631 руб, и, как было посчитано выше, мне предстоит уплатить ещё порядка 207К, если я зафиксирую портфель сейчас.
В общем-то, это пока всё, что я сделал.
Заключение
Зато, мы разобрались, откуда получаются значения, приводимые в клиентском приложении.
Также, мы узнали суммы комиссий и налогов, как уплаченные, так и ожидаемые.
Нашли реальную сумму, которую сможем вывести со счёта при фиксации портфеля, после удержания налогов.
А главное: получили возможность одним кликом собирать все данные по портфелю со всеми операциями в одну большую таблицу Excel, с которой дальше можем работать средствами самого Excel, можем экспортировать в Google Sheets, или просто сохранить как архив для анализа в будущем.
Это мой первый проект на Python и первая публикация на Хабре.
Надеюсь, информация окажется полезной для улучшения взаимодействия с приложениями Тинькофф, работы с API и разработки подобных программ, а также поспособствует более осознанному инвестированию, а следовательно, повысит ваше благосостояние. Благодарю, что дочитали до конца.