Проблема: зависимость от внешних сервисов
Большинство DCA (Dollar Cost Averaging) ботов для криптовалют — это SaaS-решения типа 3Commas или TradingView. Вы платите подписку, доверяете свои API-ключи третьей стороне и привязываетесь к ограниченному списку бирж.
Но что если вы хотите:
- Полный контроль над данными и логикой торговли
- Независимость от платных подписок
- Гибкость — использовать любую из 100+ бирж
- Безопасность — API-ключи остаются у вас на сервере
- Кастомизацию — добавлять свою логику и стратегии
Именно для этого я создал self-hosted DCA bot на Go с поддержкой CCXT.
Что это такое
Это Production-ready open-source бот для автоматизации стратегии усреднения стоимости (DCA) на криптовалютных биржах:
- Мультибиржевость: Bybit, Binance, OKX, BingX и 100+ бирж через CCXT
- Smart DCA: покупает больше при просадке цены (адаптивное усреднение)
- Web Dashboard: современный React-интерфейс для управления и мониторинга
- Real-time PNL: отслеживание прибыли/убытков по всем парам
- Price Conditions: покупка ниже MA, при определённом RSI или триггерной цене
- Уведомления: Telegram и Email оповещения о сделках
- Production-ready: graceful shutdown, panic recovery, structured logging
- Single Binary: один исполняемый файл с встроенным фронтендом
Архитектура: просто и надёжно
Одно из ключевых преимуществ — архитектура single binary. Всё упаковано в один исполняемый файл:
┌─────────────────────────────────────┐
│ crypto-bot-server (один бинарник) │ Port 8080
│ ┌─────────────┐ ┌─────────────────┐ │
│ │ REST API │ │ React Dashboard │ │
│ │ /api/* │ │ Встроен (embed) │ │
│ └──────┬──────┘ └─────────────────┘ │
└─────────┼────────────────────────────┘
│
┌────▼─────┐
│ CCXT │ Интеграция с биржами
│ Wrapper │
└────┬─────┘
│
┌────▼──────────────────────┐
│ 100+ бирж │
│ Bybit │ Binance │ OKX... │
└────────────────────────────┘
Tech Stack:
- Backend: Go 1.21+ с CCXT v4 (через wrapper)
- Frontend: React 18 + Vite (встроен в бинарник через
//go:embed) - Exchanges: CCXT (универсальная библиотека для 100+ бирж)
- Deployment: Docker + Docker Compose или standalone binary
Как это работает: Smart DCA в действии
Классический DCA — это покупка на фиксированную сумму через равные интервалы. Но бот умеет больше благодаря Smart DCA:
{
"trading_pair": "BTC-USDT",
"order_amount_usdt": 50,
"interval_hours": 24,
"smart_dca": {
"enabled": true,
"deviation_threshold": 5.0, // Если цена ниже средней на 5%
"max_multiplier": 2.0, // Покупаем в 2 раза больше
"multiplier_type": "linear" // Линейное или экспоненциальное увеличение
}
}
Пример: Если ваша средняя цена покупки BTC — $50,000, а текущая цена упала до $47,500 (-5%), бот автоматически купит не на $50, а на $100. Это позволяет быстрее усреднить позицию при просадках.
Деплой за 3 минуты
Один из самых важных критериев для меня — простота развёртывания. Бот можно установить тремя способами:
1. Standalone Binary (рекомендуется)
# Собираем бинарник со встроенным фронтендом
make build
# Запускаем
./bin/crypto-bot-server
# Открываем браузер
http://localhost:8080
Всё! Один файл, один порт, никаких зависимостей.
2. Docker (для продакшена)
# Настраиваем API-ключи в .env
cp .env.example .env
nano .env
# Запускаем
docker compose up -d
# Проверяем логи
docker compose logs -f
3. Development Mode (для разработки)
# Запускает backend + frontend с hot-reload
make run
# Backend: http://localhost:8080
# Frontend: http://localhost:3000 (с HMR)
Применение
- Trading-as-a-Service: добавьте multi-tenancy и продавайте как SaaS
- Custom Trading Bots: используйте как основу для своих алгоритмов
- Интеграции с биржами: CCXT даёт доступ к 100+ биржам из коробки
- Portfolio Management: отслеживание PNL и балансов в реальном времени
- Автоматизация DCA-стратегии без абонентской платы
- Полный контроль над логикой торговли (open source)
- Тестирование на testnet перед реальными сделками
Безопасность и надёжность
- API-ключи: хранятся локально в
.env, никогда не покидают ваш сервер - Testnet First: можно тестировать на тестовой сети перед продакшеном
- Graceful Shutdown: корректное завершение сделок при остановке
- Panic Recovery: автоматическое восстановление при ошибках CCXT
- Structured Logging: logrus для детального мониторинга
- Non-Root Docker: контейнер работает от непривилегированного пользователя
- Health Checks: встроенные проверки здоровья для Docker
Реальные цифры: размер и производительность
- Binary Size: ~30MB (включая фронтенд)
- Docker Image: ~35MB (Alpine base)
- Memory Usage: ~50-100MB RAM в runtime
- Cold Start: <1 секунда
- API Response Time: <100ms для большинства эндпоинтов
Кастомизация и интеграция
- Добавление новых стратегий (Grid Bot, Martingale, Arbitrage)
- Интеграция с внутренними системами
- Multi-tenancy для SaaS-моделей
- WebSocket для real-time данных
- Margin/Futures trading
- Copy-trading функционал
- Kubernetes deployment
- Мониторинг (Prometheus, Grafana, Datadog)
Технический стек
- Go: concurrency, error handling, structured logging
- React + Vite: современный фронтенд с HMR
- Docker Multi-Stage Build: оптимизация размера образов
- CCXT Integration: универсальная работа с биржами
- go:embed: встраивание статики в бинарник
- Graceful Patterns: context, channels, waitgroups
- Testing: unit + integration тесты
Заключение
Self-hosted DCA bot — полноценное решение для автоматизации криптотрейдинга:
- Работает на 100+ биржах через CCXT
- Не требует подписок и внешних сервисов
- Полный контроль над логикой и данными
- Deployment за 3 минуты (один бинарник или Docker)
- Production-ready (error handling, logging, monitoring)
Если нужна кастомизация или интеграция с биржами — свяжитесь со мной.