Наверняка многие ведут учет сделок и следят за состоянием своего портфеля в 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 бота, в планах на будущее довести эту идею до ума, если идея найдет отклик. Бот удобен в случаях, когда не хочется терять время на вход в приложение Тинькофф Инвестиции, кто часто сидит за ноутбуком и не хочет постоянно авторизовываться на сайте, или же для хранения истории изменений содержимого портфеля.