Список акций тинькофф в excel

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

Наверняка многие ведут учет сделок и следят за состоянием своего портфеля в Google-таблицах или в Excel. Раньше мне приходилось вручную вносить информацию о каждом купленном или проданном инструменте и это отнимало значительную часть моего времени. Тогда мне захотелось автоматизировать этот процесс и я начал искать способы реализации данной идеи.

Я обнаружил статью пользователя ErhoSen. Из неё я узнал, что брокер «Тинькофф Инвестиции» предлагает своим клиентам API для взаимодействия с брокерским счетом с индивидуально-инвестиционным счетом (ИИС). С его помощью можно получить список акций, валютных пар, узнать стоимость бумаги по тикеру, просмотреть список операций по счету, получить информацию о своем портфеле и т.д. Однако, мне не хватило существующего функционала скрипта и я решил дописать его, добавив туда свои функции.

Получение токена

Работа с API происходит через токен. Процесс получения токена описан в документации на GitHub’е. Для его получения нужно:

Вставьте свой токен в ячейку B1 в листе «Настройки».

Важно! После вставки токена не удаляйте и не переименовывайте лист “Настройки”. Если в ячейке B3 появится текущий курс доллара — поздравляем, все готово к работе.

Основные функции скрипта:

Список акций тинькофф в excel
Пример работы функции getPortfolio для получения портфеля

Ручное обновление данных

Сначала нужно нажать на кнопку Обновить в подменю TI (появится справа от вкладки Справка).
После этого появится окно с предупреждением:

Список акций тинькофф в excel

Нажимаем Продолжить. Далее появится еще одно предупреждающее окно, где нужно будет нажать на Дополнительные настройки и в раскрывшемся поле выбрать Перейти на страницу «Tinkoff Invest» (небезопасно):

Список акций тинькофф в excel

Данные действия необходимо выполнять потому, что скрипт для изменения значения ячейки Z1 должен сначала получить доступ к текущей таблице, чтобы он исполнялся только в ней. После этого у нас есть возможность по запросу обновить данные в таблице. Пример ручного обновления для функции getPrice(«AMD»;$Z$1):

Список акций тинькофф в excel

ВНИМАНИЕ! У разработчика данного скрипта не будет доступа к Вашему Google-аккаунту, к списку таблиц на Диске или к токену. Если Вы опасаетесь за сохранность своих данных, то можете скопировать мой скрипт и вставить его в свою таблицу. Для этого в Google Sheets откройте свою таблицу и в верхнем меню нажмите на Инструменты, а затем на Редактор скриптов.

У вас откроется среда для создания скриптов Google. Сотрите в окне код, расположенный по умолчанию, скопируйте код по ссылке и вставьте его в окно.

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

Заключение

Хочу выразить благодарность ErhoSen за его статью и исходный код, который был доработан мною.

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

Источник

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

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

Описание проблемы

Рассмотрю на примере своего портфеля (не ИИС) в мобильном приложении. (С даты публикации приложение может обновиться).

На главном экране видим ободряющие значения:

Список акций тинькофф в excel

У меня здесь сразу возникают вопросы:

Каким образом была посчитана эта зелёная сумма и 12,21%? Причём, несколько дней назад у меня было что-то около +17%, потом я зафиксировал одну бумагу с профитом, стоимость портфеля почти не изменилась, а вот этот зелёный «общий процент» сразу упал до 12,21.

Мой портфель почти полностью в иностранных бумагах и USD. Каким образом это было переведено в рубли: по курсу ЦБ или по рынку?

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

Заходим в раздел Портфельная аналитика, и находим там уже другие значения:

Список акций тинькофф в excel

Почему на главной странице было +955 644, а здесь почти на 2 миллиона больше?

Кстати, здесь уже можно посмотреть результаты за год, приложение выводит сумму, но не процент.

Пока всё выглядит весьма оптимистично, открываю профиль в Пульсе.

Список акций тинькофф в excel

Вот это результат! Посмотрим по-подробнее.

Список акций тинькофф в excel

Здесь приведены результаты по месяцам. За 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, выглядело как-то так: (НЕ ПОВТОРЯТЬ!)

Список акций тинькофф в excelНЕ ПОВТОРЯТЬ

Подглядывая в проекты других разработчиков на Python, я тогда ещё мало что понимал, но было очевидным, что их проекты пишутся совсем по-другому, и мне придётся менять структуру в корне.

Я решил переписать всё заново, как положено, и в более удобной среде разработки.

Знакомство с Python

В качестве более продвинутой среды, ребята с работы посоветовали PyCharm.

С ним дело пошло гораздо продуктивнее, среда автоматически дрессирует писать в соответствии с PEP8 (стандарт оформления кода).

Общие знания по Python я брал из своего любимого справочника: https://www.w3schools.com/

Просто прошерстил все его статьи по питону сверху вниз, и потом периодически обращался за подробностями.

Вообще, чисто субъективно, мне этот язык сразу понравился. Порадовала краткость путей решения задач. Сложилось впечатление, что если просто нужно, чтобы что-то заработало, оно здесь заработает в два счёта, без лишних заморочек. Гуглится всё элементарно, по крайней мере, на моём уровне сложности. Чаще всего, решения находил на https://stackoverflow.com/

Структура программы

Список акций тинькофф в excel

Список акций тинькофф в excel

Список акций тинькофф в excel

Структура таблицы

— Позиции

В левой части таблицы выводится информация по текущему портфелю:

Список акций тинькофф в excel

Параметры (базовые, из API):

Параметры, посчитанные на основе базовых:

Сразу после блока с рыночными ценами, располагается самый сложный, с точки зрения расчётов, блок: стоимость активов по ЦБ и расчёт ожидаемого налога при продаже.

Список акций тинькофф в excel

Сложность в том, что бумага могла приобретаться частями, в разные дни, а могла частично продаваться. Здесь действует такое правило, что первой продаётся та бумага, которая первой покупалась.

Чтобы решить эту задачу, я придумал сделать для каждой позиции упорядоченный список (массив). Программа пробегает по всем операциям покупки, находя операции с figi данной бумаги, и каждая покупка добавляет в список количество ячеек, соответствующее количеству приобретённых бумаг. Каждая ячейка содержит значение, соответствующее цене покупки в рублях по курсу ЦБ на дату операции. А каждая продажа удаляет нужное количество ячеек из начала списка. Затем считается среднее значение по оставшимся ячейкам, так получается средняя цена покупки в рублях по курсу ЦБ.

Список акций тинькофф в excel

Был небольшой подвох, связанный с тем, что в списке операций от Tinkoff API есть не только выполненные, но и нулевые операции, которые пришлось отсеивать.

Чтобы API ЦБ РФ не решил, что мы его ддосим, я поставил небольшую задержку. В итоге, всё считается как надо, но этот этап обрабатывается ощутимо медленно. Чтобы обработались мои 15 позиций и 430 операций, приходится ждать около 1 минуты.

Список акций тинькофф в excel

Наверняка это можно как-то оптимизировать, но, в принципе, мы не торопимся.

Разобравшись с самым сложным этапом, можно составить следующие колоночки:

— Операции

Справа от раздела с позициями, выводим колоночки со всем типами операций, которые может нам предоставить Tinkoff API. Их много, на один скриншот не влезают, но на большом мониторе помещается:

Список акций тинькофф в excel

Под каждой колоночкой считается сумма. Это как раз то, что нам не покажет брокер. И здесь есть кое-что интересное.

Список акций тинькофф в excel

Теперь мы можем сравнить сумму внесённых средств и сумму выведенных (в переводе на рубли по курсу ЦБ)

Ещё можно посчитать сумму всех купонов и дивидендов, а также, внимание:

все комиссии, уплаченные брокеру, и все налоги, удержанные брокером!

Список акций тинькофф в excel Список акций тинькофф в excel

Итак, вот мы получили и разложили перед глазами все имеющиеся данные.

Теперь можно сделать из них выводы.

— Аналитика

Я впихнул этот маленький раздел прямо под таблицей с позициями.

Список акций тинькофф в excel

Кстати, что касается дат, я не учитывал часовые пояса, и это может где-то выплыть.

Кстати, из-за появления в портфеле позиции «Сегежа» в первый день после IPO программа не могла выполниться и выдавала ошибку. На следующий день по бумаге с API стали приходить нормальные данные и программа снова заработала.

Если что, форма W8BEN, у меня, на данный момент, по некоторым причинам, не действует.

Итого, в российский бюджет я уже уплатил 117 631 руб, и, как было посчитано выше, мне предстоит уплатить ещё порядка 207К, если я зафиксирую портфель сейчас.

В общем-то, это пока всё, что я сделал.

Заключение

Зато, мы разобрались, откуда получаются значения, приводимые в клиентском приложении.

Также, мы узнали суммы комиссий и налогов, как уплаченные, так и ожидаемые.

Нашли реальную сумму, которую сможем вывести со счёта при фиксации портфеля, после удержания налогов.

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

Список акций тинькофф в excel

Это мой первый проект на Python и первая публикация на Хабре.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *