Парсинг котировок акций python

Парсинг текущего значения цены акций 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

Источник

Развивающий портал