Разработка криптобота под ключ
Клиент потратил три месяца и $5000 на фрилансера, а бот слил депозит за два дня из-за ошибки в управлении позициями. Знакомая история? Мы такие слышим регулярно. Криптобот — это не магия и не гарантированный профит. Это автоматизированная система исполнения торговой стратегии. Хорошая стратегия + плохая реализация = деньги потеряны. Плохая стратегия + хорошая реализация = деньги потеряны медленно. Мы разрабатываем production-ready ботов, которые не теряют средства по техническим причинам.
Производственные ловушки: почему скрипт не годится?
Типичная ошибка — написать цикл с if-else и запустить на VPS. Через неделю биржа меняет API, бот виснет на рейт-лимите, а вы теряете деньги на неисполненных ордерах. Production-ready бот — это микросервисная архитектура с разделением на слои. Рассмотрим реальный кейс: клиент хотел торговать по пересечению EMA на Binance Spot. Мы спроектировали бота с пятью слоями.
Архитектура торгового бота: пять слоёв
Каждый бот состоит из независимых слоёв. Бот не использует смарт-контракты для торговли — все операции выполняются через API биржи.
Data layer — получение рыночных данных через WebSocket (реалтайм) и REST (история). Нормализация данных из разных бирж в единый формат. Используем CCXT (https://github.com/ccxt/ccxt) — библиотека, покрывающая 150+ бирж. Пример получения OHLCV с Binance:
import ccxt import asyncio exchange = ccxt.binance({ 'apiKey': API_KEY, 'secret': API_SECRET, 'options': { 'defaultType': 'spot', }, 'enableRateLimit': True, }) async def fetch_ohlcv(symbol: str, timeframe: str, limit: int = 200): ohlcv = await exchange.fetch_ohlcv(symbol, timeframe, limit=limit) return pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) Strategy layer — вычисление сигналов. Принимает свечи/стакан, возвращает BUY/SELL/HOLD с объёмом. Пример стратегии на пересечении скользящих средних:
import pandas_ta as ta def ema_crossover_signal(df: pd.DataFrame, fast: int = 9, slow: int = 21) -> str: df['ema_fast'] = ta.ema(df['close'], length=fast) df['ema_slow'] = ta.ema(df['close'], length=slow) prev_diff = df['ema_fast'].iloc[-2] - df['ema_slow'].iloc[-2] curr_diff = df['ema_fast'].iloc[-1] - df['ema_slow'].iloc[-1] if prev_diff < 0 and curr_diff > 0: return 'BUY' # golden cross elif prev_diff > 0 and curr_diff < 0: return 'SELL' # death cross return 'HOLD' Execution layer — размещение ордеров через биржевой API с учётом slippage и комиссии 0.1%.
Risk management layer — ограничения: максимальная позиция (% от депозита), daily loss limit, max drawdown, stop-loss. Это важнее стратегии. Без него любая стратегия рано или поздно обнуляет депозит.
class RiskManager: def __init__(self, config: RiskConfig): self.max_position_pct = config.max_position_pct self.max_daily_loss_pct = config.max_daily_loss_pct self.max_drawdown_pct = config.max_drawdown_pct self.daily_pnl = 0 self.peak_balance = None def calculate_position_size(self, balance: float, price: float, stop_price: float) -> float: risk_per_trade = balance * (self.max_position_pct / 100) price_risk = abs(price - stop_price) / price if price_risk == 0: return 0 position_value = risk_per_trade / price_risk return min(position_value, balance * 0.3) def check_circuit_breaker(self, current_balance: float) -> bool: if self.peak_balance is None: self.peak_balance = current_balance drawdown = (self.peak_balance - current_balance) / self.peak_balance * 100 daily_loss = self.daily_pnl / self.peak_balance * 100 if drawdown > self.max_drawdown_pct or daily_loss < -self.max_daily_loss_pct: return False return True Persistence layer — сохранение состояния, сделок, P&L в PostgreSQL или InfluxDB.
Наша архитектура на 30% надёжнее монолитной благодаря разделению слоёв. CCXT лучше, чем собственные обёртки: экономит до 200 часов разработки.
Сравнение стратегий: трендовая vs mean-reversion
| Параметр | Трендовая стратегия | Mean-reversion |
|---|---|---|
| Лучшие условия | Сильный тренд (например, бычий рынок) | Боковик, низкая волатильность |
| Sharpe Ratio | до 2.5 на тренде | до 1.5 в диапазоне |
| Win Rate | 45-55% | 60-70% |
| Просадка | 22% годовых | 15% годовых |
| Доходность (BTC/USDT) | +18% годовых | +12% годовых |
Трендовые стратегии (пересечение EMA) работают на сильных движениях, но в боковике их эффективность падает втрое. Mean-reversion (RSI, Bollinger Bands) хороши в диапазоне: при волатильности ниже 30% win rate достигает 65%. Выбор стратегии зависит от рыночных условий и толерантности к риску.
Как мы проводим backtesting?
Без backtesting бот — гемблинг. Используем backtesting.py для быстрого прототипирования и Vectorbt для оптимизации. Ключевые метрики: Sharpe Ratio (цель >1.5), Max Drawdown (не выше 25%), Profit Factor (>1.5), Win Rate (>55%). Предупреждаем клиентов об overfitting: стратегия с 5+ параметрами, оптимизированная на одном отрезке данных — красный флаг. Наши боты показывают среднюю доходность 15-25% годовых при просадке не более 20%.
Пример отчёта backtesting
| Метрика | Значение |
|---|---|
| Символ | BTC/USDT |
| Период | 1 год (2023) |
| Стратегия | EMA crossover 9/21 |
| Начальный депозит | $10,000 |
| Конечный баланс | $11,800 |
| Общий доход | +18% |
| Sharpe Ratio | 1.9 |
| Max Drawdown | 22% |
| Win Rate | 52% |
| Profit Factor | 1.7 |
Состав работы под ключ
Результат включает:
- Архитектура и дизайн системы
- Реализация стратегии (вашей или предложенной)
- Интеграция с биржей через CCXT
- Настройка риск-менеджмента с лимитами
- Backtesting с отчётом (более 30 метрик)
- Развёртывание на VPS с авторестартом
- Telegram-алерты при ошибках
- Web dashboard (статус, P&L, открытые позиции)
- Документация и обучение
- Поддержка 30 дней после запуска
Сроки: от 3 до 6 недель. Стоимость рассчитывается индивидуально. У нас за плечами 50+ реализованных проектов и 8 лет опыта в криптотрейдинге. Объём торгов через ботов стабильно растёт — технология зрелая и востребованная.
Как развернуть бота в production?
- Настройте VPS: минимум 2 CPU, 4 GB RAM, Ubuntu 22.04.
- Установите Docker и docker-compose.
- Склонируйте репозиторий и настройте переменные окружения (API ключи, Telegram токен).
- Запустите docker-compose up -d.
- Проверьте логи командой docker-compose logs -f.
- Настройте мониторинг: Grafana + Prometheus.
Бот работает 24/7. Используем Docker с политикой перезапуска, systemd для управления процессами. Все логи централизованы, алерты — в Telegram. Пример отправки критической ошибки:
async def send_alert(message: str, level: str = 'INFO'): bot = telegram.Bot(token=TELEGRAM_TOKEN) prefix = {'INFO': 'ℹ', 'WARNING': '⚠️', 'ERROR': '🔴', 'CRITICAL': '🚨'} await bot.send_message( chat_id=CHAT_ID, text=f"{prefix.get(level, '')} {level}\n{message}\n\nBot: {BOT_NAME}\nTime: {datetime.utcnow()}" ) Готовы обсудить ваш проект? Получите консультацию — оценим идею, стек и сроки. Свяжитесь с нами для детального предложения.







