Парсинг текущего значения цены акций Python.
Захотелось реализовать несколько идей для быстрого расчета по позициям акций и для этого мне нужно было чтобы скрипт на python постоянно получал обновленное значение цены. Например раз в три секунды. Искал решение и нашел похожий пример с парсингом любой информации в интернете на python с применением блиотек requests и beautiful soup, (bs4).
На примере тикера GAZP продемонстрирую как можно спарсить текущий курс (например с гугла.)
Кому лень читать всё что я тут написал можно скопипастить полный код в конце статьи 🙂
Для начала нужно установить нужные библиотеки, в консоли пишем :
pip install requests bs4
Теперь перейдем к коду.
Импортируем то, что установилось. Также нам понадобится библиотека time для задержки запросов по времени.
Можно сразу задержку вынести в отдельную переменную, для экспериментов.
Идем на сайт гугл финансы и копируем ссылку,
Ссылка помещается в переменную GAZP
(для удобства читаемости кода я переносил строку ссылки через «\».)
Для формирования URL запроса нам потребуются заголовки my user agent, чтобы запрос не был воспринят гуглом как БОТ- запрос.
Эту строчку можно получить набрав в гугле поисковый запрос my user agent и скопировать то что будет сверху
Сохраняем эту строку в переменную headers
Теперь у нас есть всё для того чтобы сформировать запрос. Результат запроса помещается в переменную, которая будет содержать всю HTML разметку данной страницы.
Воспользуемся библиотекой BeautifulSoup чтобы спарсить все тэги из html, который был получен строчкой выше.
Воспользуемся фильтром и найдем все тэги с признаком, который нам нужен. Для того, чтобы понять, какие именно тэги нужно искать, в браузере можно воспользоваться инструментами разработчика, чтобы посмотреть html разметку нужного элемента. В нашем случае наводим курсор мыши на цену бумаги, кликаем правой кнопкой и выбираем исследовать элемент, посмотреть код элемента или что-то в этом роде.
Мы видим что наш объект помещен в тэг div с признаком class=«YMlKec fxKbKc» вот по этому признаку и найдем интересующий нас фрагмент страницы. Результат поиска записываем в переменную convert
После того как мы получили нужную нам строчку берем её первый элемент (первый считается с индексом[0]) и записываем полученную строку в переменную price. Но нужно еще сделать пару преобразований. Если мы распечатаем значение price то напечатается строка вида ₽286.05
Для начала избавимся от символа рубля в начале строки срезом этой строки [1:]
И также нам нужно конвертировать эту строку в число в формате float, так как сейчас она является текстом.
Теперь мы можем работать с полученным значением. price 🙂
Для проверки выведем на печать
Создадим функцию update_ticker(): и поместим туда весь код, который мы написали выше. В конце функции укажем задержку по времени. Воспользуемся функцией sleep библиотеки time и передадим ей одноименный аргумент sleep, который мы объявили вначале программы.
Функция готова и чтобы всё заработало вызываем её один раз в начале программы. Далее она вызывает сама себя с интервалом в sleep, 3 секунды.
Полный код этого примера :
Получение котировок акций при помощи Python
Привет, Хабр! Представляю вашему вниманию перевод статьи «Historical Stock Price Data in Python» автора Ishan Shah.
Статья о том, как получить ежедневные исторические данные по акциям, используя yfinance, и минутные данные, используя alpha vantage.
Как вы знаете, акции относятся к очень волатильному инструменту и очень важно тщательно анализировать поведение цены, прежде чем принимать какие-либо торговые решения. Ну а сначала надо получить данные и python может помочь в этом.
Биржевые данные могут быть загружены при помощи различных пакетов. В этой статье будут рассмотрены yahoo finance и alpha vantage.
Yahoo Finance
Сначала испытаем yfianance пакет. Его можно установить при помощи команды pip install yfinance. Приведенный ниже код показывает, как получить данные для AAPL с 2016 по 2019 год и построить скорректированную цену закрытия (скорректированная цена закрытия на дивиденды и сплиты) на графике.
Ну а если необходимо получить по нескольким акциям, то необходимо внести небольшое дополнение в код. Для хранения значений используется DataFrame. При помощи пакета matplotlib и полученных данных можно построить график дневной доходности.
Для значений по российским акциям есть небольшая тонкость. К названию акцию добавляется точка и заглавными буквами ME. Спасибо знатоки на смартлабе подсказали.
Получение минутных данных при помощи Alpha vantage
К сожалению, бесплатная версия Yahoo Finance не позволяет получить данные с периодичностью меньше, чем дневная. Для этого можно использовать пакет Alpha vantage, которые позволяет получить такие интервалы, как 1 мин, 5 мин, 15 мин, 30 мин, 60 мин.
В дальнейшем эти данные можно проанализировать, создать торговую стратегию и оценить эффективность при помощи пакета pyfolio. В нем можно оценить коэффициент Шарпа, коэффициент Сортино, максимальную просадку и многие другие необходимые показатели.
Надеюсь, что мой перевод оригинальной статьи будет для Вас полезен. Код был проверен и все работает. Но пока для меня остался вопрос в возможности использования Alpha vantage для российского рынка.
Как скачать исторические котировки c yahoo finance и финама с помощью python
В одной из прошлых заметок мне нужно было скачать исторические котировки по 650 активам. Часть из них на российском рынке, часть крипта и большая часть на рынке США. Всё, что касается крипты, валют и американского рынка качал с yahoo finance. Российский рынок качал с финама. Естественно качал с помощью питона. Дальше расскажу как это можно повторить.
Yahoo finance и python
Пакет yfinance. Гитахб github.com/ranaroussi/yfinance Установка командой: pip install yfinance
Можно качать не только дневные данные. Интервалы из документации: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo На практике данные меньше дневных сильно ограничены. Например, часовые доступны за 60 последних дней.
Перейдём к делу, как качать котировки:
import yfinance as yf
data = yf.download(«TSLA», start=«2017-01-01», end=«2017-04-30»)
Как добавить интервал:
data = yf.download(«TSLA», start=«2017-01-01», end=«2017-04-30», interval=’1h’)
Данные скачиваются в датафрейм. Датафрейм можно сохранить в csv:
Finam и python
Нашёл замечательный пакет finam-export. Гитхаб github.com/ffeast/finam-export Установить можно командой: pip install finam-export
В отличии от яху финанс можно качать даже тиковые данные за любой срок! Правда где-то читал, что за слишком большой срок данные могут качаться несколько дней. Я пока не придумал как использовать тиковые данные.
Сам пакет не так хорошо продуман, как предыдущий. Иногда приходится поломать голову.
Как тут качать? Минимальный набор:
from finam import Exporter, Market, Timeframe
exporter = Exporter()
ticker = ‘SBER’
asset = exporter.lookup(name=ticker, market=Market.SHARES)
asset_id = asset[asset[‘name’] == ticker].index[0]
data = exporter.download(asset_id, market=Market.SHARES)
Ищем айдишник тикера в финаме и по нему скачиваем котировки.
Вот так можно задавать другие параметры:
data = exporter.download(asset_id, market=Market.SHARES, start_date=datetime.date(2017, 1, 1), end_date=datetime.date(2018, 1, 1), timeframe=Timeframe.DAILY)
Особенности finam-export
Тикер нужно искать в том рынке, где он есть. Фьючерсы во фьючерсах, акции в акциях. Если искать без рынка, то у одного тикера может найтись несколько айдишников. Константы по рынкам и таймфреймам можно посмотреть в файле: github.com/ffeast/finam-export/blob/master/finam/const.py
Иногда в строчке asset = exporter.lookup(name=ticker, market=Market.SHARES) нужно name заменить на code, будет вот так asset = exporter.lookup(code=ticker, market=Market.SHARES) Хрен его знает что от этого меняется, но иногда работает так иногда так.
В константах может не быть рынка, который вам нужен. Например для биткоина айдишник рынка 520. Его нет в константах. Я пробовал его добавлять руками, но котировки всё равно не качались. Если знаете как скачать, напишите.
Если качать много тикеров, то нужно задавать задержку между заросами в одном тикере и между тикерами, инче будет 403 ошибка. Я прописывал через рандом в запросе: data = exporter.download(asset_id, market=Market.SHARES, start_date=datetime.date(2017, 1, 1), end_date=datetime.date(2018, 1, 1), timeframe=Timeframe.DAILY, delay=random.randint(3,5)) И в цикле: time.sleep(random.randint(3,5))
Как скорость?
Да в целом норм. Дневные данные по 650 тикерам с января 2007 года вчера скачались примерно за час.
Сравнение динамики котировок двух акций на python на примере привилегированных и обычных акций Сбербанка
Здравствуйте, сегодня хотел бы рассказать про мой опыт анализа акций сбербанка. Порой они показывают немного разную динамику — мне стало интересно проанализировать движение их котировок.
В данном примере мы будем скачивать котировки с сайта Финама. Ссылка для скачивания обычного Сбербанка.
Для операций со столбцами буду использовать pandas, для визуализации matplotlib.
Чтобы таблицы не сокращались, необходимо убрать ограничения:
Читаем данные по акции
(указываем разделитель, где находятся название столбцов, какой столбец будет индексом, включаем парсинг дат).
Также укажем сортировку:
Отобразим наши данные:
Добавляем столбец с изменением цены
Так можно выводить именно процент:
Добавляем вторую акцию
Делаем это точно таким же образом
Визуализируем котировки наших акций
Теперь отобразим котировки с их средними (MA 50):
Можно отобразить и другие средние
Теперь выведем оборот по акциям:
Добавим также название оси У
и размер холста
Анализ корреляций
Теперь подробнее посмотрим на корреляцию. в этом нам поможет матричный график
Создадим новую таблицу с колонками по обеим акциям и зададим им названия
Теперь импортируем нужный график
Следует уточнить, что нам нужно добавить прозрачность (alpha=0,2), чтобы видеть наложение точек
Если точки “идут” по диагонали, наблюдается корреляция.
Оценка волатильности бумаг
Для лучшего понимания Отобразим волатильность на другом графике — гистограмме
Чтобы сделать вывод быстрее, можно упростить график (сделаем график менее подробным и менее прозрачным):
Анализ накопленного дохода
Теперь выведем изменение стоимости акций в процентах.
Для этого введем столбец с накопленным доходом.
На графиках мы можем увидеть временные промежутки, когда одна из акций недооценена или переоценена относительно другой. В текущих обстоятельствах (при прочих равных, прошу заметить) нам это поможет выбрать акцию для усреднения при падении капитализации Сбербанка.
Парсинг котировок акций python
Графики котировок ценных бумаг с Мосбиржи и NASDAQ. Включает в себя кравлер суточных данных и платформу для отрисовки графиков.
Цель проекта — скачивать данные о котировках и рисовать по ним разные графики. Кравлер работает с суточными данными Московской биржи по акциям, облигациям, валюте и ETF через MOEX API Для котировок иностранных ценных бумаг (акций, индексов, биткоинов) используется API Alpha Vantage — оно позволяет скачивать суточные данные по любому тикеру с бирж NASDAQ или NYSE
Данные с Московской биржи (MOEX)
API Московской бирже позволяет скачивать за раз все котировки определённого рынка. Например рынка облигаций. Поэтому в одном файле хранятся все данные рынка за день. Например в quotes/2019/03/05/2019-03-05-stock-bonds.csv содержатся цены открытия/закрытия/мин/макс (OHLC) по всем облигациям с указанием названий и ISIN.
Чтобы скачать данные за день, нужно запустить main.py в режиме download с указанием даты (YYYY-MM-DD) и рынка:
Данные иностранных ценных бумаг с NASDAQ
При скачивании тикера с имеющимися данными в папке quotes/NASDAQ/, данные за указанную дату (диапазон дат) будут дописываться в конец csv файла
Платформа предоставляет удобный формат для отрисовки графиков любых ценных бумаг, а также их модифицировать.
Исходные данные котировок и графики хранятся на гитхабе, а точнее хостятся на github pages и доступны по ссылке на сайте https://nerevar.github.io/stock_prices/
Новые графики можно добавлять по образцу имеющихся графиков в папке graph_data/, которые включают в себя:
Конфиг графиков graph.py
Страничка с графиком index.html
Пример более сложного графика, который использует данные трёх источников, а затем умножает значение акции YNDX на курс доллара: yndx_rub
Данные для графика values.csv
После скачивания исходных данных котировок за определённый день, их нужно сконвертировать в csv для отрисовки графиков в HighCharts. Для этого нужно запустить main.py в режиме graphs с указанием даты (YYYY-MM-DD) и графика (списка графиков):
Графики с Мосбиржи ежедневно строятся по одной точке: данные нового дня дописываются в конец файла values.csv
Ежедневное обновление по крону
Каждый день по крону запускается цель cron в Makefile, которая за предыдущий полный день скачивает данные и строит графики для бумаг с MOEX и NASDAQ
Артефакты (сырые данные и подготовленные для графиков) коммитятся под пользователем «Travis CI» и отправляются в гитхаб репозиторий в ветку master благодаря github personal access tokens. Ветка master единственная в проекте и Github Pages в проекте строятся по этой ветке.
Добавить новый график
About
Графики котировок ценных бумаг с Мосбиржи и NASDAQ





