Наверняка многие ведут учет сделок и следят за состоянием своего портфеля в Google-таблицах или в Excel. Раньше мне приходилось вручную вносить информацию о каждом купленном или проданном инструменте и это отнимало значительную часть моего времени. Тогда мне захотелось автоматизировать этот процесс и я начал искать способы реализации данной идеи.
Я обнаружил статью пользователя ErhoSen. Из неё я узнал, что брокер «Тинькофф Инвестиции» предлагает своим клиентам API для взаимодействия с брокерским счетом с индивидуально-инвестиционным счетом (ИИС). С его помощью можно получить список акций, валютных пар, узнать стоимость бумаги по тикеру, просмотреть список операций по счету, получить информацию о своем портфеле и т.д. Однако, мне не хватило существующего функционала скрипта и я решил дописать его, добавив туда свои функции.
Работа с API происходит через токен. Процесс получения токена описан в документации на GitHub’е. Для его получения нужно:
После получения токена можно приступить к работе с таблицей. Перейдите по ссылке и скопируйте к себе таблицу, в которой будете вести учёт.
Вставьте свой токен в ячейку B1 в листе «Настройки».
Важно! После вставки токена не удаляйте и не переименовывайте лист “Настройки”. Если в ячейке B3 появится текущий курс доллара — поздравляем, все готово к работе.
Основные функции скрипта:
После получения нужных данных Вы можете скопировать полученные значения и продолжить работу с ними на других листах или в другой таблице, в том числе и в Excel-e.
Пример работы функции getPortfolio для получения портфеля
По умолчанию Google не предоставляет инструмент для обновления пользовательских скриптов, поэтому пришлось воспользоваться решением сторонних разработчиков. Для того, чтобы иметь возможность обновлять данные по нажатию, при использовании функций в скобках нужно задавать ячейку $Z$1, в которую записывается текущая дата и время, что в дальнейшем используется для ручного обновления. Ниже я представлю фрагмент кода, который отвечает за обновление данных.
Сначала нужно нажать на кнопку Обновить в подменю TI (появится справа от вкладки Справка).
После этого появится окно с предупреждением:
Нажимаем Продолжить. Далее появится еще одно предупреждающее окно, где нужно будет нажать на Дополнительные настройки и в раскрывшемся поле выбрать Перейти на страницу «Tinkoff Invest» (небезопасно):
Данные действия необходимо выполнять потому, что скрипт для изменения значения ячейки Z1 должен сначала получить доступ к текущей таблице, чтобы он исполнялся только в ней. После этого у нас есть возможность по запросу обновить данные в таблице. Пример ручного обновления для функции getPrice(«AMD»;$Z$1):
ВНИМАНИЕ! У разработчика данного скрипта не будет доступа к Вашему Google-аккаунту, к списку таблиц на Диске или к токену. Если Вы опасаетесь за сохранность своих данных, то можете скопировать мой скрипт и вставить его в свою таблицу. Для этого в Google Sheets откройте свою таблицу и в верхнем меню нажмите на Инструменты, а затем на Редактор скриптов.
У вас откроется среда для создания скриптов Google. Сотрите в окне код, расположенный по умолчанию, скопируйте код по ссылке и вставьте его в окно.
После этого сохраните скрипт, задав любое название проекту и самому скрипту. Затем перейдите обратно в таблицу, создайте лист “Настройки” и в ячейку В1 вставьте свой токен для OpenAPI. После этого Вы можете работать с таблицей.
Хочу выразить благодарность ErhoSen за его статью и исходный код, который был доработан мною.
Также для личного пользования я создал Telegram бота, в планах на будущее довести эту идею до ума, если идея найдет отклик. Бот удобен в случаях, когда не хочется терять время на вход в приложение Тинькофф Инвестиции, кто часто сидит за ноутбуком и не хочет постоянно авторизовываться на сайте, или же для хранения истории изменений содержимого портфеля.
Я обнаружил статью пользователя ErhoSen. Из неё я узнал, что брокер «Тинькофф Инвестиции» предлагает своим клиентам API для взаимодействия с брокерским счетом с индивидуально-инвестиционным счетом (ИИС). С его помощью можно получить список акций, валютных пар, узнать стоимость бумаги по тикеру, просмотреть список операций по счету, получить информацию о своем портфеле и т.д. Однако, мне не хватило существующего функционала скрипта и я решил дописать его, добавив туда свои функции.
Получение токена
Работа с API происходит через токен. Процесс получения токена описан в документации на GitHub’е. Для его получения нужно:
- Перейти на сайт Тинькоффа и выполнить вход в свой аккаунт.
- Убедиться, что функция «Подтверждение сделок кодом» отключена.
- Пролистать вниз страницы до пункта токен для OpenAPI и нажать на «Токен для торговли»
- Скопировать и сохранить токен. Он отображается только один раз, но можно выпускать неограниченное количество токенов.
После получения токена можно приступить к работе с таблицей. Перейдите по ссылке и скопируйте к себе таблицу, в которой будете вести учёт.
Вставьте свой токен в ячейку 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 бота, в планах на будущее довести эту идею до ума, если идея найдет отклик. Бот удобен в случаях, когда не хочется терять время на вход в приложение Тинькофф Инвестиции, кто часто сидит за ноутбуком и не хочет постоянно авторизовываться на сайте, или же для хранения истории изменений содержимого портфеля.
empenoso
Спасибо!
А кто ещё из российских брокеров предоставляет подобное API?
NAI
Если не секрет, зачем вам API других брокеров? Обычно, же используюется торговый терминал Quik, а он имеет возможность связи с екселем, поддержку LUA-скриптов и пр.
empenoso
Любая связка через квик очень громоздкая, а я бы хотел просто получать в режиме read only свои позиции через api.
Kroid
Потому что если я хочу запустить стратегию на питоне, сидя с убунты — я иду нафиг. Только c#, только windows. Брокеры будто застряли в нулевых. Один лишь тинькофф в этом смысле адекватный, но его апи настолько нестабильно, что торговать на нем реальными деньгами — не самая удачная затея.
Apollon_Diamed
Кстати говоря, C# уже давно не только на Windows.
solver
Справедливости ради, торговали через АПИ брокеров еще до появления тинькова)
Он не то что не не первый, но даже не среди первых по АПИ.
Как я уже сказал ниже, большинство брокеров предоставляют АПИ, и гораздо более обширное, так что не очень понятно, в чем именно заключается его адекватность…
У взрослых брокеров список API выглядит примерно вот так: Plaza 2, FIX, FAST/FIX, TWIME, Micex API (ASTS gateway).
А у тинькв вот так: Rest.
Т.е. его API построено на web технологиях для сайтов, а не на технологиях специально разработанных для торгов. Потому и стабильности там не будет никогда...
Kroid
Вы с одной стороны правы, но алготрейдинг — это не только hft, зачастую прямой доступ на биржу не нужен (и зачастую нерентабелен, учитывая, что за него нужно платить по 6к в месяц или около того дополнительно). Для минутных или даже часовых интервалов http (+ws) с лихвой достаточно. Это реализовано на любой криптобирже с момента их запуска, но не сделано ни одним брокером лет так за двадцать. Хотя казалось бы — сделай нормальный интерфейс, чтобы выставлять заявки можно было хоть через curl, и комиссия за сделки от программистов-любителей польется рекой. Ан нет, не делают.
А стабильность можно и «на web технологиях» получить, если делать нормально.
solver
Да практически все предоставляют. Есть стандартный интерфейс API QUIK, через который и работает терминал QUICK и все на него обычно ориентируются при разработке софта. Есть конечно еще и другие стандарты, плаза и другие. Но они более редкие. Некторые брокеры, помимо QUIK, предоставляют свой собственный стандарт. Как тинькоф или ITI. Но, повторюсь, в 2020 году сложно будет найти брокера который не преодоставляет АПИ в каком-то виде.