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

Курс валют и котировки акций онлайн на PHP

Понадобилось для одного проекта получать данные о курсе валют относительно рубля и котировки российских акций на текущий момент на своем сайте. Давайте научимся это делать.

Для получений курсов валют будем использовать Банк России. Есть такая ссылка

которая выдает xml с курсами валюты на заданный день. Можно пройти по ссылке и посмотреть в браузере:

Как видите, структура очень проста. Код для вывода курса доллара США на текущий день, например, будет выглядеть вот так:

Все просто: сначала получаем текущую дату в заданном формате, потом, пользуясь встроенным расширением Simple XML в PHP (вроде с пятой версии уже есть) разбираем, проходим по каждой валюте и когда код имеет значение «USD», то выводим курс доллара к рублю.

Котировки акций PHP

Тут все немного сложнее, но тоже не так чтобы уж. Переходим на сайт http://mfd.ru/export и заполняем поля по нужной нам акции. Например, вот так для Северсталь:

В итоге у нас скачается файл вот с таким адресом (он нам нужен)

То есть по сути обычный csv – распарсить его также можно встроенными средствами PHP. Код для получения последней актуальной цены одной акции:

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

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

заметки, php, парсинг

Источник

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

Графики котировок ценных бумаг с Мосбиржи и 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

Источник

Программный сбор данных о котировках

Заголовок обязывает перейти непосредственно к программному коду… Но, думаю, все же необходима вводная часть. А зачем, собственно, это нужно?

Эффективные действия на бирже связаны с тщательным анализом происходящего на рынке. Что кроется за динамикой цифр, котировок?

Отсутствие такого анализа, либо сумбурное принятие решений по сделке может привести к потерям. Мне не раз приходилось наблюдать за тем, как люди принимали решения — правильные… или не правильные — в дилинговом зале брокерской конторы.

Дилинговые залы брокерских контор… там существует своя, особая атмосфера. Атмосфера общения, обмена опытом, эмоциями. Мне нравятся дилинговые залы. По тому как человек входит в сделку, трейдеров можно разделить на две группы. Я буду говорить о тех, чей результат, как правило, печален. И таких трейдеров — большинство. Итак — описываю процесс входа в рынок трейдера соответствующей группы. В дилинговый зал вбегает мужчина лет 20-60 выкрикивает: «Куда идем?! Вверх?! Вниз?!» Со стороны встречающих слышаться неоднозначные выкрики «Вверх! Вниз!» Новоприбывший присоединяется к наиболее громко крикнувшей группе и… делает ТЫЦ. ТЫЦ по кнопке покупки или продажи. Все. Теперь человек в рынке. С этого момента он рискует своими деньгами. С этого момента трейдер не похож на трейдера. Он похож на болельщика. Вувузела в руках такого трейдера, думаю, была бы уместным инструментом торговли.

И теперь он уже в составе группы переживает, и со стоном воспринимает все движения рынка. А на новостях получает такой всплеск адреналина, который парням, карабкающимся по склонам горных хребтов, может только сниться.

Результат таких сделок вполне предсказуем. Но… есть ли более счастливый исход? Конечно. И связан он с анализом данных котировок. Как получить эти данные? Как получить эти данные в больших объемах? Как здорово, что есть такая замечательная компания «ФИНАМ» и их интернет-ресурс finam.ru! Сервера «ФИНАМ» предоставляют замечательную возможность — скачивать котировки, например вот по такой форме (например):

Однако, таким образом предоставляется возможность скачать лишь один файл за одну загрузку. А что если мы хотим получить больше данных для анализа? Гораздо больше? Практически по всем инструментам! По всем периодам! Это даст богатейшие возможности для анализа данных. Оу… возможно ли такое? Ответ: да возможно.

Пока же определимся с перечнем бумаг (инструментов), а также с основными принципиальными моментами, которые позволят нам получить данные о котировках. Перечень бумаг (инструментов) которые предоставляться компанией «ФИНАМ» будем брать отсюда:

Эта страница интересна для нас тем, что на ней есть, во-первых, большая часть инструментов которые дает «ФИНАМ»; во-вторых, веб-ссылки, по которым можно перейти непосредственно на страницу каждой ценной бумаги (инструмента).

Ссылки имеют следующий вид:

Пропарсив соответствующую станицу получим файл ссылок. Теперь мы знаем где «живут» инструменты. Файл можете скачать по этой ссылке. Зачем нам место жительства каждого инструмента? Этот параметр нам еще пригодится. Запаситесь терпением. Пока имеем ссылки по 6131 бумаге (инструменту).

Что требует сервер «ФИНАМ»? Какие параметры для получения данных? Давайте попробуем получить один файл, и посмотрим параметры запроса. Скачивая котировки компании Polymetal, имею вот такой GET запрос:

__http://export.finam.ru/POLY_170620_170623.txt?market=1&em=175924&code=POLY&apply=0&df=20&mf=5&yf=2017&from=20.06.2017&dt=23&
mt=5&yt=2017&to=23.06.2017&p=8&f=POLY_170620_170623&e=.txt&cn=POLY&dtf=1&tmf=1&
MSOR=1&mstime=on&mstimever=1&sep=1&sep2=1&datf=1&at=1

Среди всего перечня хотелось бы акцентировать внимание на параметрах em, market, code. Параметр em следует понимать как индекс, своеобразную метку бумаги (инструмента). Если мы хотим скачивать не один инструмент, а массив данных по нескольким бумагам (инструментам) мы должны знать em каждого из них. Переменная market говорит о том, где вращается данная бумага (инструмент) – на каком рынке? Маркетов много: МосБиржа топ***, МосБиржа пифы***, МосБиржа облигации***, Расписки и т.д. Параметр code – это символьная переменная по инструменту.

Итак, для получения файла котировок нам нужно добыть эти три параметра: em и market и code. По всем бумагам (инструментам). Вопрос — где их взять? Ответ: вспоминаем о файле со ссылками. В файле есть, например, такая ссылка:

Зайдем на нее и в исходном коде страницы увидим то, что нам нужно — в элементах javascript сидят наши искомые параметры, которые относятся к данной бумаге (инструменту):

Заметим, что в данном кусочке кода id — это и есть em; имеется параметр code, а также параметры маркета – id и его русскоязычное название. Данный кусок кода с вариациями присутствует у каждого бумаги (инструмента). Сходим, например, на:

Читайте также:  сонник мыться в бане с покойником

и увидим все то же самое. Теперь, думаю, общая цепочка получения данных понятна: в цикле перебираем ссылки, где живут отдельные бумаги (инструменты). Парсим кусочки javascript, собирая параметры em, market и code для каждой позиции. Имея на руках эти данные, можем программно заходить на сервер «ФИНАМ» и получать файлы котировок. Осталось дело за техникой исполнения.

Чем будем парсить? Парсить будем, используя Java. И… из всех велосипедов я выбираю тот, который стоит у меня в гараже. А именно Jsoup. Хотя можно было бы использовать и htmlunit.

Небольшое уточнение. При парсинге страницы мною были получены также данные – русскоязычное название бумаги (1) и раздел, в который «ФИНАМ» определили данную бумагу (инструмент) (2). Таким образом, на входе парсера имеется три файла. Напомню, имеем 6131 позиций — бумаг (инструментов). Всю эту информацию, а также результаты парсинга объединим в один файл. Код парсера можно скачать по этой ссылке.

В результате выполнения имеем файл function_parameters.csv. Каждая строка файла при построчном считывании может использоваться как перечень параметров для функции обращения к серверу «ФИНАМ» за котировками. Файл function_parameters.csv можно скачать по этой ссылке.

Для того чтобы написать функцию обращения к серверу «ФИНАМ» (а писать мы будем ее на Python), еще раз рассмотрим параметры GET запроса:

__http://export.finam.ru/POLY_170620_170623.txt?market=1&em=175924&code=POLY&apply=0&df=20&mf=5&yf=2017&from=20.06.2017&dt=23&
mt=5&yt=2017&to=23.06.2017&p=8&f=POLY_170620_170623&e=.txt&cn=POLY&dtf=1&tmf=1&
MSOR=1&mstime=on&mstimever=1&sep=1&sep2=1&datf=1&at=1

POLY_170620_170623 – очевидно, что данная строка представляет параметр code, а также временные характеристики.

.txt – расширение файла; расширение упоминается в параметре e; при написании функции следует помнить об этом нюансе.

Примем также во внимание содержимое исходного кода страницы типа www.finam.ru/profile/moex-akcii/gazprom/export внутри тэга form (где name=«exportdata»). Характеризуем показатели.

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

Код функции можно скачать также по этой ссылке.

Что дальше? Теперь возможно использовать данную функцию в цикле по имеющимся у нас позициям. Всего имеем, напомню, 6131 позицию. Из файла function_parameters.csv подгружаем параметры, указываем дату, выбираем нужный формат. И, используя данный код, не забудьте о правилах хорошего тона – поставьте задержку в пару секунд в итерацию цикла, дабы не перегружать сервер-источник.

Данных для анализа рынка, думаю, у вас будет предостаточно. Искренне надеюсь, что клиентов у компании «ФИНАМ» после написания данной статьи только прибавится!

Источник

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

Полный код этого примера :

Источник

Новости компании

Заголовок обязывает перейти непосредственно к программному коду. Но, думаю, все же необходима вводная часть. А зачем, собственно, это нужно?

Эффективные действия на бирже связаны с тщательным анализом происходящего на рынке. Что кроется за динамикой цифр, котировок?

И теперь он уже в составе группы переживает, и со стоном воспринимает все движения рынка. А на новостях получает такой всплеск адреналина, который парням, карабкающимся по склонам горных хребтов, может только сниться.

Однако, таким образом предоставляется возможность скачать лишь один файл за одну загрузку. А что если мы хотим получить больше данных для анализа? Гораздо больше? Практически по всем инструментам! По всем периодам! Это даст богатейшие возможности для анализа данных. Оу. возможно ли такое? Ответ: да возможно.

Пока же определимся с перечнем бумаг (инструментов), а также с основными принципиальными моментами, которые позволят нам получить данные о котировках. Перечень бумаг (инструментов) которые предоставляться компанией «ФИНАМ» будем брать отсюда:

Эта страница интересна для нас тем, что на ней есть, во-первых, большая часть инструментов которые дает «ФИНАМ»; во-вторых, веб-ссылки, по которым можно перейти непосредственно на страницу каждой ценной бумаги (инструмента).

Ссылки имеют следующий вид:

Пропарсив соответствующую станицу получим файл ссылок. Теперь мы знаем где «живут» инструменты. Файл можете скачать по этой ссылке. Зачем нам место жительства каждого инструмента? Этот параметр нам еще пригодится. Запаситесь терпением. Пока имеем ссылки по 6131 бумаге (инструменту).

Что требует сервер «ФИНАМ»? Какие параметры для получения данных? Давайте попробуем получить один файл, и посмотрим параметры запроса. Скачивая котировки компании Polymetal, имею вот такой GET запрос:

и увидим все то же самое. Теперь, думаю, общая цепочка получения данных понятна: в цикле перебираем ссылки, где живут отдельные бумаги (инструменты). Парсим кусочки javascript, собирая параметры em, market и code для каждой позиции. Имея на руках эти данные, можем программно заходить на сервер «ФИНАМ» и получать файлы котировок. Осталось дело за техникой исполнения.

Чем будем парсить? Парсить будем, используя Java. И. из всех велосипедов я выбираю тот, который стоит у меня в гараже. А именно Jsoup. Хотя можно было бы использовать и htmlunit.

В результате выполнения имеем файл function_parameters.csv. Каждая строка файла при построчном считывании может использоваться как перечень параметров для функции обращения к серверу «ФИНАМ» за котировками. Файл function_parameters.csv можно скачать по этой ссылке.

Для того чтобы написать функцию обращения к серверу «ФИНАМ» (а писать мы будем ее на Python), еще раз рассмотрим параметры GET запроса:

Примем также во внимание содержимое исходного кода страницы типа www.finam.ru/profile/moex-akcii/gazprom/export внутри тэга form (где name=»exportdata»). Характеризуем показатели.

Код функции можно скачать также по этой ссылке.

Данных для анализа рынка, думаю, у вас будет предостаточно. Искренне надеюсь, что клиентов у компании «ФИНАМ» после написания данной статьи только прибавится!

Подпишитесь на нашу рассылку, и каждое утро в вашем почтовом ящике будет актуальная информация по всем рынкам.

Источник

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