Предлагаю вашему вниманию небольшой консольный Ruby-клиент для доступа к брокерскому аккаунту Тинькофф Инвестиции. На данный момент это очень ранняя пре-альфа-версия, реализовано только отображение портфолио. Цель проекта — сделать удобный консольный клиент для контроля своих активов, дополняющий официальное мобильное приложение Инвестиции.
Требования:
- установленный Ruby 2.7.1 и новее
- наличие токена Tinkoff OpenAPI
$ bundle
$ echo TINKOFF_OPENAPI_TOKEN=ваш_токен > .env.local
$ bin/portfolio
$ bin/wallet
$ bin/console
Вывод подробной таблицы портфеля со всеми позициями на вашем брокерском аккаунте.
$ bin/portfolio
Type
— тип актива.STOCK
— акции.BOND
— облигации.ETF
— инвестиционный фонд.
Name
— название актива.Amount
— количество в штуках или сумма в валюте.Avg. buy
— средняя цена покупки актива. Показатель берётся напрямую из OpenAPI. Например: если вы купили 2 акции за 10 и 20 рублей, то средняя цена покупки будет 15 рублей. От этой стоимости и текущей цены считается ожидаемый доход.Current price
— текущая цена актива. Не отдаётся напрямую из OpenAPI, поэтому программа вычисляет цену по формуле:((balance * avg_buy_price) + expected_yield) / balance
. Возможно небольшое отличие от тикеров на сервере брокера.Yield
— ожидаемый доход в валюте. Показатель берётся напрямую из OpenAPI.Yield %
— ожидаемый доход в процентах. Не отдаётся напрямую из OpenAPI, поэтому программа вычисляет процент по формуле:expected_yield / (avg_buy_price * balance) * 100
.
Показывает, сколько и какой валюты доступно вам для инвестирования.
$ bin/wallet
Консоль для удобной отладки и тестирования программы.
$ bin/console
Внутри консоли доступны для вызова публичные методы модуля Tinky
:
pry(Tinky)> portfolio
pry(Tinky)> wallet
pry(Tinky)> exchange_rates(positions)
pry(Tinky)> total_amount(positions)
Если на вашей системе не установлено Ruby-окружение и вы не хотите засирать им систему — используйте готовый Docker-образ. Локально потребуется только установить env-переменную с токеном.
- Если хотите каждый раз передавать токен из локального окружения в контейнер (лучший способ):
$ docker run --rm -e TINKOFF_OPENAPI_TOKEN -t foxweb/tinkyclient
- Если вы храните токен в
.env.local
(не рекомендую, можно случайно его опубликовать или украсть):
$ docker run --rm --env-file .env.local -t foxweb/tinkyclient
- Если хотите каждый раз передавать токен через CLI в контейнер (не рекомендую, так как токен сохранится в history и логах):
$ docker run --rm -e TINKOFF_OPENAPI_TOKEN=ваш_токен -t foxweb/tinkyclient
Если вы хотите вывести портфолио в отдельное окно, чтобы оно при этом автоматически обновлялось, попробуйте команду:
$ watch bin/portfolio
В зависимости от системы, watch
надо устанавливать отдельно. Однако, на macOS вывод работает некорректно. Я устанавливал через brew install watch
. Оказалось, что она некорректно показывает символы валют и убирает цвет. Пользователи также сообщали, что табличная вёрстка ломается.
В качестве альтернативы используйте такую команду:
$ while sleep 2; do bin/portfolio > /tmp/portfolio; clear; cat /tmp/portfolio; done
- Используя этот проект, никакие персональные данные НЕ ПЕРЕДАЮТСЯ никаким третьим лицам скрыто или явно.
- Использование этого проекта не требует от пользователя никаких логинов, паролей, номеров телефона и других персональных данных.
- Для доступа к вашем брокерскому счёту вы используете только ваш персональный токен из личного кабинета Тинькофф Инвестиций.
- Этот токен вы генерируете самостоятельно.
- Для нормальной работы этой программы вы самостоятельно записываете токен в текстовый файл, который сохраняется только на вашем устройстве.
- Вы можете в любой момент отозвать (деактивировать) свой токен, если у вас возникнут подозрения в компрометации.
MIT License. Используйте как хотите и где хотите на свой страх и риск.
Автор ничего не гарантирует и не отвечает ни за какие финансовые потери и риски пользователя, связанные с использованием этой программы. Программа разработана в образовательных целях, для обучения программированию и изучения языка Ruby. Несмотря на это, используя эту программу, вы можете как потерять, так приобрести реальные денежные средства.