Для смартлабовца иногда важно вести какие-либо вычисления по бумагам в режиме лайв.
Да, есть 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/
это расширение просто облегчает выковыривание нужных данных из страницы
или я не прав?
дык если на сайте в таблице меняются какие-то циферки — то эти изменения тоже попадут гугл-таблицу
Для облигации из моего примера его значение «ОФЗ-ПД 26222 16/10/24», тогда как для 29006 например, он будет «ОФЗ-ПК 29006 29/01/25»
Можно выбрать только те, в которых этот параметр начинается на ОФЗ-ПД с помощью XPath
Как получить список полей, я описал.
Как выдергивать определенную бумагу тоже описал.
Этого должно быть достаточно. Что у вас не получается?
=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;",")
«http://» поставьте перед обоими запросами. Тут преобпразует в ссылки, и эти символы пропадают.
=IMPORTXML(«iss.moex.com/iss/engines/stock/markets/shares/boards/tqbr/securities.xml», "//row[@SECID="«SBER»"]/@SHORTNAME")
Спасибо, ОФЗ просто отлично парсит!
А вот если хочется корпы, то печалька :( При попытке импорта ...bonds/boards/EQOB/securities.xml гуглотаблицы выдают Resource at url contents exceeded maximum size.
UnembossedName, в принципе проблему решил — оказывается, можно парсить не общий xml, а одной конкретной бумаги! Например, .../bonds/boards/EQOB/securities/RU000A100998.xml", "//row[@SECID="«RU000A100998»"]/@MARKETPRICE"
А клевые спредшиты интересны всегда, дайте пожалуйста ссылку, если не трудно :)
https://docs.google.com/spreadsheets/d/1k4EdwAiwVdok2z3CZoUk_q6Atdb1x7QK2PuRBni814E/edit?ouid=107135225539676699904&usp=sheets_home&ths=true
https://docs.google.com/spreadsheets/d/1aYKX8yR97A_r6smh3PW9wSyH4ecr8s-eDXU2gHwVbwY/edit?ouid=107135225539676699904&usp=sheets_home&ths=true
ETF здесь https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQTF/securities.xml
https://finance.yahoo.com/quote/TRNFP.ME?p=TRNFP.ME&.tsrc=fin-srch
А вообще некоторые eps можно получить через GoogleFinance
=GOOGLEFINANCE(«MCX:GAZP»;«eps»)
Но с Транснефтью не работает
По вашей странице можно например так
=VLOOKUP(«EPS (TTM)»;IMPORTHTML(«finance.yahoo.com/quote/TRNFP.ME?p=TRNFP.ME&.tsrc=fin-srch»;«table»;2);2;FALSE)
Для этого надо понимать, что на данный момент данные содержатся в таблице и эта таблица с EPS в документе вторая, поэтому и работает
Можно и через importxml
=IMPORTXML(«finance.yahoo.com/quote/TRNFP.ME?p=TRNFP.ME&.tsrc=fin-srch»;"//td[@data-test="«EPS_RATIO-value»"]")
Но тут тоже надо понимать, что может сломаться, надо понимать структуру HTML файла
https://iss.moex.com/iss/history/engines/currency/markets/selt/boards/cets/securities/USD000UTSTOM?from=2020-02-15
Только количество строк ограничено
Нужно переставлять дату в ссылке.
Архивы целиком наверняка можно где-то найти в других местах
я обычно забираю пакетами по 100 шт в диапазоне дат: https://iss.moex.com/iss/history/engines/currency/markets/selt/boards/cets/securities/USD000UTSTOM?from=2020-02-15&till=2020-02-25
Вот так работает =IMPORTDATA(«iss.moex.com/iss/history/engines/currency/markets/selt/boards/cets/securities/USD000UTSTOM.csv?iss.dp=point&iss.delimiter=,&from=2020-02-15&till=2020-02-25»)
Похоже, что проблема с кэшэм была