Михаил Шардин
Михаил Шардин личный блог
21 октября 2024, 04:27

Мой доклад на 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 г.

37 Комментариев
  • Николай
    21 октября 2024, 07:40
    В этом году начал пилить учёт инвестиций в гуглдокс. Результат сильно превзошел ожидания, получилась инвестиционно торговая платформа, с сигналами на покупку и продажу.
    В результате, перешёл полностью на гуглдокс, отказавшись от сервисов учёта инвестиций.

    Ваш метод глянул бегло с телефона. Для извлечения каждой котировки вы обращаетесь к xml?
      • Николай
        21 октября 2024, 19:39
        Михаил Шардин, такое решение мне видится более оптимальным. По крайней мере у себя я сделал именно через Google Apps Script.
  • Lazanya0000
    21 октября 2024, 08:19
    Да тоже использую эксель, но большой минус, что мосбиржа дает данные с 15 минутной задержкой.
      • Lazanya0000
        21 октября 2024, 08:36
        Михаил Шардин, не, ну теперь то все понятно, чего непонятного, все понятно
      • Ramha
        21 октября 2024, 09:17
        Михаил Шардин, можно сделать такую таблицу с архивом дневных  котировок сбера за 10 лет с ежедневным автообновлением?
    • Виктор Шеренков
      21 октября 2024, 13:46
      Lazanya0000, тоже использую данные Мосбиржи. Не заметил задержки. А используете iss.moex.com//iss/engines/stock...? или что-то другое?
      • Lazanya0000
        21 октября 2024, 13:48
        Виктор Шеренков, Да, это использую, если обратить внимание котировки начинаются с 10-15, то есть с 15 минутной задержкой
  • drmfd
    21 октября 2024, 08:46
    А на маке значо знаете как такое реализовывать?
      • drmfd
        21 октября 2024, 09:36
        Михаил Шардин, VBA на маке тоже нет наверное
  • Ramha
    21 октября 2024, 09:11
    Погоду можно добавить в таблицы openweathermap.org/api
    openweathermap.org/
  • Александр Мерков
    21 октября 2024, 10:44
    А зачем котировки в Excel с сайта — вручную и отдельно каждую? В Quik есть функция вывода котировок в Excel. Можно едино-моментно, можно и транслировать.
  • wrmngr
    21 октября 2024, 11:28
    аж цельный доклад на конференции? это же уровень лабораторной работы студента 2 курса технического вуза
  • Воронов Дмитрий
    21 октября 2024, 11:33
    Михаил, у меня не обновляются данные в файле. В чем может быть причина?
      • Воронов Дмитрий
        21 октября 2024, 11:42


        Михаил Шардин, 
          • Воронов Дмитрий
            21 октября 2024, 12:26
            Михаил Шардин, после обновления во всех ячейках появились #ЗНАЧ!, даже в тех, где была Ваша формула. 
              • Воронов Дмитрий
                21 октября 2024, 12:40
                Михаил Шардин, я в РФ, работаю без VPN. Вечером перепроверю из дома. 
              • Воронов Дмитрий
                23 октября 2024, 05:21
                Михаил Шардин, дома файл заработал. Спасибо огромное. 

                Подскажите, пожалуйста, а как перенести эту формулу в другой файл? Я так понимаю, что простого копирования формулы недостаточно.
                  • Воронов Дмитрий
                    23 октября 2024, 07:14
                    Михаил Шардин, скопировал в другую книгу – выдаёт ошибку. Может быть надо код из модулей переносить?
                      • Воронов Дмитрий
                        23 октября 2024, 09:22
                        Михаил Шардин, я скопировал только формулу из ячейки – не работает. Надо скопировать в книгу также и код VBA?
  • Божественный
    21 октября 2024, 22:36
    На либроофисе работает тоже. Спасибо, дополню формулами свою эксельку. Я её виду паралельно с сноуболом с первого дня инвестирования.

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

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