Получение данных с Мосбиржи

Автор Mak, 26 августа 2021, 08:56

0 Пользователи и 1 гость просматривают эту тему.

Mak

Добрый день,
Хочу сделать скрипты для вытягивания данных с Мосбиржи.
Может быть кто-то уже делал или знает где есть?
(чтобы свой велосипед не изобретать)

sokol92

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

Mak

Интерфейс ISS
Описание - https://iss.moex.com/iss/reference/

Получение состава индекса Мосбиржи:
https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics/IMOEX.json?iss.meta=off&limitt=100

Запрос данных по нескольким бумагам, типа:
https://iss.moex.com/iss/securities/GMKN.json?iss.meta=off
https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.json?iss.meta=off&iss.only=securities
https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.json?iss.meta=off&iss.only=marketdata
https://iss.moex.com/iss/engines/stock/markets/shares/securities/GMKN/candles.json?iss.meta=off&iss.reverse=true&interval=4&from=2021-01-01
(json в запросах можно заменить на xml)

В общем описания и данные за вчера по разным бумагам.
Можно и текущие данные (они идут с задержкой), но это уже не особо актуально.
Исторические данные по кварталам или месяцам за последний год.

Цель - отслеживать состояние своего портфеля.

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

sokol92

Это, вероятно, к герпетологам. На форуме есть большие любители Python.  :)
Владимир.

Mak

Хорошо,
а как хотя бы импортировать данные с сайта без скриптов, например такие
https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics/IMOEX.xml?iss.meta=off&limitt=100

Как-то можно вроде бы, но порылся по менюшкам и не нашел.

Mak

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

rami

Цитата: sokol92 от 26 августа 2021, 15:24
Это, вероятно, к герпетологам. На форуме есть большие любители Python.  :)
С помощью Basic можно делать почти что всё, а с Python всё остальное.


Данные с "причудами" (пробелы в именах), но обработать можно, смотрите:

sokol92

@rami, здравствуйте, спасибо за содержательный пример.
XML можно обрабатывать и "честно". :)
В условиях примера @rami:
Sub GetValuta2
  Dim xDoc, xRows, xAttribs, xAttrib, i As Long, j As Long
  xDoc=GetXDocByUri(URL)
 
  ' Разбираем XML стандартными средствами
  xRows=xDoc.getElementsByTagName("row")  ' список тегов row
  For i=0 To xRows.Length-1
    xAttribs=xRows.item(i).Attributes
    For j=0 To xAttribs.Length-1
      xAttrib=xAttribs.item(j)
      Select Case xAttrib.Name
        ' Обработка атрибутов как в функции GetValuta
        Case "tradedate"   ' получаем Дату. Значение: xAttrib.Value
        ' Обработка других атрибутов
      End Select
    Next j
  Next i
  ' Обработка XDoc завершена.
End Sub

' Returns XDocument by Uri
Function GetXDocByUri(ByVal Uri As String) As Object
  GetXDocByUri=createUnoService("com.sun.star.xml.dom.DocumentBuilder").parseURI(Uri)
End Function
Владимир.

rami

@sokol92, здравствуйте. Ваш вариант лучше подходит для работы с XML и для данного случая. Мой вариант более универсальный для любого текста.

economist

У Мосбиржи есть API и обертка под Python https://pypi.org/project/apimoex/

Большие данные логично обрабатывать в Pandas и возвращать в Calc, тонны кода есть в Сети.

Pandas  дружится с LibreOffice Calc по данному мануалу: https://forumooo.ru/index.php/topic,8696.0.html
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Mak

Спасибо!
Почитаю, попробую разобраться.

Mak

Пока остановился просто на формулах, без скриптов.
Разделил обработку на две фазы - запрос данных с Мосбиржи и отдельно парсинг по полям.
Полей много, а запросов немного.

Если кому интересно будет, см. вложение.