UnembossedName
UnembossedName личный блог
28 мая 2019, 11:15

Получение котировок и других параметров нашего рынка в google spreadsheets

Для смартлабовца иногда важно вести какие-либо вычисления по бумагам в режиме лайв.
Да, есть DDE в Квике, но у меня например нет такой возможности на работе. А в гуглспредшитс можно заглянуть прямо с телефона. Гораздо мобильнее получается.

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

Итак, у нас есть открытые данные Мосбиржи в виде древовидной структуры, которые лежат по адресу https://iss.moex.com/iss/engines/

Если тыркнуть по ссылке, увидим список основных площадок.

Как с этим работать

Допустим, нам нужны котировки какой-нибудь ОФЗ, например 26222.
Облигации — это у нас фондовый рынок или stock 
Открываем ссылку https://iss.moex.com/iss/engines/stock/markets/ там мы увидим все субрынки фондового рынка. Нам нужны bonds
Идем по адресу https://iss.moex.com/iss/engines/stock/markets/bonds, видим список площадок с различными режимами 
ОФЗ у нас соответствуют режиму «Т+: Облигации — безадрес.» или TQOB
Чтобы посмотрет все данные об облигациях https://iss.moex.com/iss/engines/stock/markets/bonds/boards/tqob/securities.xml
Вот отсюда мы и будем дергать данные с помощью функции с помощью функции IMPORTXML, которая позволяет искать по этому xml-документу с помощью языка XPath

Вот способы получить некоторые поля
Получение котировок и других параметров нашего рынка в google spreadsheets

Надеюсь схема понятна.
Можно например вывести все цены 
=IMPORTXML(«iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml», "//row/@MARKETPRICE")

Результат заполнит N ячеек вниз

Получение котировок и других параметров нашего рынка в google spreadsheets


P.S. Внимание!

Мне уже 2 человека пожаловались, что «не работает». Дело в том, что из-за того, что данные с iss.moex.com импортируются с точками в качестве разделителей для вычислений я переключил региональные настройки своей таблицы на американские. Поэтому, например, разделитель между аргументами функций таблиц изменился с точки запятой на запятую.
Переключить настройки можно в меню Файл->Настройки таблицы->Общие->Региональные настройки
Ну или можно использовать в качестве разделителя аргументов функций точку с запятой (тогда правда у вас могут быть сложности с дополнительными вычислениями, так как дробные числа не будут трактоваться как числа, поэтому рекомендую первый вариант)
49 Комментариев
  • а есть способ вытягивать данные со страниц смартлаба?
    smart-lab.ru/q/NKNC/f/y/
  • DanVi
    29 мая 2019, 04:06
    UnembossedName, Спасибо за информацию. У меня почему-то после .xml, (запятая) не работает, а с ; (с точкой запятой всё нормально). Не подскажите, как фильтры поставить, чтобы например импортировать ТОЛЬКО облигации с постоянным купонном? А цену закрытия, как вытащить?
  • Turbo Pascal
    29 мая 2019, 09:03
    Чтобы не менять региональные настройки, можно подменить точку на запятую на лету.

    =REPLACE(IMPORTXML(«iss.moex.com/iss/engines/stock/markets/bonds/boards/tqob/securities.xml»;"//row[@SECID="«SU26212RMFS9»"]/@MARKETPRICE");FIND(".";IMPORTXML(«iss.moex.com/iss/engines/stock/markets/bonds/boards/tqob/securities.xml»;"//row[@SECID="«SU26212RMFS9»"]/@MARKETPRICE"));1;",")

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн