Giter Site home page Giter Site logo

tinkoff-bonds-analytics's Introduction

Что это

Репозиторий содержит скрипт для определения текущих показателей облигаций, доступных конкретному клиенту Тинькофф. Скрипт агрегирует данные из самого Тинькоффа, а также берет рейтинги из АКРА, НКР и НРА.

Что понадобится

  • Excel;
  • Библиотеки python из requirements.txt;
  • Личный кабинет в Тинькофф.Инвестиции;
  • Интернет.

Как пользоваться

  1. Выпустить собственный токен в Тинькофф.Инвестиции: https://tinkoff.github.io/investAPI/token/ ;
  2. Скачать репозиторий: git clone https://github.com/vovabush/tinkoff-bonds-analytics.git;
  3. Добавить в config.json выпущенный токен и подкорректировать остальные параметры;
  4. Проверить наличие Excel;

Далее можно воспользоваться bondsList.exe или:

  1. Установить необходимые библиотеки из requirements.txt: python -m pip install -r requirements.txt (возможно, понадобится https://visualstudio.microsoft.com/visual-cpp-build-tools/ );
  2. Запустить при помощи: python bondsList.py. Можно использовать ключ "-c", тогда в итоговой таблице не будут выведены облигации эмитентов, не имеющих рейтинговых оценок ни в одном из рейтинговых агентств: АРКА, НРА, НКР.

По окончанию работы откроется Excel файл, в котором два листа: с государственными и корпоративными облигациями. Данные на листах сортируются по доходности. 

На каждом листе располагаются следующие столбцы:

  • Имя: название инструмента;
  • Тикер: краткое название в биржевой информации инструмента;
  • Цена + НКД: текущая рыночная стоимость инструмента, учитывающая и рыночную цену, и накопленный купонный доход;
  • Годовая доходность: выражена в годовых процентах, вычисляемая как отношение суммы выплачиваемых за год купонов за вычетом налога к цене + НКД (не учитывает комиссию и разницу между рыночной стоимостью на момент покупки и ценой погашения): image;
  • Годовая доходность к погашению: выражена в годовых процентах, вычисляемая как отношение разницы всех поступивших средств до погашения за вычетом налога к цене + НКД с приведением к одному году: image;
  • Купонов в год: количество выплачиваемых купонов в год по инструменту;
  • Лет до погашения: количество лет до погашения инструмента эмитентом;
  • Дюрация: параметр, исходя из ожиданий по инфляции, подробнее см. тут: 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 - пример выходного файла.

Нюансы

  1. У Тинькоффа плохо работает backend на тему плавающих купонов, описание и запрос на исправление здесь: Tinkoff/invest-python#190 Дело было в неправильно воспринятой документации на API, будет исправлено в ближайшем обновлении.
  2. С радостью бы добавил рейтинг и из Тинькоффа, но у них и это не работает, описание и запрос на исправление здесь: Tinkoff/invest-python#189. Исправили. Необходимо обновить библиотеку Тинькофф до версии tinkoff-investments-0.2.0b50.
  3. Иногда АКРА начинает возмущаться количеству запросов к ней. В этом случае рекомендуется увеличить параметр API_DELAY в config.json.
  4. Флаги AMORTIZATION и FLOATING_COUPON добавлены на будущее и пока что не работают.
  5. В базе данных НРА почему-то бывают неправильные ИНН. Это приводит к тому, что некоторым компаниям могут быть приписаны не их рейтинги. Они об этом проинформированы, ожидаю ответа. В большинстве рейтинги соответствуют компаниям, но необходимость ручной проверки в случае сомнений не отменяется. Исправили.
  6. Рейтинг Тинькофф может не соответствовать тому, что написано в мобильном приложении. Проблема известна, описание и запрос на исправление здесь: Tinkoff/invest-python#204 В Issue описано, что возвращаемое API понятие "риска" и показываемое в приложение понятие "рейтинга" не одно и то же и часто обратно пропорциональны.

tinkoff-bonds-analytics's People

Contributors

vovabush avatar

Stargazers

 avatar  avatar Aleksandr Chugunenko avatar  avatar fedro avatar Ferrus avatar Sergey Nazarov avatar Kirill avatar  avatar Nikita Kozyrev avatar  avatar

Watchers

 avatar

Forkers

pyalien

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.