Учебный проект по машинному обучению и автоматизации финансового анализа
Разработать Telegram-бота, который позволяет пользователю:
- Получать прогноз цены акций на 30 дней вперёд;
- Получать рекомендации по покупке/продаже на основе прогноза;
- Рассчитывать условную прибыль от стратегии торговли;
- Всё это — в удобном интерфейсе мессенджера, без необходимости использовать специализированные платформы.
Проект демонстрирует применение трёх различных подходов к прогнозированию временных рядов: классической ML-модели, статистической модели и нейросети.
Пользователь указывает:
- Тикер компании (например,
AAPL,TSLA,MSFT); - Сумму условной инвестиции (в USD).
Бот автоматически:
- Загружает исторические данные за последние 2 года с Yahoo Finance;
- Обучает три модели:
- Random Forest с лаговыми признаками;
- Prophet (Meta);
- LSTM (нейросеть);
- Выбирает лучшую модель по метрике MAPE (Mean Absolute Percentage Error).
Отправляет график с:
- Историей цен (последние 90 дней);
- Прогнозом на 30 дней вперёд.
Анализирует прогноз и предлагает:
- Дни для покупки (локальные минимумы);
- Дни для продажи (локальные максимумы);
- Расчёт потенциальной прибыли от суммы пользователя.
Все запросы сохраняются в файл audit_logs.csv с деталями:
- ID пользователя, дата, тикер, сумма;
- Выбранная модель, значение MAPE, прибыль.
- Python 3.9+
- aiogram - Telegram-бот фреймворк
- pandas/numpy - Обработка данных
- scikit-learn - Реализация Random Forest
- prophet - Прогнозирование временных рядов
- tensorflow - Нейронные сети LSTM
- yfinance - Yahoo Finance API
- matplotlib - Построение графиков
- Три разных класса моделей — обеспечивает объективный выбор наилучшего подхода.
- Реальное время — все расчёты выполняются после запроса пользователя.
- Обработка ошибок — некорректные тикеры или суммы не ломают бота.
- Нет зависимости от внешних сервисов (кроме Yahoo Finance).
- Учебный характер — результаты не являются финансовыми рекомендациями.
- Python 3.9–3.13 (внимание: для TensorFlow требуется Python ≤ 3.13)
- Доступ в интернет (для загрузки данных с Yahoo Finance)
- Telegram-аккаунт и BotFather для получения токена
-
Клонируйте репозиторий:
git clone <url> cd StockBot
-
Создайте виртуальное окружение (рекомендуется):
python -m venv venv source venv/bin/activate # Linux/macOS # или venv\Scripts\activate # Windows
-
Установите зависимости:
pip install --upgrade pip pip install -r requirements.txt
⚠️ Если возникают проблемы сyfinance, выполните:
pip uninstall yfinance -y pip install --no-cache-dir git+https://github.com/ranaroussi/yfinance.git@main
-
Настройте Telegram-бота:
-
Напишите @BotFather →
/newbot -
Скопируйте токен (например:
123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ) -
Создайте файл
.envв корне проекта:TELEGRAM_BOT_TOKEN=ваш_токен_здесь
-
-
Запустите бота:
python app.py
Готово! Бот запущен и готов принимать запросы.
-
Найдите своего бота в Telegram по имени (указано при создании через BotFather).
-
Отправьте команду:
/start -
Следуйте инструкциям:
- Введите тикер (например:
AAPL); - Введите сумму инвестиций (например:
1000).
- Введите тикер (например:
-
Дождитесь анализа (обычно 30–120 секунд, особенно при первом запуске LSTM).
-
Получите:
- График прогноза;
- Изменение цены через 30 дней;
- Рекомендации по сделкам;
- Расчёт прибыли.
Поддерживаются популярные тикеры:
AAPL,MSFT,GOOGL,TSLA,AMZN,NVDAи др.
- Результаты носят исключительно учебный характер.
- Бот не подключён к реальным биржам и не совершает сделок.
- Прогнозы основаны на исторических данных и могут быть неточными.
- Не используйте вывод бота как основу для реальных инвестиций.
Бот автоматически выбирает лучшую модель на основе MAPE:
- Random Forest: Хорош для краткосрочных паттернов, быстрое обучение
- Prophet: Отлично выявляет тренды и сезонность
- LSTM: Улавливает сложные нелинейные зависимости
Каждая модель оценивается на отложенной тестовой выборке (20% от обучающих данных) перед выбором.