Данные московской биржи в excel

Ранее уже писал про получение данных с Московской биржи через формулы Google Таблиц. Однако остался вопрос — можно ли получать эти же данные при локальном использовании Microsoft Excel или его свободного аналога LibreOffice Calc? Без использования скриптов или ручного копирования.


Microsoft Excel с формулами получения данных с Мосбиржи

И на этот вопрос можно дать положительный ответ. Это даже более удобно, поскольку не приходится ожидать загрузки результатов работы функции IMPORTXML в Гугл Таблицах.

Аналогом этой функции в Excel и Calc выступает связка формул: WEBSERVICE (ВЕБСЛУЖБА) + FILTERXML (ФИЛЬТР.XML).

При работе с Microsoft Excel есть некоторые нюансы:

  • Эти функции доступны только в Excel 2013 и более поздних версиях для Windows.
  • Эти функции не будет возвращать результаты на компьютере Mac.

Для LibreOffice Calc подобных ограничений меньше:

Собрал работоспособный пример «API Мосбиржи в Microsoft Excel.xlsx» с функциями, которые описаны в программном интерфейсе к информационно-статистическому серверу Московской Биржи (ИСС / ISS). Плюс добавил некоторые функции, которые были найдены читателями первой части статьи про гугл таблицы.

Протестировал этот файл в Microsoft Excel 2019 под Windows 10 и в LibreOffice Calc 6.4 под Linux Mint 19.3. Под Mac OS у меня возможности протестировать не было.

API Московской биржи в формулах MS Excel

В общем виде все запросы, которые можно отправить к API Мосбиржи есть в справочнике. Но лично для меня этот справочник до сих пор не особо понятен.

Идентификатор режима торгов

В API Московской биржи очень многое зависит от параметра «Идентификатор режима торгов» (primary_boardid), который можно посмотреть прямо у них на сайте через форму поиска.


Идентификатор режима торгов для акций Тинькофф

Также этот идентификатор можно посмотреть через обычный HTTP-запрос к API:

https://iss.moex.com/iss/securities.xml?q=ТУТ ПИШЕМ НАЗВАНИЕ ИНСТРУМЕНТА ИЛИ ЕГО ЧАСТЬ&iss.meta=off&securities.columns=name,emitent_inn,isin,secid,primary_boardid


Поиск через HTTP-запрос к API Мосбиржи по слову Пермь

Автоматическое получение имени акций, облигаций и ETF

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


Файл «API Мосбиржи в Microsoft Excel.xlsx» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc

Автоматическое получение текущих цен

На этой вкладке представлены актуальные примеры для получения цен акций, облигаций и ETF с Московской биржи.

Цена предыдущего дня берётся через PREVADMITTEDQUOTE, а не LAST с 15 минутной задержкой, поскольку по некоторым низко ликвидным инструментам через LAST цены может просто не быть.


Файл «API Мосбиржи в Microsoft Excel.xlsx» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc

Автоматическое получение дивидендных выплат для акций

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


Файл «API Мосбиржи в Microsoft Excel.xlsx» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc

Автоматическое получение облигационных выплат

По облигациям (не только корпоративным, но также ОФЗ и еврооблигациям) можно автоматически получать дату выплаты следующего купона и его значение.


Файл «API Мосбиржи в Microsoft Excel.xlsx» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc

Автоматическое получение дат оферт

Удобно планировать собственные финансы, получая даты оферт (дата, в которую инвестор или эмитент имеют право досрочно погасить облигацию по цене номинала) автоматически.


Файл «API Мосбиржи в Microsoft Excel.xlsx» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc

UPD. Пользователь mixei подсказывает, что автоматическое обновление настраивается через Параметры — Центр управления безопасностью — вкладка Внешнее содержимое — там надо поставить все флажки где не рекомендуется :) Но это на страх и риск пользователей.

Итог

API Московской биржи предоставляет широкие возможности, которые гораздо шире чем описанные в данной статье. Это статья своеобразная шпаргалка для долгосрочного частного инвестора, который ведёт учёт в локальном файле на собственном компьютере.

Также хочу отметить, что я никак не связан с Московской биржей и использую ИСС Мосбиржи только в личных интересах.

Автор: Михаил Шардин,

21 апреля 2020 г.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Microsoft Excel или LibreOffice Calc для локального использования?


22.22%
LibreOffice Calc
20

Проголосовали 90 пользователей.

Воздержались 11 пользователей.

ВНИМАНИЕ! КОММЕНТАРИИ ПЕРВОГО УРОВНЯ В ВОПРОСАХ УПОРЯДОЧИВАЮТСЯ ПО ЧИСЛУ ПЛЮСИКОВ, А НЕ ПО ВРЕМЕНИ ПУБЛИКАЦИИ.

Почитайте статью на habr.com/ru/post/498268/, есть еще новые возможности в Excel для Microsoft 365. Если нужно могу то же скинуть пример получение котировок и много чего другого.

avatar

  • 12 июня 2022, 09:46
  • Ответить

    Еще

Андрей, страница не найдена(

avatar

  • 12 июня 2022, 09:56
  • Ответить

    Еще

Сергей Кузнецов, в ссылку добавилась запятая. Попробуйте так:

avatar

  • 12 июня 2022, 10:16
  • Ответить

    Еще

Yury Agasiev, спасибо, открылось!

avatar

  • 12 июня 2022, 10:31
  • Ответить

    Еще

Yury Agasiev, затрахали ссылки давать дайте формулу видел все эти ссылки открывается гугл страница по ссылкам там другая формула

avatar

  • 12 июня 2022, 11:44
  • Ответить

    Еще

Андрей, Страница не найдена

avatar

  • 12 июня 2022, 11:41
  • Ответить

    Еще

импортируйте туда csv файл, или вам онлайн надо ??

avatar

  • 12 июня 2022, 02:01
  • Ответить

    Еще

квик умеет экспортировать в excel

avatar

  • 12 июня 2022, 06:42
  • Ответить

    Еще

Проще простого)) конкретизируйте источник и состав данных, и половина задачи уже будет решена

avatar

  • 12 июня 2022, 10:18
  • Ответить

    Еще

avatar

  • 12 июня 2022, 12:01
  • Ответить

    Еще

в виде тьекста есть у когонить эта формула

avatar

  • 12 июня 2022, 11:48
  • Ответить

    Еще

В excel есть шикарный инструмент, power query. А у мосбиржи есть инструкция по api. Формируя разные ссылки, в соответствии с инструкцией по api и скармливая эти ссылки в качестве источника в power query можно добиться многого.

avatar

  • 12 июня 2022, 23:18
  • Ответить

    Еще

Только зарегистрированные и авторизованные пользователи могут оставлять ответы.

Залогиниться

Зарегистрироваться

Файлы к уроку:

  • Для спонсоров Boosty
  • Для спонсоров VK

Ссылки:

  • Страница курса
  • Плейлист YouTube
  • Плейлист ВК

Описание

В этом уроке мы научимся получать прямо в Excel котировки разных ценных бумаг с сайта Московской биржи.

Решение

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

Если мы введем такую ссылку в Power Query, создав запрос из интернета, то получим интересующие нас котировки прямо в Excel.

Вот ссылка на сайте Московской биржи https://iss.moex.com/iss/reference/ На этой странице вы можете увидеть какую именно информацию вы можете получить с сайта Московской биржи. Котировками дело не ограничивается.

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

Наша ссылка будет выглядеть так — https://iss.moex.com/iss/history/engines/stock/markets/shares/securities/SBER/securities.xml

В том месте, где написано SBER нужно вставить тикер интересующей вас ценной бумаги. Далее, развернув таблицу, вы получите таблицу с котировками, но только 100 строк. Это максимальное количество, которое позволено выгружать. Нам нужно что-то придумать, чтобы выгружать больше строк.

Что делать, чтобы получить много строк? Нужно использовать параметр start. Мы создадим столбец с числами с инкрементом 100 и в каждой строке будем запрашивать информация по ссылке.

Примененные функции

  • Xml.Tables
  • Web.Contents
  • List.Numbers
  • Table.FromList
  • Splitter.SplitByNothing
  • ExtraValues.Error
  • Table.AddColumn
  • Text.From
  • Table.SelectColumns
  • Table.ExpandTableColumn
  • Table.TransformColumnNames
  • Text.AfterDelimiter

Код

Пример получения 100 строк:

let
   source = Xml.Tables(
      Web.Contents(
         "http://iss.moex.com/iss/history/engines/stock/markets/shares/securities/SBER/securities.xml?start=300"
      )
   ){0}[Table]{0}[rows]{0}[row]
in
   source

Пример получения 4000 строк:

let
   source = List.Numbers(1, 40, 100),
   to_table = Table.FromList(
      source,
      Splitter.SplitByNothing(),
      null,
      null,
      ExtraValues.Error
   ),
   table_add_col = Table.AddColumn(
      to_table,
      "Пользовательская",
      each Xml.Tables(
         Web.Contents(
            "http://iss.moex.com/iss/history/engines/stock/markets/shares/securities/SBER/securities.xml?start="
               & Text.From([Column1])
         )
      ){0}[Table]{0}[rows]{0}[row]
   ),
   cols_select = Table.SelectColumns(table_add_col, {"Пользовательская"}),
   col_expand_table = Table.ExpandTableColumn(
      cols_select,
      "Пользовательская",
      {
         "Attribute:BOARDID",
         "Attribute:TRADEDATE",
         "Attribute:SHORTNAME",
         "Attribute:SECID",
         "Attribute:NUMTRADES",
         "Attribute:VALUE",
         "Attribute:OPEN",
         "Attribute:LOW",
         "Attribute:HIGH",
         "Attribute:LEGALCLOSEPRICE",
         "Attribute:WAPRICE",
         "Attribute:CLOSE",
         "Attribute:VOLUME",
         "Attribute:MARKETPRICE2",
         "Attribute:MARKETPRICE3",
         "Attribute:ADMITTEDQUOTE",
         "Attribute:MP2VALTRD",
         "Attribute:MARKETPRICE3TRADESVALUE",
         "Attribute:ADMITTEDVALUE",
         "Attribute:WAVAL"
      },
      {
         "Attribute:BOARDID",
         "Attribute:TRADEDATE",
         "Attribute:SHORTNAME",
         "Attribute:SECID",
         "Attribute:NUMTRADES",
         "Attribute:VALUE",
         "Attribute:OPEN",
         "Attribute:LOW",
         "Attribute:HIGH",
         "Attribute:LEGALCLOSEPRICE",
         "Attribute:WAPRICE",
         "Attribute:CLOSE",
         "Attribute:VOLUME",
         "Attribute:MARKETPRICE2",
         "Attribute:MARKETPRICE3",
         "Attribute:ADMITTEDQUOTE",
         "Attribute:MP2VALTRD",
         "Attribute:MARKETPRICE3TRADESVALUE",
         "Attribute:ADMITTEDVALUE",
         "Attribute:WAVAL"
      }
   ),
   types = Table.TransformColumnNames(
      col_expand_table,
      each Text.AfterDelimiter(_, ":")
   )
in
   types

Этот урок входит в курс Веб-запросы в Power Query

Номер урока Урок Описание
1 Котировки Yahoo Finance Вы хотите получить историю котировок акций MCD с 2000 года по текущий день с сайта Yahoo Finance. Вы копируете ссылку на раздел с историческими данными, вставляете ссылку в Power Query и получаете только 100 строк.
2 HTML, получение данных по облигациям Мы хотим получить данные по всем облигациям со страницы bonds.finam.ru
3 Многостраничное извлечение На разных страницах находятся сайта находятся котировки золота на каждый год. Нужно соединить все данные в одну таблицу.
4 JSON, Котировки Yahoo Finance 2 В этом уроке мы разберем еще один способ скачивания котировок с Yahoo Finance. Этот способ намного удобнее и быстрее. Здесь мы научимся обрабатывать формат JSON.
5 Котировки Московской биржи В этом уроке мы научимся получать прямо в Excel котировки разных ценных бумаг с сайта Московской биржи.
Московская биржа предоставляет возможность скачивать котировки и другую информацию по ценным бумагам при помощи специальных ссылок.
Если мы введем такую ссылку в Power Query, создав запрос из интернета, то получим интересующие нас котировки прямо в Excel.
6 Неразмеченный текст Вы делаете запрос к Web-странице и сталкиваетесь с неразмеченным текстом. Вы хотите при помощи Power Query этот неразмеченный текст преобразовать в нормальную красивую таблицу.
7 Текстовый документ, веб-страница, List.Zip В этом запросе мы научимся получать нужную информацию из текста веб-страницы.
8 Youtube Data API В этом уроке мы научимся получать данные из Youtube Data API. Узнаем как получить данные о Youtube канале: список видео и плейлистов, названия, описания, длительность, тэги, количество лайков, дизлайков, просмотров и комментариев.
9 Личный OneDrive — подключаемся напрямую к файлам и папкам В этом уроке мы разберем как напрямую подключиться к файлам и папкам на личном OneDrive.
10 Подключение Google Spreadsheets, Google Drive (Excel.Workbook, Web.Contents) В этом уроке мы научимся подключаться к xlsx файлам, которые находятся в вашем Google Drive.
11 Получить все станции метро Получим таблицу с перечнем станций метрополитена даже с координатами широты и долготы.
12 Получить ссылки с веб-страницы (Html.Table) Получить URL с веб-страницы. Сделать запрос к каждому URL, получить таблицы и объединить их всех по вертикали.
13 Получить все URL с веб-страницы Получим нужные URL с веб-страницы в Excel. Сделать запрос к каждому URL, получить таблицы и объединить их по вертикали.
14 Ищем работу через API Head Hunter (hh.ru) Получим таблицу с перечнем вакансий с сайте HH. Получим вакансии, в названии или описании которых встречаются слова SQL, Pandas, Power Query, Power Pivot, Power BI.
15 Запрос к XML Sitemap Сделаем запрос к sitemap.xml, чтобы извлечь список всех веб-страниц сайта.

Я уже неоднократно разбирал способы импорта данных в Excel из интернета с последующим автоматическим обновлением. В частности:

  • В старых версиях Excel 2007-2013 это можно было сделать с помощью прямого веб-запроса.
  • Начиная с 2010 года это можно очень удобно делать с помощью надстройки Power Query.

К этим способам в последних версиях Microsoft Excel теперь можно добавить ещё один — импорт данных из интернета в формате XML с помощью встроенных функций.

XML (eXtensible Markup Language = Расширяемый Язык Разметки) – это универсальный язык, созданный для описания любых данных. По сути, он представляет собой обычный текст, но с добавленными в него специальными тегами для разметки структуры данных. Многие сайты совершенно бесплатно предоставляют всем желающим потоки своих данных в XML-формате для загрузки. На сайте Центрального Банка России (www.cbr.ru), в частности, с помощью подобной технологии отдаются данные по курсам различных валют. С сайта Московской Биржи (www.moex.com) таким же образом можно загрузить котировки акций, облигаций и множество другой полезной информации.

Начиная с версии 2013 в Excel появились две функции для прямой загрузки XML-данных из интернета в ячейки листа: ВЕБСЛУЖБА (WEBSERVICE) и ФИЛЬТР.XML (FILTERXML). Работают они в паре — сначала функция ВЕБСЛУЖБА выполняет запрос к нужному сайту и возвращает его ответ в формате XML, а затем с помощью функции ФИЛЬТР.XML мы «разбираем» этот ответ на составляющие, извлекая из него нужные нам данные.

Давайте рассмотрим работу этих функций на классическом примере – импорте курса любой нужной нам валюты на заданный интервал дат с сайта Центробанка России. В качестве заготовки будем использовать вот такую конструкцию:

Заготовка

Здесь:

  • В жёлтых ячейках находятся даты начала и окончания интересующего нас периода.
  • В синей сделан выпадающий список валют при помощи команды Данные — Проверка — Список (Data — Validation — List).
  • В зеленых ячейках мы будем использовать наши функции, чтобы создать строку запроса и получить ответ сервера.
  • Таблица справа — справочник по кодам валют (потребуется нам чуть позже).

Поехали!

Шаг 1. Формируем строку запроса

Чтобы получить от сайта требуемую информацию, его нужно правильно спросить. Заходим на www.cbr.ru и в подвале главной страницы открываем ссылку’ Технические ресурсы ’- Получение данных, используя XML (http://cbr.ru/development/SXML/). Проматываем чуть ниже и во втором примере (Example 2) будет то, что нам нужно — получение курсов валюты на заданный интервал дат:

Пример строки запроса

Как видно из примера, строка запроса должна содержать даты начала (date_req1) и окончания (date_req2) интересующего нас периода и код валюты (VAL_NM_RQ), курс которой мы хотим получить. Коды основных валют вы можете найти в таблице ниже:

Валюта

Код

                         

Валюта

Код

Австралийский доллар R01010

Литовский лит

R01435

Австрийский шиллинг

R01015

Литовский талон

R01435

Азербайджанский манат

R01020

Молдавский лей

R01500

Фунт стерлингов

R01035

Немецкая марка

R01510

Ангольская новая кванза

R01040

Нидерландский гульден

R01523

Армянский драм

R01060

Норвежская крона

R01535

Белорусский рубль

R01090

Польский злотый

R01565

Бельгийский франк

R01095

Португальский эскудо

R01570

Болгарский лев

R01100

Румынский лей

R01585

Бразильский реал

R01115

Сингапурский доллар

R01625

Венгерский форинт

R01135

Суринамский доллар

R01665

Гонконгский доллар

R01200

Таджикский сомони

R01670

Греческая драхма

R01205

Таджикский рубл

R01670

Датская крона

R01215

Турецкая лира

R01700

Доллар США

R01235

Туркменский манат

R01710

Евро

R01239

Новый туркменский манат

R01710

Индийская рупия

R01270

Узбекский сум

R01717

Ирландский фунт

R01305

Украинская гривна

R01720

Исландская крона

R01310

Украинский карбованец

R01720

Испанская песета

R01315

Финляндская марка

R01740

Итальянская лира

R01325

Французский франк

R01750

Казахстанский тенге

R01335

Чешская крона

R01760

Канадский доллар

R01350

Шведская крона

R01770

Киргизский сом

R01370

Швейцарский франк

R01775

Китайский юань

R01375

Эстонская крона

R01795

Кувейтский динар

R01390

Югославский новый динар

R01804

Латвийский лат

R01405

Южноафриканский рэнд

R01810

Ливанский фунт

R01420

Вон Республики Корея

R01815

Японская иена

R01820

Полный справочник по кодам валют есть там же, на сайте ЦБ – см. http://cbr.ru/scripts/XML_val.asp?d=0

Теперь сформируем строку запроса в ячейке на листе с помощью:

  • оператора склейки текста (&), чтобы собрать воедино;
  • функции ВПР (VLOOKUP), чтобы найти код нужной нам валюты в справочнике;
  • функции ТЕКСТ (TEXT), преобразующей дату по заданному шаблону день-месяц-год через косую черту.

Формируем строку запроса

="http://cbr.ru/scripts/XML_dynamic.asp?date_req1="&ТЕКСТ(B2;"ДД/ММ/ГГГГ")&
"&date_req2="&ТЕКСТ(B3;"ДД/ММ/ГГГГ")&"&VAL_NM_RQ="&ВПР(B4;M:N;2;0)

Шаг 2. Выполняем запрос

Теперь используем функцию ВЕБСЛУЖБА (WEBSERVICE) с созданной строкой запроса в качестве единственного аргумента. Ответом будет длинная строка XML-кода (лучше включить перенос по словам и увеличить размер ячейки, если хочется увидеть её целиком):

XML запрос функцией ВЕБСЛУЖБА в Excel

Шаг 3. Разбираем ответ

Чтобы легче было разобраться в структуре данных ответа, лучше воспользоваться одним из онлайн-парсеров XML (например, http://xpather.com/ или https://jsonformatter.org/xml-parser), которые умеют наглядно форматировать XML-код, добавляя к нему отступы и подсвечивая цветом синтаксис. Тогда всё станет существенно понятнее:

XML-ответ сервера ЦБ РФ

Теперь хорошо видно, что значения курса обрамлены у нас тегами <Value>…</Value>, а даты являются атрибутами Date в тегах <Record>.

Чтобы их извлечь курс, выделим на листе столбец из десяти (или более — если делать с запасом) пустых ячеек (т.к. был задан 10-дневный интервал дат) и введём в строку формул функцию ФИЛЬТР.XML (FILTERXML):

Извлекаем курс

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

Важно после ввода формулы нажать не Enter, а сочетание клавиш Ctrl+Shift+Enter, т.е. ввести её как формулу массива (фигурные скобки вокруг будут добавлены автоматически). Если же у вас последняя версия Office 365 с поддержкой в Excel динамических массивов, то хватит и простого Enter, да и выделять заранее пустые ячейки не требуется — функция сама займет столько ячеек, сколько ей нужно.

Для извлечения дат поступим аналогично – выделим несколько пустых ячеек в соседнем столбце и используем ту же функцию, но с другим запросом XPath, чтобы получить все значения атрибутов Date из тегов Record:

=ФИЛЬТР.XML(B8;»//Record/@Date»)

Теперь в будущем при изменении дат в исходных ячейках В2 и В3 или выборе другой валюты в выпадающем списке ячейки B3, наш запрос будет автоматически обновляться, обращаясь к серверу ЦБ за новыми данными. Чтобы форсировать обновление вручную, можно дополнительно использовать сочетание клавиш Ctrl+Alt+F9.

Ссылки по теме

  • Импорт курса биткойна в Excel через Power Query
  • Импорт курса валют из интернета в старых версиях Excel

Скриншот таблицы котировок ММВБ, загруженных с сервера RBK

Программа предназначена для импорта котировок в Excel с сервера РБК.

Загружаются котировки ММВБ СЭЛТ (realtime) по активным инструментам.

Поскольку штатными средствами Excel (веб-запрос) загрузить данные в Excel не удаётся, — и был написан этот макрос.

Кроме того, преимущество макроса (программной загрузки данных с сайта) перед веб-запросом — отсутствие уведомлений об ошибке доступа
(если сайт недоступен, или доступ в интернет осуществляется с перебоями)

Программа берёт данные не с самой веб-страницы, а выполняет запрос напрямую к серверу
(ответ приходит в формате JSON)

Макрос анализирует ответ сервера, формирует таблицу, и выводит её на лист,
заменяя ранее вставленные данные.

Обновление котировок происходит автоматически, с интервалом в 30 минут
(время можно задать в настройках программы)

Понравилась статья? Поделить с друзьями:
  • Данные курса валют в excel
  • Данные котировок в excel
  • Данные какого типа не могут быть содержимым ячейки excel
  • Данные какого типа могут содержаться в ячейке excel
  • Данные какого типа могут находиться в ячейке excel