Репозиторий содержит скрипт для определения текущих показателей облигаций, доступных конкретному клиенту Тинькофф. Скрипт агрегирует данные из самого Тинькоффа, а также берет рейтинги из АКРА, НКР и НРА.
- Excel;
- Библиотеки python из requirements.txt;
- Личный кабинет в Тинькофф.Инвестиции;
- Интернет.
- Выпустить собственный токен в Тинькофф.Инвестиции: https://tinkoff.github.io/investAPI/token/ ;
- Скачать репозиторий:
git clone https://github.com/vovabush/tinkoff-bonds-analytics.git
; - Добавить в config.json выпущенный токен и подкорректировать остальные параметры;
- Проверить наличие Excel;
Далее можно воспользоваться bondsList.exe или:
- Установить необходимые библиотеки из requirements.txt:
python -m pip install -r requirements.txt
(возможно, понадобится https://visualstudio.microsoft.com/visual-cpp-build-tools/ ); - Запустить при помощи:
python bondsList.py
. Можно использовать ключ "-c", тогда в итоговой таблице не будут выведены облигации эмитентов, не имеющих рейтинговых оценок ни в одном из рейтинговых агентств: АРКА, НРА, НКР.
По окончанию работы откроется Excel файл, в котором два листа: с государственными и корпоративными облигациями. Данные на листах сортируются по доходности.
На каждом листе располагаются следующие столбцы:
- Имя: название инструмента;
- Тикер: краткое название в биржевой информации инструмента;
- Цена + НКД: текущая рыночная стоимость инструмента, учитывающая и рыночную цену, и накопленный купонный доход;
- Годовая доходность: выражена в годовых процентах, вычисляемая как отношение суммы выплачиваемых за год купонов за вычетом налога к цене + НКД (не учитывает комиссию и разницу между рыночной стоимостью на момент покупки и ценой погашения): ;
- Годовая доходность к погашению: выражена в годовых процентах, вычисляемая как отношение разницы всех поступивших средств до погашения за вычетом налога к цене + НКД с приведением к одному году: ;
- Купонов в год: количество выплачиваемых купонов в год по инструменту;
- Лет до погашения: количество лет до погашения инструмента эмитентом;
- Дюрация: параметр, исходя из ожиданий по инфляции, подробнее см. тут: https://smart-lab.ru/blog/703874.php ;
- Рейтинг (АКРА): текущий рейтинг инструмента по данным АКРА.
- Рейтинг (НРА): текущий рейтинг инструмента по данным НРА.
- Рейтинг (НКР): текущий рейтинг инструмента по данным НКР.
- Риск (Тинькофф): текущий уровень риска инструмента по данным Тинькофф Инвестиции:
- 0 - Риск не определялся;
- 1 - Низкий уровень риска;
- 2 - Средний уровень риска;
- 3 - Высокий уровень риска.
- Сектор: сектор экономики эмитента корпоративных облигаций.
- bondsList.py - главный скрипт;
- config.json - файл конфигурации, который содержит следующие поля:
- TOKEN - персонализированный токен, выпустить и почитать о котором можно здесь: https://tinkoff.github.io/investAPI/token/ ;
- API_DELAY - задержка в секунда между запросами. Тинькофф ограничивает в 100-300 запросов в минуту, соответственно этот параметр в пределах 0.2 - 0.5, но на практике может потребоваться использовать значения от 2 до 5;
- EXCEL_TABLE_NAME - имя выходного Excel файла;
- FOR_QUAL_INVESTOR - флаг, включать ли облигации для квалифицированных инвесторов:
- True - включать,
- False - не включать;
- AMORTIZATION - флаг, включать ли облигации с амортизацией:
- True - включать,
- False - не включать;
- FLOATING_COUPON - флаг, включать ли облигации с плавающим купоном (1):
- True - включать,
- False - не включать;
- requirements.txt - набор дополнительных библиотек для установки перед запуском;
- Readme.md - это я;
- bonds.xlsx - пример выходного файла.
У Тинькоффа плохо работает backend на тему плавающих купонов, описание и запрос на исправление здесь: Tinkoff/invest-python#190Дело было в неправильно воспринятой документации на API, будет исправлено в ближайшем обновлении.С радостью бы добавил рейтинг и из Тинькоффа, но у них и это не работает, описание и запрос на исправление здесь: Tinkoff/invest-python#189. Исправили. Необходимо обновить библиотеку Тинькофф до версииtinkoff-investments-0.2.0b50
.- Иногда АКРА начинает возмущаться количеству запросов к ней. В этом случае рекомендуется увеличить параметр API_DELAY в config.json.
- Флаги AMORTIZATION и FLOATING_COUPON добавлены на будущее и пока что не работают.
В базе данных НРА почему-то бывают неправильные ИНН. Это приводит к тому, что некоторым компаниям могут быть приписаны не их рейтинги. Они об этом проинформированы, ожидаю ответа. В большинстве рейтинги соответствуют компаниям, но необходимость ручной проверки в случае сомнений не отменяется.Исправили.Рейтинг Тинькофф может не соответствовать тому, что написано в мобильном приложении. Проблема известна, описание и запрос на исправление здесь: Tinkoff/invest-python#204В Issue описано, что возвращаемое API понятие "риска" и показываемое в приложение понятие "рейтинга" не одно и то же и часто обратно пропорциональны.