Архитектура
Проект построен по микросервисной схеме с общими слоями:
- PostgreSQL + TimescaleDB — основная реляционная база данных.
- Redis / Valkey — кеш, pub/sub рыночных данных, исторические снапшоты, состояние торговых форков.
- FastAPI backend — API авторизации, пользователей, платежей, админки, рынков, сигналов, триггеров.
- Frontend (Vue 3 + Vite) — пользовательский веб-терминал.
- Admin frontend (Vue 3 + Vite) — административная панель.
- Торговый агент (
spreadracer-v3-trading-agent, отдельный репозиторий и сервер) — исполнение сделок, мониторинг триггеров, GSL. - Воркеры — фоновые сервисы сбора данных и алертинга.
Структура репозитория
spreadracer-v3/
├── backend/ # FastAPI backend + воркеры
│ ├── app/ # API, модели, схемы, сервисы
│ ├── alembic/ # Миграции
│ ├── index_scanner/ # Составы индексных цен, DEX/CEX якоря (Связки)
│ ├── contract_validator/ # Валидация DEX-контрактов через GMGN
│ ├── market_data_gateway/ # WebSocket-шлюз к биржам
│ ├── market_loader/ # Синхронизация инструментов
│ ├── listing_worker/ # Мониторинг листингов/делистингов
│ ├── splash_worker/ # Детекция резких скачков цен (сплешей)
│ └── Dockerfile
├── cex_scanner/ # Сканер межбиржевых спредов (standalone)
├── dex_scanner/ # Сканер DEX-спредов
├── frontend/ # Пользовательский терминал
├── admin-frontend/ # Админ-панель
├── anyex/ # Унифицированная библиотека для работы с биржами
├── cex-listings/ # Парсер листингов бирж
├── docs-site/ # Эта документация (VitePress)
├── proxies/ # Прокси-файлы по биржам
├── scripts/ # Скрипты деплоя и webhook
├── DEPLOY.md # Инструкции по деплою
├── docker-compose.yml # Dev-окружение
└── docker-compose.prod.yml # ProductionПоток данных
market_data_gatewayиticker_workerпишут тикеры и стаканы в Redis (snapshot:last:{market_id}) и PostgreSQL (price_snapshots).cex_scanner/dex_scannerищут спреды и шлют сигналы в backend (POST /agent/signals).- Frontend показывает сигналы, графики и терминал.
- Пользователь создаёт триггер → backend сохраняет его и передаёт торговому агенту через Redis.
- Торговый агент мониторит спреды, исполняет сделки и публикует события (
fork:events) → backend шлёт Telegram-уведомления и пишет исполнения в PostgreSQL.
Ключевые Redis-ключи
| Ключ | Назначение |
|---|---|
snapshot:last:{market_id} | Последний тикер рынка |
markets:{exchange}:{market_type} | Кеш инструментов биржи |
forks:{user}:{fork_id} | Состояние форка у трейдера |
positions:{user}:{fork_id} | Открытая позиция |
spread:{user}:{fork_id} | Live-спред для карточки триггера |
fork:events | Стрим торговых событий (agent → backend) |