- Binance — SPOT пары через REST API
- Bybit — SPOT пары через REST API
Реализовано добавление новых бирже через декоратором @register с авто дискавери при старте.
- Python 3.13, FastAPI, SQLModel, asyncpg
- PostgreSQL 17
- APScheduler (фоновый поллинг)
- httpx (async HTTP)
- Alembic (миграции)
- Docker Compose
cp .env.example .env
docker compose up --buildAPI: http://localhost:8000. Swagger: http://localhost:8000/docs.
Healthcheck + db connect
Возвращает агрегированные курсы со всех бирж для запрошенных пар.
Запрошенные пары автоматически добавляются в список поллинга для сбора исторических данных.
| Задача | Интервал | Описание |
|---|---|---|
poll_tick |
MARKET_POLL_INTERVAL (10с) |
Собирает курсы по всем отслеживаемым парам, записывает снапшоты |
reload_all_pairs |
PAIRS_REFRESH_INTERVAL (600с) |
Обновляет список доступных пар с каждой биржи |
Настройки задаются через переменные окружения (префикс BARONEX_ или напрямую в .env):
| Переменная | По умолчанию | Описание |
|---|---|---|
DATABASE_URL |
postgresql+asyncpg://baronex:baronex@localhost:5432/baronex |
Строка подключения к БД |
TITLE |
BaronEx |
Название приложения |
HTTP_TIMEOUT |
5.0 |
Таймаут httpx клиента (секунды) |
LOG_LEVEL |
INFO |
Уровень логирования |
MARKET_POLL_INTERVAL |
10.0 |
Интервал поллинга тикеров (секунды) |
PAIRS_REFRESH_INTERVAL |
600.0 |
Интервал обновления списка пар (секунды) |
app/
├── main.py # Lifespan, scheduler, фабрика приложения
├── core/
│ ├── config.py # Настройки (pydantic-settings)
│ └── database.py # Async engine и сессии
├── api/
│ ├── deps.py # DI фабрики (MarketServiceDep, PollerServiceDep)
│ └── routes/
│ ├── health.py
│ └── v1/market.py
├── models/
│ ├── domain/ # Ticker, TradingPair (dataclasses)
│ ├── api/ # Request/response Pydantic модели
│ ├── db/ # SQLModel таблицы (PolledPair, TickerSnapshot)
│ └── providers/ # TypedDict схемы для API бирж
├── providers/
│ ├── base.py # BaseProvider ABC + реестр
│ ├── binance.py
│ └── bybit.py
└── services/
├── market.py # Логика агрегации курсов
└── poller.py # Фоновый сервис поллинга
# Тесты
uv run pytest
# Линтинг и форматирование
uv run ruff check --fix .
uv run ruff format .
# Проверка типов
uv run pyright
# Миграции
uv run alembic upgrade head— Автоматическая очистка старых ticker_snapshots (партиционирование по дате или cron на DELETE)
- Вынести трейдинг пары бирж в redis, если нужно поддерживать несколько инстансов(горизонтальное масштабирование)
- Больше покрытие тестам(текущие только как пример)