1. Сбор и подготовка данных: API Московской биржи (MOEX) и парсинг финансовых новостей
Сбор и подготовка данных: API Московской биржи (MOEX) и парсинг финансовых новостей
Добро пожаловать в курс по разработке ИИ-помощника для инвестиций! Вы поставили амбициозную цель: создать инструмент, который поможет анализировать российский фондовый рынок. Любой искусственный интеллект, будь то простая регрессия или сложная нейросеть, нуждается в «топливе». Этим топливом являются данные.
В этой первой статье мы разберем фундамент вашего будущего проекта: откуда брать котировки акций (Сбербанк, Газпром, Лукойл и др.), как автоматически собирать новости, влияющие на рынок, и как привести эти данные в вид, понятный машине.
Общий план разработки ИИ-помощника
Прежде чем писать код, давайте сформируем дорожную карту всего проекта. Чтобы создать полноценного помощника, нам предстоит пройти следующие этапы:
Сегодня мы фокусируемся на пункте №1.
!Схема архитектуры сбора данных: от источников через скрипты Python в базу данных
Часть 1. Получение рыночных данных: MOEX ISS API
Для работы с российским рынком лучшим источником является сама Московская биржа (MOEX). У биржи есть отличный информационно-статистический сервер (ISS), который предоставляет программный интерфейс (API).
Почему MOEX ISS?
* Официальный источник: Данные приходят напрямую от первоисточника. * Бесплатно: Исторические данные и данные с задержкой (15 минут) доступны бесплатно без регистрации. * Документировано: Существует официальная документация и готовые библиотеки.
Как это работает?
API работает через HTTP-запросы. Вы отправляете запрос по определенному URL, а сервер возвращает вам данные в формате JSON, XML или CSV. Структура запроса выглядит так:
https://iss.moex.com/iss/engines/[рынок]/markets/[секция]/boards/[режим]/securities/[тикер]/candles
Где:
* engines/stock — фондовый рынок.
* markets/shares — акции.
* boards/TQBR — основной режим торгов (Т+).
* securities/SBER — тикер инструмента (например, Сбербанк).
Инструменты Python
Для работы нам понадобятся библиотеки requests (для запросов) и pandas (для работы с таблицами). Также существует удобная обертка apimoex.
Установим необходимые библиотеки:
Пример кода: Скачивание истории котировок
Напишем скрипт, который скачивает дневные свечи акций Сбербанка за последний год.
В результате вы получите таблицу (DataFrame), где каждая строка — это один торговый день. Это и есть наши структурированные данные.
Часть 2. Парсинг финансовых новостей
Цена акции — это не просто число. Это отражение ожиданий инвесторов, на которые влияют новости. Отчеты компаний, геополитика, изменения ключевой ставки — всё это двигает рынок.
Для ИИ-помощника нам нужно научиться собирать текстовые данные. Это называется парсинг (или скрапинг).
Источники данных
Технические нюансы и этика
> Парсинг сайтов находится в «серой» зоне. Всегда проверяйте файл robots.txt на сайте (например, site.ru/robots.txt), чтобы узнать, разрешает ли владелец автоматический сбор данных.
Для начала мы будем использовать библиотеку BeautifulSoup для разбора HTML-кода страниц.
Пример кода: Простой парсер заголовков
Представим, что мы хотим собрать заголовки с условного новостного сайта.
Для более сложных задач (например, парсинг Telegram) лучше использовать официальные API мессенджера через библиотеки Telethon или Pyrogram, так как обычный парсинг там не сработает.
Часть 3. Подготовка данных (Preprocessing)
Сырые данные нельзя сразу подавать в нейросеть. Их нужно очистить и нормализовать.
1. Очистка данных
Часто в данных бывают пропуски (например, в праздничные дни биржа не работала, а новости выходили). Нам нужно синхронизировать временные ряды.
* Заполнение пропусков: Если нет цены за выходной, можно продублировать цену пятницы. * Удаление дубликатов: Новости могут повторяться в разных источниках.
2. Логарифмическая доходность
Для ИИ-моделей абсолютная цена (например, 250 рублей за акцию) менее важна, чем её относительное изменение. Акция, выросшая с 10 до 11 рублей, показала такой же результат (+10%), как и акция, выросшая со 100 до 110. Чтобы уравнять эти масштабы, используют логарифмическую доходность.
Формула логарифмической доходности:
Где: * — логарифмическая доходность в момент времени . * — натуральный логарифм. * — цена закрытия в текущий момент времени. * — цена закрытия в предыдущий момент времени.
Использование логарифмов делает распределение данных более похожим на нормальное (гауссово), что упрощает обучение моделей.
3. Нормализация (Min-Max Scaling)
Нейросети плохо работают с большими числами (например, объем торгов может быть в миллиардах). Нам нужно привести все данные к диапазону от 0 до 1.
Формула нормализации:
Где: * — нормализованное значение (от 0 до 1). * — исходное значение. * — минимальное значение во всей выборке данных. * — максимальное значение во всей выборке данных.
!Визуализация процесса нормализации данных: приведение значений к единому масштабу
Резюме
Мы сделали первый шаг к созданию ИИ-помощника:
В следующей статье мы разберем, как эффективно хранить эти данные, спроектируем базу данных и настроим автоматическое обновление нашего архива.