Время прочтения: 5 мин.

За последние 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

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

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()

Дивиденды

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

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

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

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

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

div = pd.read_csv('./div.csv',sep=';',engine='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 некорректное начисление

Итог

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