Блог им. empenoso

Мой доклад на 35-й конференции Смартлаба в Москве: «Парсинг котировок в Microsoft Excel и Google Таблицы с любого сайта»

Бывает, что частные инвесторы не доверяют сервисам для ведения портфеля ценных бумаг и ведут учет своих инвестиций в «Экселе» или «Гугл Таблицах».

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

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

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

Зачем вообще нужны актуальные цены в таблицах:

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

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


Проблемы получения котировок в любые таблицы

Хотя возможность автоматического получения котировок в «Эксель» или «Гугл Таблицы» упрощает ведение портфелей, существует несколько технических препятствий, с которыми можно столкнуться при парсинге или скрапинге (в общем виде это автоматический сбор данных из интернета, в таблицах работает через формулы или скрипты):

  • Динамическая загрузка контента: современные веб-сайты часто используют JavaScript для загрузки текущий цен уже после первоначальной загрузки страницы. Это создает проблему для базовых методов парсинга.
  • Ограничения API: некоторые веб-сайты и финансовые учреждения предлагают общедоступные API (например, Московская биржа или Банк России), но и они имеют свои ограничения. А бывает, что можно найти АПИ, например для investing.com, но чтобы воспользоваться им потребует поиск альтернативных методов — имитация человека для того чтобы получить данные — использование автоматизации браузера.

Скачиваем котировки в в Microsoft Excel

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

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

Хотя такие инструменты, как Power Query, также могут достигать аналогичных результатов, VBA обеспечивает большую гибкость и масштабируемость.

Для извлечения российских котировок можно использовать API, предоставляемый Московской биржей. Интегрировав этот API с Excel можно извлекать цены на облигации или другие классы активов с 15и минутной задержкой непосредственно в свои электронные таблицы без ручных обновлений:

Цены через API, предоставляемый Московской биржей

Для популярных иностранных бумаг написал VBA:

Цены через парсинг finance.yahoo.com

Для получения курсов от Центрального банка Российской Федерации тоже пришлось написать VBA скрипт, потому что формула недавно перестала работать:

Котировки Банка России через API

⚠️Файл-пример скачивания котировок в Excel: Котировки любой бумаги в Excel (скачайте файл на компьютер, иначе он откроется в Гугл таблицах и будут одни ошибки).

Скачиваем котировки в Google Таблицы

Что касается Google Таблиц, для очень многих иностранных активов подойдёт встроенная функцию =GoogleFinance(), которая позволяет извлекать исторические и текущие цены на различные иностранные активы. Однако ограничением является полное отсутствие данных по российским акциям и облигациям, что является критическим пробелом:

Получение цен через встроенную функцию

Для российских бумаг:

Цены через API

Курсы валют Банка России:

Получение в отличии от Экселя через формулу

⚠️Файл-пример скачивания котировок в Google Таблицы: Котировки в Гугл Таблицы

Если вы продвинутый пользователь, то сможете найти АПИ для любого популярного сайта, например для investing.com, и с помощью автоматизации браузера, например, библиотеки Puppeteer в Node.js можно обойти защиту Cloudflare, и автоматизировать извлечение котировок. Этот метод требует более глубокого понимания, но он открывает возможности для доступа к защищенным данным, с которыми простой скрапинг уже не справляется.


Ключевые выводы

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

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

Excel против Google Sheets: хотя обе платформы предлагают решения для извлечения рыночных данных, у каждой из них есть свои сильные стороны. VBA в Excel предоставляет мощные возможности настройки, тогда как простота Google Sheets усиливается за счет подключения к облаку.

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

Автор:Михаил Шардин

21 октября 2024 г.

★50
37 комментариев
В этом году начал пилить учёт инвестиций в гуглдокс. Результат сильно превзошел ожидания, получилась инвестиционно торговая платформа, с сигналами на покупку и продажу.
В результате, перешёл полностью на гуглдокс, отказавшись от сервисов учёта инвестиций.

Ваш метод глянул бегло с телефона. Для извлечения каждой котировки вы обращаетесь к xml?
avatar
Николай, в примере да. У этого метода есть ограничения, можно через Google Apps Script переписать всё.
avatar
Михаил Шардин, такое решение мне видится более оптимальным. По крайней мере у себя я сделал именно через Google Apps Script.
avatar
Да тоже использую эксель, но большой минус, что мосбиржа дает данные с 15 минутной задержкой.
avatar
Lazanya0000, как вариант можно попробовать переписать на использование API брокера со своим ключом. Тогда задержки не будет.
avatar
Михаил Шардин, не, ну теперь то все понятно, чего непонятного, все понятно
avatar
Lazanya0000, в России есть несколько брокеров у которых есть свой собственный программный интерфейс.
Обычно за подключение к этому интерфейсу никакой дополнительной оплаты не берётся. Может быть вы уже являетесь клиентом одного из этих брокеров.
Вы можете получить ключ для доступа к программному интерфейсу и переписать формулы так чтобы получать как клиент этого брокера нужные вам котировки без всякой задержки.
avatar
Михаил Шардин, можно сделать такую таблицу с архивом дневных  котировок сбера за 10 лет с ежедневным автообновлением?
avatar
Ramha, можно, только зачем?
avatar
Михаил Шардин, сделать свою таблицу

 
avatar
Ramha, да, возможно
avatar
Lazanya0000, тоже использую данные Мосбиржи. Не заметил задержки. А используете iss.moex.com//iss/engines/stock...? или что-то другое?
Виктор Шеренков, Да, это использую, если обратить внимание котировки начинаются с 10-15, то есть с 15 минутной задержкой
avatar
А на маке значо знаете как такое реализовывать?
avatar
drmfd, на маке же эксель по-другому работает.
Проблема в том что функции FILTERXML и WEBSERVICE доступны только в Excel для Windows и не поддерживаются в Excel для Mac.

Можно попробовать использовать внешние инструменты например, Python или VBA. Но это надо целый скрипт писать, который будет делать всё тоже самое но по другому.
avatar
Михаил Шардин, VBA на маке тоже нет наверное
avatar
Погоду можно добавить в таблицы openweathermap.org/api
openweathermap.org/
avatar
А зачем котировки в Excel с сайта — вручную и отдельно каждую? В Quik есть функция вывода котировок в Excel. Можно едино-моментно, можно и транслировать.
Александр Мерков, это если есть квик. А зачем он?
avatar
аж цельный доклад на конференции? это же уровень лабораторной работы студента 2 курса технического вуза
avatar
wrmngr, а вы с какой темой докладываете?
avatar
Михаил, у меня не обновляются данные в файле. В чем может быть причина?
Воронов Дмитрий, в каком именно файле? В статье их два
avatar


Михаил Шардин, 

Воронов Дмитрий, включите содержимое и чтобы обновить все ячейки нажмите CTRL+ALT+F9 это пересчет всех листов всех открытых книг.

А что в ещё одном LKOH нет значений — ошибка где-то у Вас в формуле.

avatar
Михаил Шардин, после обновления во всех ячейках появились #ЗНАЧ!, даже в тех, где была Ваша формула. 
Воронов Дмитрий, я только что всё проверил — у меня работает.
Вы в России находитесь сейчас?
Если нет, то надо использовать VPN. А если да, то надо его выключить.
avatar
Михаил Шардин, я в РФ, работаю без VPN. Вечером перепроверю из дома. 
Михаил Шардин, дома файл заработал. Спасибо огромное. 

Подскажите, пожалуйста, а как перенести эту формулу в другой файл? Я так понимаю, что простого копирования формулы недостаточно.
Воронов Дмитрий, почему? У этих формул нет никакой защиты
avatar
Воронов Дмитрий, должно простым копированием всё работать
avatar
Михаил Шардин, скопировал в другую книгу – выдаёт ошибку. Может быть надо код из модулей переносить?
Воронов Дмитрий, а что именно копируете? АПИ Мосбиржи и ЦБ там формулы, а остальное через VBA
avatar
Михаил Шардин, я скопировал только формулу из ячейки – не работает. Надо скопировать в книгу также и код VBA?
Воронов Дмитрий, да
avatar
На либроофисе работает тоже. Спасибо, дополню формулами свою эксельку. Я её виду паралельно с сноуболом с первого дня инвестирования.
avatar

теги блога Михаил Шардин

....все тэги



UPDONW
Новый дизайн