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

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

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

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


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

  1. Перейти на сайт Тинькоффа и выполнить вход в свой аккаунт.
  2. Убедиться, что функция «Подтверждение сделок кодом» отключена.
  3. Пролистать вниз страницы до пункта токен для OpenAPI и нажать на «Токен для торговли»
  4. Скопировать и сохранить токен. Он отображается только один раз, но можно выпускать неограниченное количество токенов.

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

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

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

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

  • getPrice() — получить текущую стоимость инструмента по тикеру
  • getTrades (ticker) — получить список всех операций по определенному инструменту. В скобках необходимо указать тикер инструмента, по которому надо увидеть список операций
  • getAllTrades() — получить список всех операций по всем инструментам. В скобках можно указать временной промежуток и посмотреть операции с определенного момента
  • getPortfolio() — получение текущего портфеля
  • getCurrencies() — получение валютных активов
  • getTradesIIS (ticker) — получить список всех операций по определенному инструменту (ИИС). В скобках необходимо указать тикер инструмента, по которому надо увидеть список операций
  • getAllTradesIIS() — получить список всех операций по всем инструментам (ИИС). В скобках можно указать временной промежуток и посмотреть операции с определенного момента
  • getIISPort() — получение текущего портфеля на ИИС
  • getCurrenciesIIS() — получение валютных активов на ИИС
  • getUSDval() — получить текущий курс доллара (по стакану)

После получения нужных данных Вы можете скопировать полученные значения и продолжить работу с ними на других листах или в другой таблице, в том числе и в Excel-e.


Пример работы функции getPortfolio для получения портфеля

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


По умолчанию Google не предоставляет инструмент для обновления пользовательских скриптов, поэтому пришлось воспользоваться решением сторонних разработчиков. Для того, чтобы иметь возможность обновлять данные по нажатию, при использовании функций в скобках нужно задавать ячейку $Z$1, в которую записывается текущая дата и время, что в дальнейшем используется для ручного обновления. Ниже я представлю фрагмент кода, который отвечает за обновление данных.

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet()
  var entries = [{
    name : "Обновить",
    functionName : "refresh"
  }]
  sheet.addMenu("TI", entries)
};

function refresh() {
  SpreadsheetApp.getActiveSpreadsheet().getRange('Z1').setValue(new Date().toTimeString());
}

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



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



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



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

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

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

Заключение


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

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

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 16

    +1

    Спасибо!
    А кто ещё из российских брокеров предоставляет подобное API?

      +1

      Если не секрет, зачем вам API других брокеров? Обычно, же используюется торговый терминал Quik, а он имеет возможность связи с екселем, поддержку LUA-скриптов и пр.

        0

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

          +1

          Потому что если я хочу запустить стратегию на питоне, сидя с убунты — я иду нафиг. Только c#, только windows. Брокеры будто застряли в нулевых. Один лишь тинькофф в этом смысле адекватный, но его апи настолько нестабильно, что торговать на нем реальными деньгами — не самая удачная затея.

            0
            Кстати говоря, C# уже давно не только на Windows.
              0

              Справедливости ради, торговали через АПИ брокеров еще до появления тинькова)
              Он не то что не не первый, но даже не среди первых по АПИ.
              Как я уже сказал ниже, большинство брокеров предоставляют АПИ, и гораздо более обширное, так что не очень понятно, в чем именно заключается его адекватность…
              У взрослых брокеров список API выглядит примерно вот так: Plaza 2, FIX, FAST/FIX, TWIME, Micex API (ASTS gateway).
              А у тинькв вот так: Rest.
              Т.е. его API построено на web технологиях для сайтов, а не на технологиях специально разработанных для торгов. Потому и стабильности там не будет никогда...

                0
                Вы с одной стороны правы, но алготрейдинг — это не только hft, зачастую прямой доступ на биржу не нужен (и зачастую нерентабелен, учитывая, что за него нужно платить по 6к в месяц или около того дополнительно). Для минутных или даже часовых интервалов http (+ws) с лихвой достаточно. Это реализовано на любой криптобирже с момента их запуска, но не сделано ни одним брокером лет так за двадцать. Хотя казалось бы — сделай нормальный интерфейс, чтобы выставлять заявки можно было хоть через curl, и комиссия за сделки от программистов-любителей польется рекой. Ан нет, не делают.

                А стабильность можно и «на web технологиях» получить, если делать нормально.
            0

            Да практически все предоставляют. Есть стандартный интерфейс API QUIK, через который и работает терминал QUICK и все на него обычно ориентируются при разработке софта. Есть конечно еще и другие стандарты, плаза и другие. Но они более редкие. Некторые брокеры, помимо QUIK, предоставляют свой собственный стандарт. Как тинькоф или ITI. Но, повторюсь, в 2020 году сложно будет найти брокера который не преодоставляет АПИ в каком-то виде.

            +1
            Чтобы не было таких ограничений:
            Важно! После вставки токена не удаляйте и не переименовывайте лист “Настройки”.

            можно сделать именованный диапазон, и обращаться из скрипта уже к нему. Из плюсов — можно переименовывать листы, добавлять строки и столбцы и т.п.
              0
              Бот в телеге было бы хорошо
                0
                Есть такой misterbuffett.ru — обновляет котировки в гугл-таблице по расписанию и отправляет сообщения с результатами.
                0

                Я было обрадовался, что больше не придётся копировать руками текущее состояние портфеля к себе в таблицу, но, к сожалению, у этого подхода обнаружился серьёзный недостаток. А именно, через API не предоставляется информация по инструментам, доступным только квалифицированным инвесторам. У меня значительная часть портфеля — это американские ETF, которых нет в ответе метода portfolio. Может быть, кто-то знает работающий способ получить состояние всего портфеля?

                  0

                  Отличный инструмент!!! Жаль, что только не показывает величину полученных купонов по облигациям.

                    0
                    Спасибо! Постараюсь в ближайшее время добавить
                      0
                      Подписался на Вас в GIThub
                      Будем ждать обновлений
                        0
                        Проверяйте, в разделе Операции улучшил отображение по купонам и частичному погашению облигаций

                  Only users with full accounts can post comments. Log in, please.