Содержание
- Power Query Веб-запросы №5. Котировки Московской биржи
- Описание
- Решение
- Что делает Free API Московской биржи в Google Таблицах
- API Московской биржи в формулах Google Таблиц
- Идентификатор режима торгов
- Автоматическое получение имени инструмента с Московской биржи по его идентификатору
- Автоматическое получение цены инструмента с Московской биржи по его идентификатору
- Автоматическое получение даты следующего купона и его значения с Московской биржи по идентификатору облигации
- Автоматическое получение дивидендной доходности на конкретную дату с Московской биржи по идентификатору облигации
- Автоматическое получение дат оферт с Московской биржи по идентификатору облигации
- Учет инвестиций в гугл-таблицах №2 — получаем котировки акций и ETF с Мосбиржи
- Котировки российских акций
- Получаем цену ETF и БПИФ в рублях / долларах и евро
- Цена иностранных акций на Мосбирже
- Настройка таблицы или возможные проблемы
- Нужно знать
- Готовый шаблон
- Что делает Free API Московской биржи в Google Таблицах
- API Московской биржи в формулах Google Таблиц
- Идентификатор режима торгов
- Автоматическое получение имени инструмента с Московской биржи по его идентификатору
- Автоматическое получение цены инструмента с Московской биржи по его идентификатору
- Автоматическое получение даты следующего купона и его значения с Московской биржи по идентификатору облигации
- Автоматическое получение дивидендной доходности на конкретную дату с Московской биржи по идентификатору облигации
- Автоматическое получение дат оферт с Московской биржи по идентификатору облигации
Power Query Веб-запросы №5. Котировки Московской биржи
Описание
В этом уроке мы научимся получать прямо в 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 и в каждой строке будем запрашивать информация по ссылке.
Источник
Что делает Free API Московской биржи в Google Таблицах
Количество частных инвесторов на Московской бирже удвоилось за последний год и составило 3,86 млн: за 2019 счета на Мосбирже открыли 1,9 млн человек. Санкт-Петербургская биржа, специализирующаяся на торгах акциями иностранных компаний, в прошлом году зафиксировала трехкратный прирост счетов – с 910 000 до 3,06 млн шт.
Это означает, что на рынок пришло почти 2 млн новичков, которые никогда не занимались трейдингом и не использовали специализированный софт для торгов и учета позиций.
И если мобильные приложения брокеров для торгов постоянно обновляются и в целом достаточно удобны для пользователей, то учёт позиций, особенно при использовании нескольких брокеров (счёт от одного, а ИИС от другого) может вызывать вопросы. Бесплатным решением с автоматическим скачиванием котировок и параметров могут быть гугл таблицы с использованием бесплатного API Московской биржи.
Ранее я уже описывал на Хабре возможности при использовании разных приложений (Intuit Quicken, KMyMoney, Microsoft Excel, Google Таблицы) для совокупного учета капитала “в одном окне”.
API Московской биржи в формулах Google Таблиц
Вообще вариантов использования API Мосбиржи два:
Но скрипты в бесплатных документах скорее пугают людей, особенно, если у этих людей есть какие-то инвестиции. И особенно, если они не понимают код скрипта. Поэтому я остановлюсь только на формулах.
В общем виде все запросы, которые можно отправить к API Мосбиржи можно узнать в справочнике. Но лично для меня этот справочник был не очень понятен и я далеко не сразу в нём разобрался, поэтому сделал простую Гугл таблицу с примерами, которые использую сам.
Идентификатор режима торгов
В API Московской биржи очень многое зависит от параметра “Идентификатор режима торгов” (primary_boardid), который можно посмотреть прямо у них на сайте через форму поиска.
Идентификатор режима торгов для акций Сбербанка
Также этот идентификатор можно посмотреть через обычный HTTP-запрос к API:
Идентификатор режима торгов primary_boardid для акций Яндекс
Автоматическое получение имени инструмента с Московской биржи по его идентификатору
Очень удобно, что можно получить полное наименование инструмента. Также можно автоматически получать и краткое наименование инструмента, но полное название более понятно особенно для облигаций.
Гугл таблица с примерами автоматического получения имени для разных классов активов
Автоматическое получение цены инструмента с Московской биржи по его идентификатору
Цены на российские активы можно получать с множества сайтов, но если мы говорим про API Московской биржи, то на этой вкладке представлены актуальные примеры.
Гугл таблица с примерами автоматического получения цен для разных классов активов
Автоматическое получение даты следующего купона и его значения с Московской биржи по идентификатору облигации
По облигациям (не только корпоративным, но также ОФЗ и еврооблигациям) можно автоматически получать дату выплаты следующего купона и его значение.
Гугл таблица с примерами автоматического получения дат и значений купонов
Автоматическое получение дивидендной доходности на конкретную дату с Московской биржи по идентификатору облигации
К сожалению, в одну формулу получить значение дивидендной доходности для облигации на конкретную дату можно получить только для ОФЗ, потому что их список короткий. Для корпоративных облигаций — можно перебирать в скрипте, например, или вручную указывать начальную позицию для поиска.
Гугл таблица с примерами автоматического получение дивидендной доходности на конкретную дату
Автоматическое получение дат оферт с Московской биржи по идентификатору облигации
Очень удобно можно планировать собственные финансы, получая оферты по облигациям автоматически.
Гугл таблица с примерами автоматического получения дат оферт
API Московской биржи предоставляет широкие возможности. В статье описал только те инструменты, которыми пользуюсь сам как долгосрочный частный инвестор.
Также хочу отметить, что никак не связан с Московской биржей и использую ИСС Мосбиржи только в личных интересах, например, для учета собственного капитала.
Автор: Михаил Шардин,
4 февраля 2020 г.
Источник
Учет инвестиций в гугл-таблицах №2 — получаем котировки акций и ETF с Мосбиржи
В прошлой статье мы разобрали способ получения котировок акций ( и ETF) с помощью функции GoogleFinance. Правда по некоторым российским бумагам получении инфы таким образом невозможно. Речь идет о привилегированных акциях (типа Сбера, Татнефти, Сургута) и практически всех российских биржевых фондах (FXIT, VTBX, SBSP и так далее).
Ок, будет разбираться как это можно сделать другим способом. Расскажу какие формулы можно использовать для этих целей. Отдаю готовый шаблон гугл-таблицы с уже заполненными данными.
Котировки российских акций
Для вызова котировок привилегированных акций (впрочем как и обыкновенных) используем формулу следующего вида (все пишется слитно, без пробелов):
= IMPORTxml ( «https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST» , concatenate ( «//row[@SECID=’» , B5 , «‘]/@LAST» ) )
В формуле B5 (выделено красным) — это адрес ячейки, где прописан тикер акции (у вас адрес может быть другим). В остальном формула остается неизменной для всех российских акций.
Вот как это выглядит в таблице:
Получение котировок для российских привилегированных акций
Дополнительно, чтобы не прописывать руками, можно сделать автоматический вывод названия компании. Мы сразу будем видеть, что формула ничего не путает и отдает нам котировки нужных нам акций.
Для вывода названия акций (компании) используем формулу:
= IMPORTxml ( «https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,SECNAME» , concatenate ( «//row[@SECID=’» , B5 , «‘]/@SECNAME» ) )
Также при необходимости меняем только адрес ячейки с тикером (в моей формуле — это B5).
Получаем цену ETF и БПИФ в рублях / долларах и евро
Если мы захотим получить котировки российских биржевых фондов по вышеописанной формуле, просто заменив тикер акции на тикер ETF (или БПИФ), то нас постигнет фиаско. Формула будет выдавать ошибку.
Для биржевых фондов нужна формула следующего вида:
= IMPORTxml ( «https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQTF/securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST» , concatenate ( «//row[@SECID=’» , B14 , «‘]/@LAST» ) )
Как всегда, при необходимости меняем адрес ячейки с тикером.
Получаем название и котировки российских биржевых фондах в Гугл-таблицах
На первый взгляд формулы для акций и ETF абсолютно идентичны. Правда есть небольшое отличие всего в четыре буквы. Для вызова акций мы использовали в формуле TQBR, а для ETF — заменили на TQTF.
Что это за зверь такой?
TQBR или TQTF — это идентификатор режима торгов. Узнать его можно на сайте Мосбирже. Идентификатор прописывается в карточку каждого инструмента. Для примера возьмем ETF FXRU. Находим его через поиск на сайте бирже. И видим TQTF.
Соответственно прописываем в формулу нужный идентификатор.
Дабы сэкономить читателю время, в формуле вызова котировок используем идентификатор:
- для акций — TQBR;
- для рублевых ETF — TQTF;
- для ETF с расчетам в евро — TQTE;
- для ETF с расчетам в долларах — TQTD.
Для автоматического получения названия фонда по тикеру, в формуле соответственно также нужно поменять идентификатор.
В таблице накидал несколько примеров вызова цен по валютным фондам.
Выводим котировки биржевых фондов РФ в долларах и евро
Цена иностранных акций на Мосбирже
На Московской бирже обращаются иностранные акции, номинированные в рублях.
В отличии от оригинала, они имеют тикер дополненный «-RM». То есть для Apple, рублевый тикер будет AAPL-RM, для Facebook вместо FB — пишем FB-RM и так далее.
Формула вызова котировок имеет следующий вид:
= IMPORTxml ( «https://iss.moex.com/iss/engines/stock/markets/ foreignshares /boards/ FQBR /securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST» , concatenate ( «//row[@SECID=’» , B47 , «‘]/@LAST» ) )
Красным пометил отличия от предыдущих формул:
- Как обычно — меняем адрес ячейки с тикером под себя.
- Рублевые иностранные акции имеют идентификатор торгов — FQBR
- Вместо shares ставим foreignshares (иностранные ценные бумаги).
Настройка таблицы или возможные проблемы
Иногда про получении данных о котировках по API (по вышеописанным формулам) может выходить ошибка. Часто причина ошибки — неправильные настройки таблицы. Данные передаются в формате дробных чисел с точкой (например — 0.55). В настройках вашей таблицы может по умолчанию стоит отображение чисел с запятой (0,55).
Для исправлении ошибки выбираем в меню «Файл->Настройки таблицы».
На вкладке «Общие» в поле Региональные настройки» нужно выбрать Соединенные Штаты.
Нужно знать
Не забываем про задержку во времени. Так же как и ГуглФинанс, котировки по API Мосбиржи подгружаются примерно с 20 минутным опозданием.
На открытии торгов Мосбиржи (в 10 утра по МСК) — некоторое время все (или многие) котировки могут быть недоступны и формула будет выдавать ошибку.
В приоритете (там где это возможно) лучше использовать функцию GoogleFinfnce. Если в таблице много инструментов, то загрузка по API может быть очень долгой. В этом плане Гуглфинанс работает пошустрее. Поэтому используем API Мосбиржи только там, где Гугл бессилен: префы российских компаний и биржевые фонды.
Для акций у которых котировки рассчитываются до более 2-х знаков после запятой, тоже лучше использовать API. В этом случае цена будет передаваться более точная.
Как пример, акции ВТБ. Текущие котировки — 0.04244. GoogleFinance округлит цену до 0.04.
Из подобного есть еще Русал, ИнтерРао, Русгидро, АФК Система, Россети, ФСК ЕЭС и много чего еще.
Готовый шаблон
Как всегда прикладывают файл-шаблон со всеми прописанными формулами. Таблица только для просмотра. Для использования сохраните себе копию (в верхнем меню: «Файл — > Создать копию»).
Комментарии, замечания, пожелания приветствуются!
В третьей части будем автоматически выдергивать информацию по дивидендам российских акций.
Как оказалось после публикации статьи — при копировании формул вызова котировок выходила ошибка. Проблема заключалась в неправильном отображении блогом кавычек. Вместо двойных кавычек (сверху и снизу по две запятых » . текст. » система отображала французские (или кавычки-елочки). А для гугл-таблиц — это ошибка. Сейчас настроил правильное отображение и все работает.
Всем огромное спасибо за замечания!
Источник
Что делает Free API Московской биржи в Google Таблицах
Количество частных инвесторов на Московской бирже удвоилось за последний год и составило 3,86 млн: за 2019 счета на Мосбирже открыли 1,9 млн человек. Санкт-Петербургская биржа, специализирующаяся на торгах акциями иностранных компаний, в прошлом году зафиксировала трехкратный прирост счетов – с 910 000 до 3,06 млн шт.
Это означает, что на рынок пришло почти 2 млн новичков, которые никогда не занимались трейдингом и не использовали специализированный софт для торгов и учета позиций.
И если мобильные приложения брокеров для торгов постоянно обновляются и в целом достаточно удобны для пользователей, то учёт позиций, особенно при использовании нескольких брокеров (счёт от одного, а ИИС от другого) может вызывать вопросы. Бесплатным решением с автоматическим скачиванием котировок и параметров могут быть гугл таблицы с использованием бесплатного API Московской биржи.
Ранее я уже описывал на Хабре возможности при использовании разных приложений (Intuit Quicken, KMyMoney, Microsoft Excel, Google Таблицы) для совокупного учета капитала “в одном окне”.
А сейчас я бы хотел остановиться именно на программном интерфейсе к информационно-статистическому серверу Московской Биржи (ИСС / ISS).
API Московской биржи в формулах Google Таблиц
Вообще вариантов использования API Мосбиржи два:
Но скрипты в бесплатных документах скорее пугают людей, особенно, если у этих людей есть какие-то инвестиции. И особенно, если они не понимают код скрипта. Поэтому я остановлюсь только на формулах.
В общем виде все запросы, которые можно отправить к API Мосбиржи можно узнать в справочнике. Но лично для меня этот справочник был не очень понятен и я далеко не сразу в нём разобрался, поэтому сделал простую Гугл таблицу с примерами, которые использую сам.
Идентификатор режима торгов
В API Московской биржи очень многое зависит от параметра “Идентификатор режима торгов” (primary_boardid), который можно посмотреть прямо у них на сайте через форму поиска.
Идентификатор режима торгов для акций Сбербанка
Также этот идентификатор можно посмотреть через обычный HTTP-запрос к API:
Идентификатор режима торгов primary_boardid для акций Яндекс
Автоматическое получение имени инструмента с Московской биржи по его идентификатору
Очень удобно, что можно получить полное наименование инструмента. Также можно автоматически получать и краткое наименование инструмента, но полное название более понятно особенно для облигаций.
Гугл таблица с примерами автоматического получения имени для разных классов активов
Автоматическое получение цены инструмента с Московской биржи по его идентификатору
Цены на российские активы можно получать с множества сайтов, но если мы говорим про API Московской биржи, то на этой вкладке представлены актуальные примеры.
Гугл таблица с примерами автоматического получения цен для разных классов активов
Автоматическое получение даты следующего купона и его значения с Московской биржи по идентификатору облигации
По облигациям (не только корпоративным, но также ОФЗ и еврооблигациям) можно автоматически получать дату выплаты следующего купона и его значение.
Гугл таблица с примерами автоматического получения дат и значений купонов
Автоматическое получение дивидендной доходности на конкретную дату с Московской биржи по идентификатору облигации
К сожалению, в одну формулу получить значение дивидендной доходности для облигации на конкретную дату можно получить только для ОФЗ, потому что их список короткий. Для корпоративных облигаций — можно перебирать в скрипте, например, или вручную указывать начальную позицию для поиска.
Гугл таблица с примерами автоматического получение дивидендной доходности на конкретную дату
Автоматическое получение дат оферт с Московской биржи по идентификатору облигации
Очень удобно можно планировать собственные финансы, получая оферты по облигациям автоматически.
Гугл таблица с примерами автоматического получения дат оферт
API Московской биржи предоставляет широкие возможности. В статье описал только те инструменты, которыми пользуюсь сам как долгосрочный частный инвестор.
Также хочу отметить, что никак не связан с Московской биржей и использую ИСС Мосбиржи только в личных интересах.
Автор: Михаил Шардин,
4 февраля 2020 г.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Источник
Файлы к уроку:
- Для спонсоров 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, чтобы извлечь список всех веб-страниц сайта. |
Время прочтения: 4 мин.
Довольно часто, при аудите сервисов, работающих с внешними финансовыми потоками, возникает необходимость оценки корректности получения, обработки и хранения внешней информации в СУБД компании. Одним из таких примеров является аудит системы биржевой торговли Quik. Для анализа необходима информация о котировках ценных бумаг за продолжительный период времени с различной детализацией (от минуты до дня). Разумеется, требуется информация не об одной или двух котировках, а о десятках или сотнях. В решении данной проблемы поможет python библиотека apimoex, предоставляемая непосредственно Московской биржей, которая доступна по следующей ссылке.
Данные о необходимых котировках и временных интервалах предоставляются в виде excel файла, состоящего из трех колонок: название бумаги, дата, время.
Для начала скачаем необходимые библиотеки, для этого запустим команду:
pip install apimoex requests pandas
После установки необходимых библиотек, импортируем их внутри нашего проекта:
import requests
import apimoex
import pandas as pd
import sys
Далее задаем режим торгов:
board = 'TQBR'
Откроем наш файл с помощью модуля pandas и производим препроцессинг данных:
df_excel = pd.read_excel(“path to excel file”)
column_name = [i for i in df_excel]
df_excel[column_name[1]] = df_excel[column_name[1]].map(str).map(lambda x: x[:10])
df_cotir = df_excel.drop_duplicates(subset=[column_name[0], column_name[1]])
df_cotir[column_name[0]] = df_cotir[column_name[0]].map(str)
ticks = [line.rstrip() for line in df_cotir[column_name[0]]]
dates = [line.rstrip() for line in df_cotir[column_name[1]]]
Стоит отметить, что api биржи позволяют скачать данные только за заданный период времени, а не в определенную минуту. Поэтому мы будем скачивать данные поминутно за весь день, а потом отбирать необходимые минуты.
Скачивать сами данные будем с помощью функции get_board_candles с параметрами:
- session – Сессия интернет соединения
- security – Тикер ценной бумаги
- interval – Размер свечки — целое число 1 (1 минута), 10 (10 минут), 60 (1 час), 24 (1 день), 7 (1 неделя), 31 (1 месяц) или 4 (1 квартал). По умолчанию дневные данные
- start – Дата вида ГГГГ-ММ-ДД. При отсутствии данные будут загружены с начала истории
- end – Дата вида ГГГГ-ММ-ДД. При отсутствии данные будут загружены до конца истории. Для текущего дня будут загружены не окончательные данные, если торги продолжаются
- columns – Кортеж столбцов, которые нужно загрузить — по умолчанию момент начала свечки и HLOCV. Если пустой или None, то загружаются все столбцы
- board – Режим торгов — по умолчанию основной режим торгов T+2
- market – Рынок — по умолчанию акции
- engine – Движок — по умолчанию акции
Далее открываем сессию для экспорта котировок сохраняем полученные результаты в список из pandas DataFrame:
tick_history, process = list(), 0
with requests.Session() as session:
for i in range(len(ticks)):
process = process + 1
print((process / len(ticks)) * 100, '%', process)
data = apimoex.get_board_candles(session, security=ticks[i], interval=1, start=dates[i], end=dates[i], board=board, market=market_type)
if data == []:
continue
df = pd.DataFrame(data)
df['TICKER'] = ticks[i]
cols = df.columns.tolist()
cols = cols[-1:] + cols[:-1]
df = df[cols]
tick_history.append(df)
Далее объединяем список котировок в pandas DataFrame и преобразовываем колонку с временем и датой в две:
df_finale = pd.concat(tick_history)
df_finale['begin'] = pd.DataFrame(df_finale['begin'])
df_finale['date'] = df_finale['begin'].map(lambda x: x[:10])
df_finale['time'] = df_finale['begin'].map(lambda x: x[11:])
Остается выбрать данные с необходимым нам временем:
cols = df_finale.columns.tolist()
cols = cols[:1] + cols[-2:] + cols[1:-2]
df_finale = df_finale[cols]
df_finale.drop('begin', 1)
df_finale['date'] = df_finale['date'].map(str)
df_finale["time"] = df_finale["time"].map(str).map(lambda x: x[:5])
df_excel = df_excel.rename({column_name[2]: "time", column_name[1]: 'date', column_name[0]: 'TICKER'}, axis=1)
df_finale = pd.merge(df_finale, df_excel[['TICKER', 'date', "time"]], on=['TICKER', 'date', "time"], how='inner')
В конце, сохраняем результат в csv файл:
df_finale.drop_duplicates().to_csv("result.csv", index=False, sep='|')
Загруженные данные можно агрегировать до нужных таймфреймов:
import datetime
def add_delta(tme, delta=1):
if tme != None:
tme =list(map(int, tme.split(':')))
tme = datetime.time(tme[0],tme[1],0)
return (datetime.datetime.combine(datetime.date.today(), tme) + datetime.timedelta(minutes=delta)).time()
timewindow = datatime.time (hours = 13, minutes = 43)
df_hour_frame = df_finale[(df_finale ['time'] >= timewindow) & (df_finale['time'] <= add_delta(timewindow, datatime.timedelta(minutes = 60))]
df_hour_frame['low in range'] = df_hour_frame['low'].min()
df_hour_frame['high in range'] = df_hour_frame['high'].max()
df_hour_frame['max value in range'] = df_hour_frame['value'].max()
df_hour_frame['min value in range'] = df_hour_frame['value'].min()
Представленный подход позволяет произвести независимую оценку корректности работы автоматизированных систем компании с использованием данных первоисточника и выявить проблемы с некорректным реплицированием данных в СУБД либо задержки в получении данных.
Я использую гугл-таблицы для портфеля инвестиций, потому что с ними проще вести учет.
Упрощение связано с тем, что можно в автоматическом режиме получать данные о текущих ценах и других параметрах активов, которые публикуются открыто.
Для этого я комбинирую три бесплатных сервиса, которые подтягивают данные с разных бирж с помощью API. В статье расскажу, как настроить их под свои нужды.
Что за АПИ
В большинстве случаев данные с бирж передаются через программный интерфейс, называемый API — application programming interface. Грубо говоря, это инструмент, благодаря которому одна программа начинает говорить на одном языке с другой. В нашем случае мы используем API финансовых бирж для «дружбы» с гугл-таблицами.
API Московской биржи
Для чего. Получить информацию о российских акциях и облигациях.
Как это работает. У Московской биржи есть API, который позволяет видеть любую информацию с российской биржи внутри гугл-таблиц. Например, можно получать имена инструментов, цены закрытий, даты оферт и другие параметры.
Работа этой функции полностью зависит от сервера Московской биржи. Если биржа поменяет формат выдачи, организует какие-то другие режимы торгов или изменит что-то в существующей системе, то для корректной работы формул потребуется их доработка.
Такая выборочная информация с биржи пригодится для разных целей. Можно создать гугл-таблицу, чтобы покупать облигации с хорошей ликвидностью, — об этом я уже рассказывал. А можно следить за параметрами бумаг в собственном портфеле — например, за датами оферт. Это поможет не пропустить важную дату, если хотите принять участие в досрочном погашении.
Еще таблица пригодится, если вас не устраивают существующие сервисы учета — Intelinvest и Investing.com.
В таблице-примере к этой статье я привел несколько полезных параметров ценных бумаг. Вот что она умеет:
- подтягивать название бумаги по идентификатору — столбец «Названия акций и облигаций»;
- показывать текущие курсы — столбец «Цены акций и облигаций»;
- получать даты выплат облигаций — столбец «Даты купона и значения для облигаций»;
- получать дивиденды — столбец «Даты и значения дивиденда для акций»;
- видеть возможность досрочного погашения облигаций — столбец «Даты оферт».
Список далеко не полный, ведь на Мосбирже огромное количество параметров, включая срочный рынок и валюты.
Я везде старался использовать формулы в понятной записи с разбивкой на несколько строк — чтобы каждый смог воспроизвести эту конструкцию в своей таблице.
Попробовать таблицу
Googlefinance внутри гугл-таблиц
Для чего. Получить информацию об американских акциях, которые торгуются на Санкт-Петербургской бирже.
Как это работает. Googlefinance — это встроенная функция гугл-таблиц. Она помогает получить текущие или архивные данные о ценных бумагах из сервиса «Гугл-финансы».
Российские акции в сервисе тоже есть. Чтобы их увидеть, надо указывать тикер — то есть код из нескольких букв, который принадлежит определенному финансовому инструменту, — с приставкой «MCX:» так, чтобы получилось «MCX:SBER».
Эта функция позволяет получать название, текущую цену акций и еще 18 параметров — например, максимальную и минимальную цену за 52 недели, количество акций в обращении. Все это есть в моем шаблоне.
Главное преимущество в том, что формулы для получения этих параметров предельно просты: например, имя бумаги — name, самая высокая цена на текущий день — high. Описание всех формул и атрибутов есть в инструкции от Гугла.
В первом столбце я оставил идентификаторы двух акций — Сбербанка (MCX;SBER) и «Нетфликс» (NFLX) — и фонда Van Eck (RSX). При изменении тикеров во втором столбце будет подтягиваться название акций и актуальные цены.
А чтобы получить подробную информацию об акции или фонде, используйте ячейки В13 и В35: в них нужно занести тикер и в таблицах ниже сразу же обновится информация.
Например, вы хотите отслеживать акции американского производителя сетевого оборудования Ubiquiti Inc (UI) и высокодивидендного фонда Highland Small-Cap Equity Y (HSZYX). В ячейку В13 заносите тикер акции UI, а в ячейку В35 — тикер фонда HSZYX. Получите 19 параметров каждой бумаги.
Смотрите, как это работает:
Попробовать таблицу
«Яху-финанс»
Для чего. Отслеживать любые финансовые данные со всего мира.
Как это работает. «Яху-финанс» передает данные с рынков 79 стран, включая Россию.
Чтобы подружить «Яху» и таблицы, можно пойти двумя путями: написать скрипт, который будет импортировать выдачу API в специальном текстовом формате JSON в гугл-таблицу, или воспользоваться формулой IMPORTHTML — еще есть вариант с IMPORTXML, — которая импортирует таблицы и списки с сайтов.
Я остановился на втором варианте — получение данных через формулу IMPORTHTML. Важно: эта формула подтягивает данные только из таблиц или списков, другую информацию через нее не получить.
Формула работает так: сервис Гугла обращается по адресу страницы, указанному в формуле, и ищет все таблицы, которые обозначены в разметке этой страницы. Таблиц может быть несколько, но у каждой свой порядковый номер. Поэтому в формуле нужно указать конкретный номер таблицы — данные из нее и появятся в гугл-таблице.
Моя формула обращается к тикеру, который нужно прописать самостоятельно, и ищет данные по этой акции на «Яху». К написанию некоторых тикеров есть требования:
- для российских акций после тикера нужно добавить приставку «.ME», чтобы получилось LKOH.ME;
- для бумаг, торгующихся на немецкой бирже, нужно добавить «.DE». Например, чтобы посмотреть подробности по Bayerische Motoren Werke Aktiengesellschaft (BMW), надо написать BMW.DE;
- для итальянской фондовой биржи Borsa Italiana S.p. A., ISE, расположенной в Милане, после тикера надо дописывать приставку «.MI», чтобы получилось UBI.MI.
Попробовать таблицу
Запомнить
- API Московской биржи в гугл-таблицах — практически самый быстрый способ получить данные с Мосбиржи.
- Встроенная функция Googlefinance внутри гугл-таблиц пригодится, если нет времени разбираться с формулами, но хочется видеть курсы акций.
- Любые финансовые данные со всего мира получайте в API «Яху-финанс» с помощью простой функции IMPORTHTML.
- Если вы только начинаете инвестировать, пройдите бесплатный курс от Т—Ж: на сайте или в приложении для iOS.
В прошлой статье мы разобрали способ получения котировок акций ( и ETF) с помощью функции GoogleFinance. Правда по некоторым российским бумагам получении инфы таким образом невозможно. Речь идет о привилегированных акциях (типа Сбера, Татнефти, Сургута) и практически всех российских биржевых фондах (FXIT, VTBX, SBSP и так далее).
Ок, будет разбираться как это можно сделать другим способом. Расскажу какие формулы можно использовать для этих целей. Отдаю готовый шаблон гугл-таблицы с уже заполненными данными.
Итак, поехали!
Содержание
- Котировки российских акций
- Получаем цену ETF и БПИФ в рублях / долларах и евро
- Цена иностранных акций на Мосбирже
- Настройка таблицы или возможные проблемы
- Нужно знать
- Готовый шаблон
Котировки российских акций
Для вызова котировок привилегированных акций (впрочем как и обыкновенных) используем формулу следующего вида (все пишется слитно, без пробелов):
=IMPORTxml(«https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST», concatenate(«//row[@SECID='»,B5,«‘]/@LAST»))
В формуле B5 (выделено красным) — это адрес ячейки, где прописан тикер акции (у вас адрес может быть другим). В остальном формула остается неизменной для всех российских акций.
Вот как это выглядит в таблице:
Дополнительно, чтобы не прописывать руками, можно сделать автоматический вывод названия компании. Мы сразу будем видеть, что формула ничего не путает и отдает нам котировки нужных нам акций.
Для вывода названия акций (компании) используем формулу:
=IMPORTxml(«https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,SECNAME», concatenate(«//row[@SECID='»,B5,«‘]/@SECNAME»))
Также при необходимости меняем только адрес ячейки с тикером (в моей формуле — это B5).
Получаем цену ETF и БПИФ в рублях / долларах и евро
Если мы захотим получить котировки российских биржевых фондов по вышеописанной формуле, просто заменив тикер акции на тикер ETF (или БПИФ), то нас постигнет фиаско. Формула будет выдавать ошибку.
В чем дело?
Для биржевых фондов нужна формула следующего вида:
=IMPORTxml(«https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQTF/securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST», concatenate(«//row[@SECID='»,B14,«‘]/@LAST»))
Как всегда, при необходимости меняем адрес ячейки с тикером.
На первый взгляд формулы для акций и ETF абсолютно идентичны. Правда есть небольшое отличие всего в четыре буквы. Для вызова акций мы использовали в формуле TQBR, а для ETF — заменили на TQTF.
Что это за зверь такой?
TQBR или TQTF — это идентификатор режима торгов. Узнать его можно на сайте Мосбирже. Идентификатор прописывается в карточку каждого инструмента. Для примера возьмем ETF FXRU. Находим его через поиск на сайте бирже. И видим TQTF.
Соответственно прописываем в формулу нужный идентификатор.
Дабы сэкономить читателю время, в формуле вызова котировок используем идентификатор:
- для акций — TQBR;
- для рублевых ETF — TQTF;
- для ETF с расчетам в евро — TQTE;
- для ETF с расчетам в долларах — TQTD.
Для автоматического получения названия фонда по тикеру, в формуле соответственно также нужно поменять идентификатор.
В таблице накидал несколько примеров вызова цен по валютным фондам.
Цена иностранных акций на Мосбирже
На Московской бирже обращаются иностранные акции, номинированные в рублях.
В отличии от оригинала, они имеют тикер дополненный «-RM». То есть для Apple, рублевый тикер будет AAPL-RM, для Facebook вместо FB — пишем FB-RM и так далее.
Формула вызова котировок имеет следующий вид:
=IMPORTxml(«https://iss.moex.com/iss/engines/stock/markets/foreignshares/boards/FQBR/securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST», concatenate(«//row[@SECID='»,B47,«‘]/@LAST»))
Красным пометил отличия от предыдущих формул:
- Как обычно — меняем адрес ячейки с тикером под себя.
- Рублевые иностранные акции имеют идентификатор торгов — FQBR
- Вместо shares ставим foreignshares (иностранные ценные бумаги).
Настройка таблицы или возможные проблемы
Иногда про получении данных о котировках по API (по вышеописанным формулам) может выходить ошибка. Часто причина ошибки — неправильные настройки таблицы. Данные передаются в формате дробных чисел с точкой (например — 0.55). В настройках вашей таблицы может по умолчанию стоит отображение чисел с запятой (0,55).
Для исправлении ошибки выбираем в меню «Файл->Настройки таблицы».
На вкладке «Общие» в поле Региональные настройки» нужно выбрать Соединенные Штаты.
Нужно знать
Не забываем про задержку во времени. Так же как и ГуглФинанс, котировки по API Мосбиржи подгружаются примерно с 20 минутным опозданием.
На открытии торгов Мосбиржи (в 10 утра по МСК) — некоторое время все (или многие) котировки могут быть недоступны и формула будет выдавать ошибку.
В приоритете (там где это возможно) лучше использовать функцию GoogleFinfnce. Если в таблице много инструментов, то загрузка по API может быть очень долгой. В этом плане Гуглфинанс работает пошустрее. Поэтому используем API Мосбиржи только там, где Гугл бессилен: префы российских компаний и биржевые фонды.
Для акций у которых котировки рассчитываются до более 2-х знаков после запятой, тоже лучше использовать API. В этом случае цена будет передаваться более точная.
Как пример, акции ВТБ. Текущие котировки — 0.04244. GoogleFinance округлит цену до 0.04.
Из подобного есть еще Русал, ИнтерРао, Русгидро, АФК Система, Россети, ФСК ЕЭС и много чего еще.
Готовый шаблон
Как всегда прикладывают файл-шаблон со всеми прописанными формулами. Таблица только для просмотра. Для использования сохраните себе копию (в верхнем меню: «Файл — > Создать копию»).
Комментарии, замечания, пожелания приветствуются!
В третьей части будем автоматически выдергивать информацию по дивидендам российских акций.
Как оказалось после публикации статьи — при копировании формул вызова котировок выходила ошибка. Проблема заключалась в неправильном отображении блогом кавычек. Вместо двойных кавычек (сверху и снизу по две запятых » … текст… » система отображала французские (или кавычки-елочки). А для гугл-таблиц — это ошибка. Сейчас настроил правильное отображение и все работает.
Всем огромное спасибо за замечания!
Удачных инвестиций!
Господа, есть замечательный скрипт для работы с XML ЦБ РФ (к сожалению не знаю его автора)
Синтаксис (пример):
Код |
---|
=CBR("USD";”04.07.2019”) |
Код:
Код |
---|
Option Explicit Function CBR(Optional ForeignCurrency As String, Optional Data As Date) As Double Dim xmDoc As Object, date_req As String Set xmDoc = CreateObject("msxml2.DOMDocument") If Not CBool(Len(ForeignCurrency)) Then ForeignCurrency = "USD" date_req = "?date_req=" & IIf(Data, Data, Date) xmDoc.async = 0: xmDoc.Load ("http://www.cbr.ru/scripts/XML_daily.asp" & date_req) With xmDoc.SelectSingleNode("*/Valute[CharCode='" & UCase(ForeignCurrency) & "']") CBR = CDbl(.ChildNodes(4).Text) / Val(.ChildNodes(2).Text) End With Set xmDoc = Nothing End Function |
а есть API Московской биржи, позволяющий вытащить информацию по ценной бумаге, например:
http://iss.moex.com/iss/history/engines/stock/markets/bonds/securities/RU000A100436.xml?from=2019-03..
.
где есть параметры, например DURATION
как написать скрипт, чтобы распарсить биржевой XML, чтобы вытащить строку DURATION?
Да, биржа представляет данные в разных форматах JSON, CSV и т.д., просто поменяйте расширение файла.
Прошу помочь)