Как автоматически скачивать котировки любой ценной бумаги в «Экселе» » Элитный трейдер
Элитный трейдер


Как автоматически скачивать котировки любой ценной бумаги в «Экселе»

22 апреля 2024 Тинькофф Банк Шардин Михаил
Статья для пользователей Windows

Часто индивидуальные инвесторы не доверяют онлайн-сервисам и по старинке ведут учет собственных инвестиций в Microsoft Excel или его свободных аналогах вроде LibreOffice Calc.

Если бумаг не очень много, ведение учета в «Экселе» оправданно:

не нужно никому платить за хранение данных;
вся информация хранится только на вашем компьютере — это безопасно, никто не удалит ее, например, за неактивность;
отчеты можно оформить так, как хочется.

У такого учета есть и недостатки — в основном они связаны с тем, что приходится вручную обновлять котировки. Делать это раз в квартал несложно, но чтобы поддерживать актуальность чаще, придется потратить много времени: зайти на сайт, где публикуют текущую цену, найти ее, скопировать и вставить в таблицу. И так для каждой бумаги в портфеле.

Расскажу, как скачивать нужные котировки автоматически. Дальше в статье будут готовые формулы, которые можно скопировать и с небольшими изменениями вставить в собственную таблицу.

Сразу уточню: речь пойдет только о формулах для эксель-таблиц. Для учета в гугл-таблицах или в Numbers они не подойдут. Про учет в гугл-таблицах в Тинькофф Журнале есть отдельная статья.

А еще эти формулы будут работать только в «Экселе» для операционной системы Windows. К сожалению, с версией для macOS они несовместимы: в них есть функция ФИЛЬТР.XML, которая использует особенности Windows.

Зачем скачивать цены финансовых активов автоматически

Во-первых, это позволит удобно управлять всеми ценными бумагами. Можно отслеживать стоимость портфеля в режиме реального времени и принимать обоснованные решения о покупке, продаже или ребалансировке инвестиций. А еще — анализировать риски и оценивать волатильность разных типов активов.

Во-вторых, это важно для финансового моделирования. Автоматическая загрузка цен дает пользователю возможность включить в свою модель актуальные рыночные данные.

Где искать актуальные цены

Котировки публикуют на сайтах бирж и в финансовых агрегаторах, например на Мосбирже, Yahoo Finance или Investing.com. Мы писали, как пользоваться готовыми сервисами, если не хочется разбираться в формулах.

Вот несколько ценных бумаг разных видов и авторитетные источники, которые публикуют их цены:

Цену российской акции «Лукойл» (тикер LKOH) публикуют на сайте Московской биржи.
Цену российской государственной облигации ОФЗ 26226 (код НРД SU26226RMFS9) также публикует Московская биржа.
Официальный курс доллара к рублю можно найти на сайте Центробанка.
Цену иностранной акции Alphabet (тикер GOOGL, ISIN US02079K3059) удобно смотреть на сайте Yahoo Finance.
Цену иностранного ETF iShares MSCI Europe ex-UK UCITS ETF (тикер IEUX, ISIN IE00B14X4N27) можно посмотреть на сайте Morningstar.

Еще недавно автозагрузка котировок для некоторых иностранных акций была доступна прямо в «Экселе» — с подпиской Microsoft 365. Но в марте 2024 года компания объявила о блокировке доступа к этому и другим облачным сервисам для пользователей в России.

Есть несколько удобных способов сделать так, чтобы актуальные цены из этих источников сами подгружались в «Эксель». Расскажу о двух наиболее простых и эффективных — парсинге и API. Дальше в статье я на примерах покажу, как применить их для учета инвестиций, и поделюсь собственными формулами для тех, кто не хочет погружаться в программирование. Мои формулы можно брать и подставлять в любую таблицу.

Чтобы было понятнее, о чем я рассказываю, скачайте и откройте в «Экселе» вот эту мою таблицу.

Для каждой ценной бумаги я укажу в таблице две формулы. Первая подойдет, если хотите получить текущую цену — максимум с 15-минутной задержкой. Но когда биржа закрыта, формула будет выдавать ошибку. Вторая формула показывает цену всегда, в любое время, но только на момент закрытия последних торгов.

Как в «Экселе» получать цены акций через API Мосбиржи

Московская биржа предоставляет API, стоимость ценных бумаг можно получать с помощью ее программного интерфейса: либо по подписке и быстро, либо бесплатно, но с небольшой задержкой — примерно 15 минут.

Что такое API

API, от Application Programming Interface, — способ автоматического сбора информации из интернета. При этом способе общения с сайтом клиент запрашивает, например, цену акции — и в ответ сервер сообщает только цену и ничего больше, без загрузки всей страницы. Правда, не все сайты дают к нему доступ.

Московская биржа и Банк России предоставляют доступ к собственному API, но с ограничениями. А чтобы найти открытый и бесплатный API от иностранных поставщиков, придется сильно постараться.

Подробнее о том, что такое API, — в журнале «Код»


Формулы в этом блоке подходят только для котировок акций. Для ETF и других активов понадобятся другие формулы — они будут дальше в статье.

Например, получать сегодняшнюю цену акций «Лукойла» с Мосбиржи можно с такой формулой:

=ПОДСТАВИТЬ(@ ФИЛЬТР.XML(ВЕБСЛУЖБА("https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST");"//document//data//rows//row[@SECID='"&A3&"']/@LAST");".";",")

В ячейке A3 в таблице надо указать тикер нужной вам акции.

Как посмотреть тикер акции

Тикеры можно посмотреть в Тинькофф Инвестициях или на сайте Московской биржи.

Как автоматически скачивать котировки любой ценной бумаги в «Экселе»

В приложении Тинькофф Инвестиций тикер указан под названием акции. Тикер «Лукойла» — LKOH

На сайте Московской биржи тикер указан справа от названия


На сайте Московской биржи тикер указан справа от названия


Эта формула будет работать, только когда биржа открыта и по этому инструменту есть торги. Если попробуете скачать цены после закрытия биржи или в нерабочий день, получите ошибку.


Так выглядит таблица с ценами акций, которые автоматически загружаются с API Мосбиржи. Достаточно подставить формулу в любую ячейку

Следующая формула более универсальна. С ее помощью можно скачать цену акций с Мосбиржи даже в нерабочее время — на момент ее закрытия. Не забудьте снова подставить тикер нужной вам акции:

=ПОДСТАВИТЬ(@ ФИЛЬТР.XML(ВЕБСЛУЖБА("https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,PREVLEGALCLOSEPRICE");"//document//data//rows//row[@SECID='"&A3&"']/@PREVLEGALCLOSEPRICE");".";",")


Эта формула позволяет получать стоимость акций с Мосбиржи в любое время, но только по состоянию на последний день торгов

Как в «Экселе» получать цены облигаций через API Мосбиржи

Аналогично акциям можно автоматически подгружать с Мосбиржи в свою таблицу и стоимость государственных облигаций.

Например, чтобы получать стоимость российской облигации ОФЗ 26226 (код НРД SU26226RMFS9), можно использовать такую формулу:

=ПОДСТАВИТЬ(@ ФИЛЬТР.XML(ВЕБСЛУЖБА("https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml?iss.meta=off&iss.only=marketdata_yields&marketdata_yields.columns=SECID,PRICE");"//document//data//rows//row[@SECID='"&A8&"']/@PRICE");".";",")

В ячейке A8 надо указать код нужного вам НРД — его тоже можно найти на сайте Мосбиржи.

Эта формула будет работать только для облигаций ОФЗ и только в рабочее время Московской биржи.


Так выглядит таблица с ценами облигаций, которые автоматически загружаются с сайта Мосбиржи

Следующая формула позволит получать цены и в нерабочее время — на момент закрытия последних торгов:

=ПОДСТАВИТЬ(@ ФИЛЬТР.XML(ВЕБСЛУЖБА("https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,PREVLEGALCLOSEPRICE");"//document//data//rows//row[@SECID='"&A8&"']/@PREVLEGALCLOSEPRICE");".";",")


Формула позволяет загружать цены гособлигаций всегда — независимо от дня недели и рабочих часов

Как в «Экселе» получать курсы валют через API Банка России

У Центробанка тоже есть удобный API, через который можно получать курсы любых валют. На сайте ЦБ опубликована подробная инструкция, как это сделать.

Так выглядит готовая формула, которая позволит автоматически загрузить в «Эксель» курс доллара США на сегодня:

=@ФИЛЬТР.XML(ВЕБСЛУЖБА("http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1="&ТЕКСТ(СЕГОДНЯ();"дд.ММ.гггг")&"&date_req2="&ТЕКСТ(СЕГОДНЯ();"дд.ММ.гггг")&"&VAL_NM_RQ=R01235");"//Value")


Курс доллара можно отображать в любой выбранной ячейке

Как в «Экселе» получать цены любых бумаг через парсинг сайтов

Не у всех ресурсов есть открытый доступ к API, как у Московской биржи или Центрального банка. А для части иностранных инвестиций, например облигаций или фондов, вообще сложно найти котировки в открытом доступе.

Поэтому одной формулы для получения котировок будет недостаточно. Потребуется VBA — это внутренний язык программирования Microsoft Office. С его помощью придется написать макрос, мини-программу, которая выполняет сразу несколько действий. Я уже написал код — достаточно будет заменить в нем пару строк под ваши потребности и вставить в таблицу.

Чтобы использовать VBA, сначала необходимо включить в «Экселе» режим разработчика:

Нажмите «Файл» → «Параметры».
Выберите «Настроить ленту» в левой боковой панели.
Установите флажок «Разработчик» в правом столбце.
Нажмите «ОК», чтобы применить изменения.


Так выглядит страница с настройками режима разработчика в «Экселе» версии 2021 года

Парсинг Yahoo Finance. Получать котировки иностранных акций проще всего с помощью парсинга в сервисе Yahoo Finance. Покажу, как это делается, на примере акции Alphabet (тикер GOOGL, ISIN US02079K3059).

Что такое парсинг

Парсинг — это автоматический сбор данных из интернета. Он работает по формуле или скрипту, который вы задаете, и позволяет автоматически брать цены почти с любого сайта и загружать их в «Эксель».

Подробнее о том, что такое парсинг, — в журнале «Код»


Чтобы настроить парсинг цен с сайта Yahoo Finance, придется выполнить несколько действий:

Откройте мою таблицу в «Экселе» в режиме разработчика — она содержит сценарии VBA.
«Эксель» предложит включить макросы — нажмите «Включить макросы» или «Включить контент», чтобы разрешить запуск сценариев VBA.
После этого выберите любую ячейку и воспользуйтесь функцией =GetQuoteFinanceYahooCom("GOOGL"). Котировка появится в этой же ячейке.

Для другой иностранной акции подставьте на место GOOGL нужный тикер.


Я добавил в таблицу цены популярных иностранных бумаг: Alphabet, Dell Technologies и SPDR S&P. Они находятся на листе «Мир»

Где искать котировки редких акций. Иногда в портфеле могут оказаться экзотические активы, цены которых особенно сложно отыскать. Можно воспользоваться поиском по ISIN, International Securities Identification Number, — международному идентификационному коду.

Например, эта формула позволит получить котировки не очень известного иностранного ETF iShares MSCI Europe ex-UK UCITSvETF (тикер IEUX, ISIN IE00B14X4N27) с сайта агентства Morningstar. Если хотите настроить получение цены с любого сайта, этот VBA-скрипт может стать образцом. Без кода VBA-скрипта формула ниже работать не будет:

=GetQuoteMorningstarCoUkETF(B9)

Невозможно дать универсальный шаблон: для каждого сайта нужен отдельный скрипт. И его придется переписать, если на сайте источника поменяется выдача или формат данных. Но этот шаблон точно может стать отправной точкой — немного изменив его, получите рабочую формулу.


Так выглядит котировка ETF iShares MSCI, автоматически загруженная с сайта morningstar.co.uk

Запомнить

В «Экселе» можно автоматически скачивать котировки не только большинства российских активов, но и множества иностранных.
Часть котировок российских активов удобно скачивать с помощью формул из этой статьи. А для иностранных понадобится скрипт, который позволит загрузить котировки через кастомную формулу.
Внутренний язык программирования Microsoft Office дает возможность брать из интернета цены любых ценных бумаг, и они будут автоматически обновляться.

https://tinkoff.ru (C)
Не является индивидуальной инвестиционной рекомендацией
При копировании ссылка обязательна Нашли ошибку: выделить и нажать Ctrl+Enter