TickerHive – это демонстрационный проект, который состоит из набора микросервисов для получения финансовых данных по тикерам акций, расчёта различных метрик (скользящие средние, медианные фильтры, полосы Боллинджера, историческая волатильность и точки экстремума), а также предоставления результатов пользователям через Telegram-бот.
Проект демонстрирует архитектуру на основе нескольких модулей, каждый из которых развёрнут в виде отдельного Docker-контейнера и общается через брокер сообщений (RabbitMQ):
- UI (Telegram Bot): Интерфейс для пользователей. Позволяет через команды в Telegram получать отчёты и запускать периодические обновления.
- Coordinator: Координирует взаимодействие между UI, Core и Storage. Обрабатывает запросы, запрашивает данные у Core, сохраняет результаты в Storage и возвращает их обратно UI.
- Core: Обрабатывает запросы, связанные с получением и анализом данных. Загружает котировки через
yfinanceи вычисляет метрики. - Storage: Хранит данные о котировках, метриках и настройках пользователей в MongoDB.
- Docker и docker-compose
- Токен Telegram-бота (можно получить у BotFather)
-
Клонируйте репозиторий:
git clone https://your-repository-url/TickerHive.git cd TickerHive -
Добавьте токен Telegram-бота в
docker-compose.ymlдля сервисаui(переменная окруженияTELEGRAM_TOKEN). -
Запустите сборку и запуск контейнеров:
docker-compose up --build
-
Если вам необходимо сбросить кеш, воспользуйтесь командой:
docker-compose build --no-cache
Данный шаг поднимет следующие сервисы:
rabbitmq– брокер сообщений (порты: 5672, 15672)mongodb– база данных MongoDB (порт 27017)ui– Telegram-ботcoordinator– координаторcore– сервис обработки данныхstorage– сервис хранения данных
-
Найдите ваш Telegram-бот (по токену, который вы указали, вы получите
usernameу BotFather) и начните с ним общаться:- Введите
/startдля приветствия. - Команда
/get_report <TICKER> <START_DATE> <END_DATE>для единоразового получения отчёта. Пример:/get_report AAPL 2024-10-10 2024-11-11 - Команда
/start_updates <TICKER> <INTERVAL>для запуска периодического обновления данных по тикеру каждые INTERVAL секунд. Пример:/start_updates AAPL 30 - Команда
/stop_updates <TICKER>для остановки периодического обновления. Пример:/stop_updates AAPL
- Введите
-
Логи каждого сервиса доступны в консоли, где запущен
docker-compose. Для остановки нажмитеCtrl+C.
project/
docker-compose.yml
requirements.txt
common/
config.py
logging_config.py
messages.py
utils.py
ui/
handlers.py
service.py
main.py
Dockerfile
coordinator/
scheduler.py
coordinator_service.py
main.py
Dockerfile
core/
core_service.py
data_fetcher.py
metrics.py
Dockerfile
storage/
storage_service.py
Dockerfile
- RabbitMQ панель управления:
http://localhost:15672(логин/пароль: guest/guest) - MongoDB доступна по адресу
mongodb://localhost:27017на хост-машине (можно использовать инструменты вродеmongoshдля просмотра данных).
Вы можете расширить функционал, добавляя новые метрики, улучшая интерфейс бота, добавляя авторизацию для пользователей, тесты, CI/CD и многое другое.
Если у вас возникли вопросы или предложения по улучшению проекта, вы можете создавать Issues в репозитории проекта или прислать Pull Request.