Нам понадобится сам сайт мосбиржи с данными по котировкам. Еще нам пригодится сайт
xpather.com/
Погнали -
1. Надо где-то найти код бумаги, посмотрите у брокера в приложении, для примера — пусть мы хотим затащить в Google таблицу фонд недвижимости сбера, находим что код у СФНАрБиз7 будет RU000A1034U7. Если в приложении не видно, гляньте в отчетах, или на сайте мосбиржи есть страничка вашего актива, для этого фонда вот она
www.moex.com/ru/issue.aspx?board=TQPI&code=RU000A1034U7
2. Находим данные в XML, не всегда это просто, если не удается нагуглить, то идем сюда
iss.moex.com/iss/engines/stock/markets/
и пытаемся понять к какому рынку это относится, что не всегда очевидно. Допустим опытным путем определили что это в shares/securitues, добавляем к URL
iss.moex.com/iss/engines/stock/markets/shares/securities/RU000A1034U7
Ну и чтобы получить XML добавим в конце xml:
iss.moex.com/iss/engines/stock/markets/shares/securities/RU000A1034U7.xml
3. Получили всё в формате XML, визуально нашли в каком разделе находится то что мы ищем и видим что это в rows, PREVPRICE=«87500» это то что нам надо
4. В таблицы Google это вставляется с помощью функции IMPORTXML. Вот её описание
support.google.com/docs/answer/3093342?hl=en видим что у нее два аргумента, которые нам нужны — это url и xpath_query. URL мы уже нашли, нам нужно понять как по xml сделать нужный нам xpath. Идём на сайт
xpather.com/ ,
вставляем слева наш xml и сверху вбиваем xpath, нам не нужно ничего сложного городить как в их примере, нам просто нужно достать вложенные данные. Наш PREVPRICE лежит в разделе document-->data-->rows-->row, соответственно вбиваем /document/data/rows/row/@PREVPRICE и видим как нужное значение подсветилось в XML — мы всё правильно сделали, составим формулу для получения цены этого фонда =IMPORTXML(«
iss.moex.com/iss/engines/stock/markets/shares/securities/RU000A1034U7.xml», "/document/data/rows/row/@PREVPRICE")
5. Можно опционально улучшить, сделать формулу универсальной — подставить в формулу код бумаги из другой ячейки (пусть в B45 лежит RU000A1034U7):
=IMPORTXML(«
iss.moex.com/iss/engines/stock/markets/shares/securities/»&B45&".xml", "/document/data/rows/row/@PREVPRICE")
Если кто-то знает как находить xml данные на moex быстрее — пишите в комменты, может справочник где-то есть
Оставлю ссылку на телеграм канал
t.me/i_will_retire там всякие полезности про FIRE, кто интересуется — добро пожаловать
Ars Analysis,
Например для облигаций ОФЗ, получение рыночной цены:
=ПОДСТАВИТЬ( ФИЛЬТР.XML(ВЕБСЛУЖБА(«iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml?»);"//document//data//rows//row[@SECID='"&A7&"']/@PRICE");".";",")
Тикер эмитента читается из ячейки A7, например там записано:
SU52003RMFS9 (это ОФЗ-ИН 52003)
Для корпоративных облигаций:
=ПОДСТАВИТЬ( ФИЛЬТР.XML(ВЕБСЛУЖБА(«iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml?»);"//document//data//rows//row[@SECID='"&A7&"']/@PRICE");".";",")
Тикер эмитента читается из ячейки A7, например там записано:
RU000A105A95
Смартлаб искажает кавычки — нужно заменить все кавычки елочки и заменить на обычные двойные кавычки.
iss.moex.com/iss/engines/stock/markets/bonds/boards/TQCB/securities.xml
доска нужна TQCB
=IMPORTXML(«iss.moex.com/iss/engines/stock/markets/shares/securities/SBER.xml», "/document/data[@id="«marketdata»"]/rows/row[@BOARDID="«TQBR»"]/@MARKETPRICE")
=ПОДСТАВИТЬ( ФИЛЬТР.XML(ВЕБСЛУЖБА(«iss.moex.com/iss/engines/stock/markets/bonds/boards/TQCB/securities/RU000A105A95.xml»);"//document//data//rows//row/@PREVPRICE");".";",")
А вот если вы будете получать индивидуальный XML для каждой ценной бумаги, то это будет 10-20-100 разных страниц. И загрузка замедлится и сервер Мосбиржи может обрабатывать с задержкой кучу разных запросов.
Мосбиржа даже генерит в таком виде данные сильно быстрее.
PS Для себя лично по облигациям данные вытягиваю так доходность рассчитывать. JSON у них тоже есть, но он криво построен, по сути они не парились от слова совсем и тот же CSV засунули по-быстрому внутрь оболочки от JSON (не рекомендую его использовать).
бесплатное API, лаги гарантируются:)
У меня сейчас открытие документа занимает около 4-5 секунд пока данные не подтянутся с сервера.
Даже просто открытие одного XML файла Мосбиржи в браузере занимает значительное время (3-4 секунды).
В плане ускорения генерации не забывайте еще фильтры накладывать через ?iss.only=securities или ?iss.only=marketdata