Русский
Русский
English
Статистика
Реклама

Yfinance

Интерактивные финансовые данные в 20 строках кода

25.06.2020 10:15:49 | Автор: admin
Статьи на финансовые темы появляются на Хабре регулярно. Во многих из них в качестве источника первичных данных используется неофициально открытое API Yahoo finance. В этой статье я покажу три способа добыть данные (включая Yahoo) а также как напилить из них простое вэб-приложение в 20 строк и выдать его клиенту, не умеющему в CLI.





Ванильный Yahoo

Итак, начнем с получения данных. Классический путь в этом случае API Yahoo. Недостатком является что это API не публичное, и по словам пользующихся людей постоянно что-то меняется и будет отваливаться. Боль на эту тему можно найти, например, там. Если нас такое не страшит то вперед, навстречу приключениям.
Обширная статья с описанием yahoo finance API недавно была на Хабре, есть где разгуляться
тем, кто любит Node.js. Мы же будем теребить питона, поэтому чтобы упростить себе жизнь вместо прямого обращения к API используем библиотеку yfinance. Будем надеяться, что перемены в исходном API будут отслежены создателями библиотеки, а нам останется только поддерживать актуальность используемой версии. Помимо упрощения жизни это допущение грозит в один прекрасный день превратить ваше приложение в неработающий кирпич, поэтому для долгосрочной перспективы я бы смотрел на два варианта обсуждаемых позже в статье.

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

Возьмем данные американской комиссии по ценным бумагам для сопоставлеия имен и тикеров. JSON можно стащить с их сайта. Я воспользовался удобной csv-шкой добытой в другом месте основанной на тех же данных. Ахтунг, в подобых списках могут быть компании снятые с торгов, поэтому рекоммендуются дополнительные проверки.
Например, в скачанном листе есть произодитель оборудования для полупроводниковой промышленности VSEA которую скупил AMAT и убрали с рынка лет 10 назад.

Для простоты создания интерфейса мы пилим его в стримлите. Это красиво и ОЧЕНЬ быстро в плане написания. Но если мы запихаем весь лист в 14 000 позиций в стримлитный селект бокс то интерфейс будет тормозить просто невероятно. Поэтому сделаем предварительную фильтрацию по вводу пользователя.

Если, например, ввести Microsoft то вас сразу перекинет в нужное, а если therapeutics то вас ждет лист с длинным скроллом, зато все просто летает по скорости. Готовый интерфейс незатейлив и прост, на все про все с импортом и проверками ушло 40 строчек. Если несколько упростить как в следующем примере, то выходит как раз 20, никакого кликбейта все честно.



Внутренности
import yfinance as yfimport streamlit as stimport pandas as pdfrom datetime import datetime# read SEC registered comaniessec_list = pd.read_csv('cik_ticker.csv', sep='|',                       names=['CIK', 'Ticker', 'Name', 'Exchange', 'SIC', 'Business', 'Incorporated', 'IRS'])name_options = ['Microsoft Corp']name_hint = st.sidebar.text_input(label='Company name contains')if name_hint is not None:    name_options = sec_list[sec_list['Name'].str.contains(name_hint, case=False)]['Name'].tolist()if not name_options:    name_options = ['Microsoft Corp']# get ticker from company name and dates from UIcompany_name = st.sidebar.selectbox('SEC listed companies', name_options)ticker = sec_list.loc[sec_list['Name'] == company_name, 'Ticker'].iloc[0]tickerData = yf.Ticker(ticker)end_date = st.sidebar.date_input('end date', value=datetime.now()).strftime("%Y-%m-%d")start_date = st.sidebar.date_input('start date', value=datetime(2010, 5, 31)).strftime("%Y-%m-%d")# make API queryticker_df = tickerData.history(period='1d', start=start_date, end=end_date)md_chart_1 = f"Price of **{ticker}** "md_chart_2 = f"Volume of **{ticker}** "if len(ticker_df) == 0:    tickerData = yf.Ticker('MSFT')    ticker_df = tickerData.history(period='1d', start=start_date, end=end_date)    md_chart_1 = f"Invalid ticker **{ticker}** showing **MSFT** price"    md_chart_2 = f"Invalid ticker **{ticker}** showing **MSFT** volume"# Add simple moving averageticker_df['sma 15'] = ticker_df.Close.rolling(window=15).mean()# plot graphsst.markdown(f"Demo app showing **Closing price** and **trade volume** of a selected ticker from Yahoo! finance API")st.markdown(md_chart_1)st.line_chart(ticker_df[['Close', 'sma 15']])st.markdown(md_chart_2)st.line_chart(ticker_df.Volume)



Иcxодники можно найти в репозитории, а поиграть с живым интерфейсом на heroku, ну если ничего не отвалится.

Альтернатива 1

Теперь рассмотрим альтернативы. Если нас не устраивает непубличный API Yahoo, которому сложно доверять в долгосрочном плане? Отличной алтернативой может быть API предлагаемое Quandl.

Этот вариант интерсен тем, что API официальное, платное только за премиум данные, и имеет интерфейсы на R и Python от самих же создателей. API очень щедрое для пользователей с бесплатным ключом, можно сделать 300 запросов за 10 секунд, 2000 за 10 минут и 50 000 в день. Аттракциона такой невиданной щедрости трудно найти в наши дни. Знакомьтесь- Quandl

Из недостатков некоторые довольно тривиальные данные вроде S&P 500 попали в премиальные. Пилим тот же нехитрый дашборд на 20 строк кода. Все так же просто. Для менее чем 50 запросов в день не нужен даже бесплатный ключ. Если запросов больше то надо регистрировать. Несколько упростив исходное приложение умещаемся в 20 строк (не забудьте вставить API key, бесплатно регистрируется там)

Чудеса компактности
import quandlimport streamlit as stfrom datetime import datetimequandl.ApiConfig.api_key = "YOUR_API_KEY"ticker = st.sidebar.text_input("Ticker", 'MSFT')end_date = st.sidebar.date_input('end date', value=datetime.now())start_date = st.sidebar.date_input('start date', value=datetime(2010, 5, 31))ticker_df = quandl.get("WIKI/" + ticker, start_date=start_date, end_date=end_date)ticker_df['sma 15'] = ticker_df.Close.rolling(window=15).mean()# plot graphsst.markdown(f"Demo app showing **Closing price** and **trade volume** of a selected ticker from Quandl API")st.markdown(f"Price of **{ticker}** ")st.line_chart(ticker_df[['Close', 'sma 15']])st.markdown(f"Volume of **{ticker}** ")st.line_chart(ticker_df['Volume'])






Далее можно повышать градус неадеквата анализа неограниченно, пандас вам в руки.
Например, добавить классические метрики вроде корреляции с рынком (за рынок берем S&P 500). Для пущей научности добавляем сравнение с безрисковым инструментом (трехмесячные трежерис) и вычисляем альфу, бету и соотношение Шарпа. Это мы будем делать на примере другого источника, где на бесплатной подписке ограничивают не доступность групп данных, а только число запросов (хотя quandl нам тоже пригодится, данные про трежерис мы возьмем именно там).

Альтернатива 2

Наш второй конкурсант Alpha Vantage. Alpha Vantage API предлагает дневные и внутридневные данные по фондовым рынкам, технические индикаторы в готовом виде, данные рынков валют и даже крипты. По внутридневным доступны интервалы до 1 минуты. Если вы не занимаетесь лотереей внутридневной торговлей и прочим скальпингом, то 500 запросов в день которые дает вам бесплатный ключ вам вполне хватит. Ну а если вы настоящий биржевой воротила, то премиум ключ стоит меньше чем масло в вашем Бентли поменять, о чем беспокоиться? Зарегистрировать бесплатный ключ можно там

Смена источника данных требует минимальной коррекции кода, потому что все варианты умеют выдавать пандасовские датафреймы. Покрытие рынков вполне достойное, американским не ограничивается, по тикерам вроде GAZP.ME, SBER.ME вполне можно следить за нашим посконным. Из недостатков для Питона вам все равно понадобится некоторый обвес для работы с API если не хотите писать его сами. Он есть, но источник его не связан с авторами API и документированность оставляет желать лучшего.

Кроме того, если начать теребить API часто, то выясняется что бесплатно 500 запросов в день и 5 в минуту (пролистайте вверх и сравните с цифрами quandl, про невиданную щедрость я писал вполне серьезно!). Так что для всякой мелочи типа изменения временного диапазона или постоянно запрашиваемого тикера (вроде S&P 500) рекомендуется воспользоваться кешированием в стримлите, чтоб не дергать API понапрасну. Помните, что стримлит без кеширования перезапускает скрипт целиком после взаимодействия пользователя с интерфейсом, даже если он просто поменял границы отображаемого временного отрезка уже скачанных данных. Запрос с параметром outputsize='full' выдает всю историю за 20 лет, фильтрование по датам делаем уже на своей стороне, тоже помогает снизить число обращений.
Главное отличие от предыдущих случаев будет в том, что обращение к API теперь надо обернуть в функцию и навесить на нее кеширующий декоратор

@st.cache(suppress_st_warning=True, allow_output_mutation=True)def get_ticker_daily(ticker_input):    ticker_data, ticker_metadata = ts.get_daily(symbol=ticker_input, outputsize='full')    return ticker_data, ticker_metadata


В готовом виде наш новый апп с первичными признаками некой аналитики будет выглядеть примерно так:


Потроха нехитрой аналитики
import streamlit as stfrom alpha_vantage.timeseries import TimeSeriesfrom datetime import datetimeimport quandlimport pandas as pdquandl.ApiConfig.api_key = "YOUR_QUANDL_API_KEY"ts = TimeSeries(key='YOUR_ALPHA_VANTAGE_API_KEY', output_format='pandas')st.markdown(f"Demo app showing **Closing price** and  daily **APR change** of a selected ticker from alpha vantage API")ticker = st.sidebar.text_input("Ticker", 'MSFT').upper()end_date = st.sidebar.date_input('end date', value=datetime.now()).strftime("%Y-%m-%d")start_date = st.sidebar.date_input('start date', value=datetime(2015, 5, 31)).strftime("%Y-%m-%d")@st.cache(suppress_st_warning=True, allow_output_mutation=True)def get_ticker_daily(ticker_input):    ticker_data, ticker_metadata = ts.get_daily(symbol=ticker_input, outputsize='full')    return ticker_data, ticker_metadatatry:    price_data, price_meta_data = get_ticker_daily(ticker)    market_data, market_meta_data = get_ticker_daily('SPY')    md_chart_1 = f"Price of **{ticker}** "    md_chart_2 = f"APR daily change of **{ticker}** "except:    price_data, price_meta_data = get_ticker_daily('MSFT')    market_data, market_meta_data = get_ticker_daily('SPY')    md_chart_1 = f"Invalid ticker **{ticker}** showing **MSFT** price"    md_chart_2 = f"Invalid ticker **{ticker}** showing **MSFT** APR daily change of"def apr_change(pandas_series_input):    return ((pandas_series_input - pandas_series_input.shift(periods=-1,                                                             fill_value=0)) / pandas_series_input) * 100 * 252price_data['change'] = apr_change(price_data['4. close'])market_data['change'] = apr_change(market_data['4. close'])price_data_filtered = price_data[end_date:start_date]market_data_filtered = market_data[end_date:start_date]stock_market_correlation = price_data_filtered['change'].corr(market_data_filtered['change'], method='pearson')# estimate risk free return via 3 months treasury bondstreasury_yield = quandl.get("FRED/TB3MS", start_date=start_date, end_date=end_date)rfr = treasury_yield['Value'].mean()  # mean treasury yield over periodstock_volatility = price_data_filtered['change'].std()market_volatilidy = market_data_filtered['change'].std()stock_excess_return = price_data_filtered['change'].mean() - rfrmarket_excess_return = market_data_filtered['change'].mean() - rfrbeta = stock_market_correlation * stock_volatility / market_volatilidyalpha = stock_excess_return - beta * market_excess_returnsharpe = stock_excess_return / stock_volatilitymetrics_df = pd.DataFrame(    data={'mkt correlation': [stock_market_correlation], 'alpha': [alpha], 'beta': [beta], 'Sharpe ratio': [sharpe]})metrics_df.index = [ticker]st.markdown(md_chart_1)st.line_chart(price_data_filtered['4. close'])st.markdown(md_chart_2)st.line_chart(price_data_filtered['change'])st.table(metrics_df)




Судя по хорошей корреляции индекса с самим собой и нулевой альфе грубой лажи удалось избежать. На всякий случай напомнбю альфа это превышение доходности инструмента над рынком, здесь и далее в процентах в годовом исчислении. Чем положительнее и больше тем бодрее растет акция по сравнению с рынком. Интервал сравнения для всех с 1 января 2010 года. Можно видеть на примере последних 10 лет, что Майкрософт (MSFT) растет не сильно выше рынка,



а вот Фейсбук (FB) или Амазон (AMZN) все еще существенно обгоняют.





Можно также убедиться, что, например, частные тюрьмы и прочий коммерческий ГУЛАГ (CXW, GEO)





не являются таким уж привлекательным активом, при Трампе так и вовсе стабильно идут вниз, в общем если только для хеджирования рисков.

Доставка streamlit аппа на дом

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

Просим пользователя установить ContainDS и Докера. Ставим себе. Запускаем базовый стримлит образ, указав папку с нашим поделием, кликнув на CMD доставляем нужные зависимости из requirements.txt. И наконец экспортируем все это добро в один *.containds файл. Сохраняем и шлем клиенту (не по емейлу конечно, наш образ весит без малого 600 мегабайт)



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

Бонус

Ну и наконец для тех чтитателей или их клиентов, кто заинтересовался данными, но считает все эти докеры с жаваскриптами поверх питонов излишними свистелками и перделками. Для акул старой школы эксельный плагин для импорта данных из alpha vantage. Аналогичное для Quandl. Всем кто недавно ностальгировал в юбилейной трибьют-теме чуваки, про вас помнят!

Для фанатов винтажного на новый лад с маффинами, смузи и митболами есть вариант с гугловскими таблицами, и зиро кодинг и модное облако

Из моего короткого знакомства с тремя API мне показалось, что в целом самый щедрый это Quandl, особенно для платных клиентов. Если запросов мало, а платность не вариант то alpha vantage сгодится тоже. С yahoo настораживает вопрос кто же платит за угощение для всех, не исчезнет ли оно в один прекрасный день. Много примеров работы с Quandl и аналитики вообще можно найти во втором издании Mastering Python for Finance (есть на Либрусеке). Делитесь своими находками в области, в комментах статьи про yahoo finance API писали про Тинькова и другие варианты, но без подробностей

Фото на обложке поста Photo by M. B. M. on Unsplash
Подробнее..

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

12.12.2020 20:16:02 | Автор: admin

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


Пример смотрите по ссылке 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 & Poors.


Еще один аспект, который желательно принять во внимание при выборке акций, это наша степень уверенности в том, что компания не прекратит выплачивать дивиденды. Само собой, что хороший кредитный рейтинг позволяет компании добирать кредиты в годы низкой прибыли и тем самым находить источник для выплаты дивидендов. Но так же важно знать, какая часть прибыли уже сейчас выплачивается в виде дивидендов, а какая реинвестируется. Информацию об этом нам дает коэффициент 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 & Poors.. Реализовывать автоматизированный запуск заданий с обновлением информации о списке дивидендных артистократов и их рейтингах не стал. Любое изменение html-разметки может привести к некорректному сбору данных. Следовательно, автоматизация все равно будет не полной и потребует технической поддержки в будущем.


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


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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru