Production-ready система для управления множественными Binance аккаунтами с использованием Elixir/Phoenix
- Возможности
- Архитектура
- Требования
- Быстрый старт
- Конфигурация
- Разработка
- Тестирование
- Deployment
- Безопасность
- Документация
- Contributing
- License
- Microservices Architecture через Umbrella Projects
- Fault Tolerance с OTP supervision trees
- Real-time Updates через Phoenix LiveView и Channels
- Горизонтальное масштабирование благодаря BEAM VM
- Изоляция процессов - один GenServer на аккаунт
- ✅ Управление множественными Binance аккаунтами (через Sub-accounts)
- ✅ Real-time мониторинг рыночных данных
- ✅ Автоматические торговые стратегии (Naive, Grid, DCA)
- ✅ Risk management и stop-loss механизмы
- ✅ Портфельный трекинг и P&L расчёт
- ✅ Исторические данные и аналитика
- ✅ Paper trading режим для тестирования
- ✅ AES-256-GCM шифрование API ключей в БД
- ✅ JWT аутентификация
- ✅ Rate limiting защита
- ✅ Аудит логирование всех операций
- ✅ IP whitelisting для API ключей
- ✅ Phoenix LiveDashboard для real-time метрик
- ✅ TimescaleDB для эффективного хранения time-series данных
- ✅ Continuous aggregates для предрасчёта статистики
- ✅ Grafana интеграция (опционально)
- ✅ Telemetry метрики
binance_system/
├── apps/
│ ├── shared_data/ # 💾 Общие схемы БД и Ecto Repo
│ ├── data_collector/ # 📡 Сбор данных от Binance API/WebSocket
│ ├── trading_engine/ # ⚙️ Торговая логика и стратегии
│ └── dashboard_web/ # 🖥 Phoenix LiveView интерфейс
└── config/ # ⚙️ Конфигурация
| Компонент | Технология |
|---|---|
| Language | Elixir 1.14+ |
| Framework | Phoenix 1.7+ |
| Database | PostgreSQL 15 + TimescaleDB |
| Cache | ETS + Redis |
| WebSocket | Phoenix Channels |
| API Client | dvcrn/binance.ex |
| Encryption | Cloak |
| Monitoring | Telemetry + LiveDashboard |
- Elixir 1.14+ и Erlang/OTP 25+
- PostgreSQL 15+
- Node.js 18+ (для Phoenix assets)
- Docker и Docker Compose (рекомендуется)
- Redis 7+ (для распределённого кеша)
- TimescaleDB (расширение для PostgreSQL)
- Аккаунт на Binance
- API ключи с необходимыми разрешениями
- Для тестирования: используйте Binance Testnet
# 1. Клонировать репозиторий
git clone https://github.com/timujinne/binance_system.git
cd binance_system
# 2. Настроить переменные окружения
cp .env.example .env
# Отредактируйте .env с вашими API ключами
# 3. Запустить сервисы
make start
# 4. Создать umbrella проект (первый раз)
mix new binance_system --umbrella
cd binance_system
mix deps.get
# 5. Настроить БД
make db-create
make db-migrate
# 6. Запустить приложение
make server
# Открыть http://localhost:4000# 1. Установить Elixir и зависимости
# Ubuntu/Debian:
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
sudo dpkg -i erlang-solutions_2.0_all.deb
sudo apt-get update
sudo apt-get install -y elixir erlang-dev postgresql-15
# 2. Установить Phoenix
mix local.hex --force
mix archive.install hex phx_new --force
# 3. Настроить проект
cp .env.example .env
# Отредактируйте .env
# 4. Установить зависимости
mix deps.get
# 5. Настроить БД
mix ecto.create
mix ecto.migrate
# 6. Запустить сервер
mix phx.server- Перейти на https://testnet.binance.vision/
- Войти через GitHub
- Получить API Key и Secret Key
- Использовать testnet endpoints:
- REST:
https://testnet.binance.vision - WebSocket:
wss://testnet.binance.vision/ws
- REST:
- Перейти на https://www.binance.com/en/my/settings/api-management
- Создать новый API ключ
- Настроить разрешения:
- ✅ Enable Reading
- ✅ Enable Spot & Margin Trading
- ❌ Enable Withdrawals (НЕ рекомендуется)
- Настроить IP whitelist для безопасности
# Способ 1: через Make
make gen-secret
# Способ 2: через IEx
iex -S mix
iex> 32 |> :crypto.strong_rand_bytes() |> Base.encode64()Скопируйте .env.example в .env и заполните:
# Binance API
BINANCE_API_KEY=your_api_key
BINANCE_SECRET_KEY=your_secret_key
BINANCE_BASE_URL=https://testnet.binance.vision
# Security
CLOAK_KEY=your_base64_encoded_key
SECRET_KEY_BASE=your_phoenix_secret
# Database
DATABASE_URL=postgres://postgres:postgres@localhost:5432/binance_trading_devПолный пример см. в .env.example
# Запуск сервера
make server # Запустить Phoenix сервер
make server-iex # С IEx консолью
# База данных
make db-create # Создать БД
make db-migrate # Миграции
make db-reset # Пересоздать БД
make db-seed # Заполнить тестовыми данными
# Тестирование
make test # Запустить тесты
make test-watch # Тесты в watch режиме
make check # Полная проверка (format + credo + tests)
# Docker
make start # Запустить контейнеры
make stop # Остановить
make logs # Смотреть логи
make logs-app # Логи приложения
# Код
make format # Форматировать код
make credo # Проверка качества
make dialyzer # Статический анализ
# Мониторинг
make start-monitoring # Запустить с Grafana
make open-grafana # Открыть Grafana UI
make open-pgadmin # Открыть pgAdminПолный список команд: make help
После создания проекта структура будет:
binance_system/
├── apps/
│ ├── shared_data/ # Общие данные
│ │ ├── lib/shared_data/
│ │ │ ├── schemas/ # User, ApiCredential, Trade, etc.
│ │ │ ├── repo.ex
│ │ │ └── vault.ex # Cloak encryption
│ │ └── priv/repo/migrations/
│ │
│ ├── data_collector/ # Binance интеграция
│ │ └── lib/data_collector/
│ │ ├── binance_client.ex
│ │ ├── binance_websocket.ex
│ │ ├── market_data.ex
│ │ └── rate_limiter.ex
│ │
│ ├── trading_engine/ # Торговая логика
│ │ └── lib/trading_engine/
│ │ ├── strategies/ # Naive, Grid, DCA
│ │ ├── trader.ex
│ │ ├── order_manager.ex
│ │ └── risk_manager.ex
│ │
│ └── dashboard_web/ # Phoenix UI
│ └── lib/dashboard_web/
│ ├── live/ # LiveView компоненты
│ ├── channels/ # WebSocket каналы
│ └── controllers/
│
├── config/
│ ├── config.exs # Base config
│ ├── dev.exs
│ ├── test.exs
│ ├── prod.exs
│ └── runtime.exs # Runtime секреты
│
├── .env.example
├── docker-compose.yml
├── Makefile
└── README.md
# Запустить все тесты
mix test
# С coverage
mix test --cover
# Конкретный файл
mix test test/trading_engine/strategies/naive_test.exs
# С watch режимом
mix test.watch- Unit tests - изолированные тесты модулей
- Integration tests - тесты взаимодействия компонентов
- Property-based tests - с использованием StreamData
- Feature tests - end-to-end тесты через LiveView
# Сборка release
MIX_ENV=prod mix release
# Запуск
_build/prod/rel/binance_system/bin/binance_system start
# Daemon режим
_build/prod/rel/binance_system/bin/binance_system daemon# Сборка образа
docker build -t binance-system:latest .
# Запуск
docker run -d \
--name binance-system \
-p 4000:4000 \
--env-file .env.prod \
binance-system:latest# Обязательные
BINANCE_API_KEY=xxx
BINANCE_SECRET_KEY=xxx
SECRET_KEY_BASE=xxx
CLOAK_KEY=xxx
DATABASE_URL=postgres://...
# Рекомендуемые
DATABASE_POOL_SIZE=20
PORT=4000
PHX_HOST=yourdomain.com
ENABLE_SSL=trueУсловия использования Binance (Section 20.1.l) запрещают множественные личные аккаунты.
ЛЕГАЛЬНЫЕ способы:
- Sub-accounts - для VIP1+ пользователей (до 200 sub-аккаунтов)
- Корпоративные аккаунты - отдельные юридические лица
✅ Делайте:
- Используйте testnet для разработки
- Храните ключи в переменных окружения
- Настройте IP whitelist для API ключей
- Регулярно ротируйте API ключи
- Включите 2FA на Binance аккаунте
- Логируйте все операции с деньгами
- Используйте paper trading перед реальной торговлей
❌ Не делайте:
- Коммитить ключи в git
- Давать API ключам права на вывод средств
- Использовать production ключи в development
- Создавать множественные личные аккаунты
- Игнорировать rate limits
- 📘 IMPLEMENTATION_PLAN.md - Детальный план реализации
- 🚀 QUICKSTART.md - Быстрый старт за 15 минут
- 🐳 DOCKER_GUIDE.md - Docker setup guide
- 📊 PubSub Architecture - Архитектура PubSub
- 📝 DEVELOPMENT_GUIDE.md - Руководство разработчика
- Elixir Documentation
- Phoenix Framework
- Phoenix LiveView
- Binance API Docs
- Книга: Hands-on Elixir & OTP
Мы приветствуем ваш вклад! Пожалуйста:
- Fork проекта
- Создайте feature branch (
git checkout -b feature/AmazingFeature) - Commit изменения (
git commit -m 'Add some AmazingFeature') - Push в branch (
git push origin feature/AmazingFeature) - Откройте Pull Request
- Следуйте Elixir Style Guide
- Добавляйте тесты для новых функций
- Обновляйте документацию
- Проверьте
make checkперед commit
Этот проект лицензирован под MIT License - см. файл LICENSE
- Tymofii Shapovalov - Initial work - @timujinne
- fremantle-industries/tai - за вдохновение в архитектуре
- dvcrn/binance.ex - отличный Binance клиент
- Cinderella-Man/hands-on-elixir - за обучающие примеры
- 📧 Email: timujeen@gmail.com
- 🐛 Issues: GitHub Issues
- 💻 GitHub: @timujinne
Эта система предоставляется "как есть" без каких-либо гарантий. Торговля криптовалютами несёт высокие риски. Используйте на свой страх и риск. Авторы не несут ответственности за финансовые потери.
Всегда тестируйте стратегии в paper trading режиме перед использованием реальных средств!
Made with ❤️ using Elixir and Phoenix
⭐ Если проект был полезен, поставьте звезду!