Для смартлабовца иногда важно вести какие-либо вычисления по бумагам в режиме лайв.
Да, есть 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
Вот способы получить некоторые поля
Надеюсь схема понятна.
Можно например вывести все цены
=IMPORTXML(«iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml», "//row/@MARKETPRICE")
Результат заполнит N ячеек вниз
P.S. Внимание!
Мне уже 2 человека пожаловались, что «не работает». Дело в том, что из-за того, что данные с iss.moex.com импортируются с точками в качестве разделителей для вычислений я переключил региональные настройки своей таблицы на американские. Поэтому, например, разделитель между аргументами функций таблиц изменился с точки запятой на запятую.
Переключить настройки можно в меню
Файл->Настройки таблицы->Общие->Региональные настройки
Ну или можно использовать в качестве разделителя аргументов функций точку с запятой (тогда правда у вас могут быть сложности с дополнительными вычислениями, так как дробные числа не будут трактоваться как числа, поэтому рекомендую первый вариант)
smart-lab.ru/q/NKNC/f/y/
=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;",")