Python для анализа рынка ценных бумаг

За последние 2 года количество участников фондового рынка в России по данным Московской биржи выросло в 5 раз (с 3 до 15 миллионов человек). При этом количество активных клиентов (совершающих как минимум одну сделку в месяц) возросло в 8 раз. Такие показатели говорят о том, что помимо возросшей активности клиентов на фондовом рынке, так же возрастает и количество задач которые нужно решать аудиторам.

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

Для решения подобной задач хорошо подойдет библиотека от компании yahoo.

Установка

Для начала работы нам необходимо импортировать библиотеку:

import yfinance as yf

Основной функцией данной библиотеки является «Ticker» — функция позволяет получить всю основную информацию по любому тикеру (краткое название в биржевой информации котируемых инструментов, является уникальным идентификатором в рамках одной биржи или информационной системы). Для получения корректной информации, нужно правильно понимать, как передаются входные параметры в данной библиотеке. Например, для получения информации по акциям российского рынка, необходимо к тикеру добавлять постфикс «.ME»

Базовые функции

Для примера загрузим основную информацию по компании Яндекс:

YNDX = yf.Ticker("YNDX.ME") YNDX.info

Вывод:

{'zip': '1118 BG', 'sector': 'Communication Services', 'fullTimeEmployees': 17206, 'longBusinessSummary': --подробная информация о компании--', 'city': 'Schiphol', 'phone': '31 20 206 6970', 'country': 'Netherlands', 'companyOfficers': [], 'website': 'http://ir.yandex.com', 'maxAge': 1, 'address1': 'Schiphol Boulevard 165', 'fax': '31 20 446 6372', 'industry': 'Internet Content & Information', 'ebitdaMargins': 0.1071, 'profitMargins': -0.02875, 'grossMargins': 0.5182300000000001, 'operatingCashflow': 12028000256, 'revenueGrowth': 0.5650000000000001, 'operatingMargins': -0.018860001, 'ebitda': 33997000704, 'targetLowPrice': None, 'recommendationKey': 'none', 'grossProfits': 132610000000, 'freeCashflow': 58725625856, . . . 'fiveYearAvgDividendYield': None, 'fiftyTwoWeekLow': 4510, 'bid': 5889.6, 'tradeable': False, 'dividendYield': None, 'bidSize': 1600, 'dayHigh': 5920, 'regularMarketPrice': 5890, 'logo_url': 'https://logo.clearbit.com/ir.yandex.com'}

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

YNDX.history(period="max")

Позволяет вывести все исторические значения стоимости, как за весь период, так и за отдельно взятый срок если настроить это в параметрах функции.

Out[5]:

1863 rows × 7 columns
1863 rows × 7 columns

Эти данные можно очень легко визуализировать для наглядности

import matplotlib.pyplot as plt data = yf.download("YNDX.ME",'2014-06-04','2021-11-02') data['Adj Close'].plot() plt.figure(figsize=(10, 10)) plt.show()
Python для анализа рынка ценных бумаг

Дивиденды

Важно учитывать правильно те значения, которые выводят функции, к примеру дивиденды тут отображаются не в процентах, а в сумме на одну акцию в валюте акции

yf.Ticker('YNDX.ME').dividends.loc['01.01.2020':'01.01.2021'] Out[32]: Series([], Name: Dividends, dtype: int64)

Но при выводе мы, почему-то не получаем информации. Все дело в том, что яндекс относится к тем компаниям, которые не выплачивают дивидендов. Меняем тикер и видим, что функция прекрасно работает:

yf.Ticker('GAZP.ME').dividends.loc['01.01.2020':'01.01.2021'] Out[39]: Date 2020-07-15 15.24 Name: Dividends, dtype: float64

Отчетность

YNDX.financials, YNDX.quarterly_financials

Годовые или квартальные финансовые отчеты. С помощью параметров можно выбрать конкретный год и параметр.

YNDX.major_holders,YNDX.institutional_holders

Информация о владельцах в процентном соотношении

YNDX.recommendations

Рекомендации от крупных игроков рынка по данному тикеру.

73 rows × 4 columns
73 rows × 4 columns

Решение поставленной задачи

У нас имеется файл с информацией по начислению дивидендов по брокерским счетам за год в разрезе определенного перечня компаний. Нам необходимо проверить корректность зачисления дивидендов по каждому счету.

Загружаем имеющиеся данные

div = pd.read_csv('./div.csv',sep=';',engine='python')

Структура входного файла:

Python для анализа рынка ценных бумаг

С помощью библиотеки выгружаем данные по дивидендам компаний из списка за период 2021 год.

data = pd.DataFrame() start = '2021-01-01' end = '2021-12-31' for u in range(len(div["tic"])): series = yf.Ticker(div["tic"][u]).dividends.loc[start:end] data = pd.concat([data, series], axis=1) data.columns = div["tic"] print(data)

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

tic SBER.me SNGS.me RTKM.me PIKK.me DSKY.me 2021-05-11 00:00:00 18.7 NaN NaN NaN NaN 2021-05-14 00:00:00 NaN NaN NaN 45.43 NaN 2021-07-08 00:00:00 NaN NaN NaN NaN 6.07 2021-07-09 00:00:00 NaN NaN 5.0 NaN NaN 2021-07-19 00:00:00 NaN 0.7 NaN NaN NaN

Важно понимать для анализа, что цифры, которые выдает скрипт по данному запросу – это суммарное количество денег (в валюте в которой торгуется акция) за день в который выплачиваются дивиденды.

Далее создаем цикл проверки корректности начисления дивидендов по конкретным счетам и выводим все случаи не корректного начисления

data = data.fillna(0) for u in range(len(div["acc"])): if data[div.iloc[u]['tic']][div.iloc[u]['date']] != div.iloc[u]['rate']: print(div.iloc[u]['acc'] +' '+ div.iloc[u]['date'] + ' некорректное начисление ' ) out: счет312 11.05.2021 некорректное начисление счет143 14.05.2021 некорректное начисление

Итог

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

33
2 комментария

Как получить текущуюю цену по газпрому

Автор

В публикации рассмотрен пример Яндекса, если требуется информация по другой компании, попробуйте заменить значение 'YNDX.ME' на требуемое значение. Предполагаем, что для указанной вами компании это 'GAZP.ME'