python

Визуализация данных по акциям дивидендных аристократов США в формате веб-приложения

  • воскресенье, 13 декабря 2020 г. в 00:29:11
https://habr.com/ru/post/532622/
  • Разработка веб-сайтов
  • Python
  • Открытые данные
  • Визуализация данных
  • Финансы в IT


В этой статье я поделюсь некоторым опытом на простом примере. Мне повезло проработать в Банке в течение пяти лет в качестве руководителя направления, аналитика, математика, где-то программиста и т.п. Прямым текстом рассказывать о своей работе в Банке не могу, так как какие-то сведения могут быть конфиденциальными, а что-то рассказывать может быть просто неэтично или неправильно. Поэтому изложу свои взгляды и опыт на почти игрушечном примере.


Пример смотрите по ссылке https://www.emarkoff.com/dividend_aristocrats_sp500/




Постановка задачи


Представим себе, что перед Вами поставлена задача придумать некий веб-сервис, который будет помогать аналитику или менеджеру принимать решения. Это означает, что Вам потребуется доступ к данным, придется трансформировать данные в удобный для анализа вид и отображать в браузере. А теперь самый важный нюанс! Вы делаете всего-лишь прототип, и у Вас под рукой нет ни свободного дата-инженера, ни веб-программиста, ни математика знакомого с финансовой проблематикой. Это означает, что решения должны быть простыми и быстрыми. Цель такой работы — обкатать идею.


Пример, на котором я рассмотрю круг возникающих вопросов, это онлайн-визуализация для выбора акций дивидендных аристократов США. Представим, что предполагаемый пользователь — это начинающий частный инвестор (быть инвестором стало очень модным в последнее время). Зачем начинающему инвестору вдруг понадобились дивидендные аристократы? Предположим, что инвестор хочет получить определенный входящий денежный поток. Один из вариантов, когда может понадобиться входящий денежный поток — это оплата комиссии за бездействие у брокера (такая комиссия есть, например, у Interactive Brokers).


Первый вопрос, на который надо ответить, приступая к созданию прототипа: «А что именно нужно конечному пользователю?». Обратим внимание на то, что наш пользователь не опытный «спекулянт», а начинающий инвестор. Следовательно ему не имеет смысла подсовывать торговые терминалы и не стоит его погружать в миллион финансовых показателей. Отталкиваться лучше всего от конкретной задачи: «какие выбрать инструменты для получения гарантированного входящего денежного потока». Конечно здесь не один вариант. Из самого простого на ум приходят облигации, дивидендные акции, индексные фонды и т.п.


Здесь позволю себе как бы проскочить вопрос выбора типа инструмента. Будем считать, что инвестор начинающий, во многом принимает решения эмоционально, и его почему-то заклинило именно на акциях американских компаний. С точки зрения создания продуктов и сервисов это вполне себе маркетинговый подход. Если потребителю нужно, чтобы на странице сайта прыгали зеленые человечки, надо сделать так, чтобы на странице действительно прыгали и именно зелёные человечки.


Поиск решения


На самом деле веб-ресурсов, которые предоставляют доступ к данным, аналитику и прогнозы достаточно много. И кажется, что придумать ничего нового уже нельзя. Однако способов визуализации и форм предоставления контента можно придумать еще больше.


Есть конечно ресурсы, которые предлагают такое большое разнообразие настроек, что в них легко заблудиться. Но именно это и является их главным недостатком. Пытаясь удовлетворить всем возможным потребностям авторы создают настолько сложный в использовании инструмент, что часть посетителей просто напросто посмотрит и уйдет махнув рукой. В свою очередь более упорные начинающие инвесторы будут введены в заблуждение, думая, что им предоставлено очень много информации, а следовательно они сейчас все поймут и примут верное решение. Но, когда на экране одновременно десятки графиков, сотни цифр, да еще новостные ленты, непонятно куда смотреть, да и зачем.


Еще один очень важный момент. Как начинающий инвестор часто принимает решение об инвестировании в акцию конкретной компании? Есть несколько каналов получения информации: рассказал знакомый, услышал в новостях, увидел рекомендацию аналитиков в приложении брокера или прочитал на специализированном сайте. На следующем шаге, если инвестор наслышан про пользу фундаментального анализа, он переходит на соответствующие ресурсы, предоставляющие данные об основных финансовых показателях компаний и мультипликаторах, в том числе в динамике.


Можно ли сделать по описанной схеме оптимальный выбор? Конечно нет. На биржах одновременно вращаются тысячи разных акций и с чего это мы взяли, что наш практически случайный выбор самый лучший из возможных. Всегда ли выгодно покупать только самые популярные компании, о которых все говорят? Думаю, это вопрос риторический.


Плавно переходим к скринерам акций. А это как раз вышеупомянутые ресурсы с десятками графиков, тысячами цифр, а также миллионом вкладок и всевозможных настроек. И, что интересно, в независимости от цели инвестирования, отрасли и категории компании скринер показывает один и тот же порой впечатляющий набор показателей. На помощь к нам приходит множество образовательных блогов на Youtube, в социальных сетях и из просторов интернета. А почему бы не совместить два в одном? Знание + финансовые показатели и мультипликаторы = осознанный выбор.


Возьмем конкретную цель инвестирования и заранее выбранную категорию компаний. Наша цель — обеспечить себе гарантированный входящий поток для оплаты комиссий брокера за бездействие (отсутствие операций). Категория компаний — дивидендные аристократы входящие в индекс S&P 500.


Дивидендные аристократы выбраны в качестве цели инвестирования, так как такие компании стабильно увеличивают дивидендные выплаты как минимум в течение последних 25 лет. Эти компании обычно дорожат своим статусом, но вероятность внезапного прекращения или уменьшения выплат все же есть. В таком случае компания удаляется из перечня дивидендных аристократов.


И все было бы хорошо, если бы не одно но! Рост выплат дивидендов в абсолютном выражени автоматически не означает роста доходности или поддержания доходности акций на одном уровне. Дело в том, что доходность зависит еще от той цены, за которую вы купили акцию. Величина потенциальной дивидендной доходности прыгает вслед за котировками акций. И, принимая решение о покупке акций в текущем моменте надо всегда смотреть на данный показатель.


Самый простой способ инвестировать в дивидендных аристократов — это купить ETF на индекс «S&P 500 Dividend Aristocrats Index». Но, если мы играем в игру «обгони индекс», нам надо уметь отбирать из компаний дивидендных аристократов только наиболее доходные (с учетом текущей цены акций) и надежные компании. Вспомним, что мы говорим о начинающем инвесторе. Как же можно агрегировать информацию о надежности и доходности дивидендных акций на одном графике, чтобы помочь отобрать компании для инвестирования?


Найдено следующее решение. Показать на одном графике доходность и надежность акций. За показатель доходности берем форвардную годовую дивидендную доходность («forward annual dividend yield )», то есть тот годовой процент, на который инвестор может рассчитывать в будущем с учетом ежегодного роста дивидендов.


Способ оценки надежности компании или акции не так очевиден. Сразу существенно упростим себе задачу, и не будем говорить о вероятности падения или роста цены акций. Считаем, что инвестированные средства не будут нам нужны в течение достаточно длинного периода времени, чтобы мочь переждать кризис и связанное с ним резкое снижения цен на акции. Тогда нас больше интересует возможная потеря дивидендного дохода, банкротство компаний и похожие события.


Обратимся за помощью к рейтинговым агентствам. Оказывается, что надежность компаний интересует не только нас как инвесторов, но и Банки и другие кредитные организации, которые дают компаниям деньги в долг или покупают облигации. В таких случаях часто используют данные о кредитных рейтингах компаний. Детальный обзор видов рейтингов и рейтинговых агентств в рамки данного мини-проекта не входил. В качестве примера были взяты долгосрочные кредитные рейтинги в иностранной валюте всем известного рейтингового агентства Standard & Poor’s.


Еще один аспект, который желательно принять во внимание при выборке акций, это наша степень уверенности в том, что компания не прекратит выплачивать дивиденды. Само собой, что хороший кредитный рейтинг позволяет компании добирать кредиты в годы низкой прибыли и тем самым находить источник для выплаты дивидендов. Но так же важно знать, какая часть прибыли уже сейчас выплачивается в виде дивидендов, а какая реинвестируется. Информацию об этом нам дает коэффициент Payout Ratio, равный отношению годовой суммы выплаченных дивидендов к чистой прибыли.


В итоге в качестве способа визуализации был выбран scatter plot, на котором все компании входящие в группу дивидендных аристократов отображаются в виде маркеров, а по осям отложены значения Forward Annual Dividend Yield и Payout Ratio. График интерактивный и во всплывающей подсказке при наведении курсора на соответствующий маркер дает информацию о компании и ее рейтинге.


Создание веб-сервиса


Перейдем к обсуждению процесса создания веб-сервиса, так как это отдельная вселенная со своими законами и правилами игры.


Первое с чего следует начинать реализовывать техническую часть проекта — это выбор хостинга. В качестве хостинг-провайдера был выбран pythonanywhere.com , и сделано это было главным образом из-за того, что на pythonanywhere.com изначально припаркован весь мой сайт. Останавливаться подробно на этом пункте не буду. Краткое описание можно посмотреть здесь.


Следующим шагом на пути создания сервиса стал поиск источников данных. Понятно, что доступ к данным должен быть обеспечен в машинном формате и впоследствии полностью автоматизируется.


Если кому интересно, могу посоветовать зайти на маркетплейс веб-API https://rapidapi.com/ На маркетплейсе представлен широкий спектр разнообразных API разбитый на категории «news», «finance», «medical», «search» и т.д. Всего представлено более 40 категорий. Но большинство API условно бесплатные или полностью платные. Условно бесплатные API отличаются тем, что для свободного использования установлена месячная квота по общему числу запросов и ограничено количество запросов в единицу времени.


Второй вариант доступа к данным заключается в использовании специализированных библиотек. Back-end сервиса писался на python, поэтому в данном случае было полезно зайти в репозиторий пакетов https://pypi.org/ . На pypi.org имеется удобный фильтр по классификаторам «Filter by classifier». Далее выбираете тему «Financial» или «Investment». К примеру в репозитории можно найти библиотеку для доступа к данным Yahoo Finance под названием yfinance или библиотеку finvizlite 0.1.1. для доступа к скринеру акций finviz.com .


Третий вариант получить данные свободно публикуемые в интернете сводится к самостоятельному веб-скрейпингу. И, когда говорят о веб-скрейпинге на python, часто имеют в виду библиотеки BeautifulSoup и Selenium. Было выполнено небольшое тестирование этих библиотек, при котором вебскрейпинг запускался по расписанию с помощью встроенного сервиса pythonanywhere.


На этом пункте немного остановлюсь, поскольку есть очень важный момент, связанный с использованием билиотеки Selenium. В отличие от BeautifulSoup, когда в ответ на запрос к серверу загружается и парсится html-страница, при вызове Selenium должен быть запущен практически полноценный браузер. Такой веб-скрейпинг назвается динамическим, так как внутри браузера выполняется код JavaScript, динамически загружаются все данные, а доступ к элементам страницы осуществляется через объектную модель документа ( Document Object Model). Поэтому очень важно при выборе хостинга поинтересоваться, предусмотрена ли возможность запуска браузера из кода на python по умолчанию. Это сэкономит Вам часть времени и сил. Например, на pythonanywhere.com предусмоторен запуск виртуального дисплея Xvfb и поддержка веб-браузера Firefox.


И наконец, расскажу как же все-таки была организована работа с данными в рамках настоящего сервиса. Данные о рейтингах были однократно извлечены методом вебскрейпинга с сайта Standard & Poor’s.. Реализовывать автоматизированный запуск заданий с обновлением информации о списке дивидендных артистократов и их рейтингах не стал. Любое изменение html-разметки может привести к некорректному сбору данных. Следовательно, автоматизация все равно будет не полной и потребует технической поддержки в будущем.


Показатели Forward Annual Dividend Yield и Payout Ratio собираются с Yahoo Finance с помощью библиотеки yfinance. Значения этих показателей хранятся в виде обычного файла csv и автоматизированно обновляются один раз в час.


И напоследок хотел бы отметить еще один важный нюанс. Библиотека yfinance не является официальным API к Yahoo Finance. Следовательно, в любой момент на Yahoo Finance могут произойти изменения в html-разметке, формате и составе данных или собственном API, если таковое используется автором библиотеки yfinance, и никто никого предупреждать специально об этом не будет. А вы получите в лучшем случае ошибку, а в худшем — неадекватные данные. Автору же бесплатной библиотеки не позвонишь и не потребуешь у него срочно залатать неожиданно образовавшийся баг.