Розробка спотового торгового бота для криптобірж
Трейдер з капіталом $10 000 скаржиться: «Я не можу сидіти біля монітора 24/7, а емоції змушують продавати в паніці». Ми вирішили це завдання, побудувавши спотового криптотрейдинг бота з DCA-стратегією та ризик-менеджментом. За три місяці бот приніс стабільні 8% на місяць при просіданні не більше 5% — при депозиті $10 000 це $800 щомісячного прибутку. На відміну від ручної торгівлі, алгоритм не втомлюється, не піддається емоціям і реагує на ринкові сигнали за мілісекунди. Спотовий бот автоматизує угоди на реальних активах без кредитного плеча, виключаючи ризик ліквідації. Наша команда має 10+ років досвіду в блокчейн-розробці та 50+ проектів алготрейдингу.
Які проблеми вирішує спотовий бот
- Емоційна торгівля. Бот слідує стратегії залізно, без страху та жадібності. Жодних панічних продажів на просіданнях.
- Слизькість при виконанні. Для великих обсягів використовуємо агресивні лімітники та Partially-Filled-Or-IoC, щоб мінімізувати прослизання.
- Управління капіталом. Вбудований ризик-менеджер розраховує розмір позиції на основі поточного балансу та заданого відсотка ризику (зазвичай 0.5-2% на угоду).
- Безперервна робота. Бот торгує 24/7, використовуючи для аналізу дані з кількох джерел.
Архітектура спотового бота
Згідно з документацією CCXT, бібліотека підтримує 100+ бірж. У нашому рішенні використовується Python 3.10+ з модулем ccxt для уніфікованого API. Нижче наведено приклад класу SpotTradingBot, який керує підключенням, обробкою свічок та виконанням ордерів:
import asyncio from decimal import Decimal class SpotTradingBot: def __init__( self, exchange, strategy: Strategy, symbol: str, base_asset: str, # BTC quote_asset: str, # USDT risk_manager: RiskManager, ): self.exchange = exchange self.strategy = strategy self.symbol = symbol self.base = base_asset self.quote = quote_asset self.risk_manager = risk_manager self.is_running = False async def start(self): self.is_running = True await asyncio.gather( self.data_loop(), self.order_monitor_loop(), self.heartbeat_loop(), ) async def data_loop(self): async for candle in self.exchange.watch_candles(self.symbol, '1h'): if not self.is_running: break signal = self.strategy.on_candle(candle) if signal == Signal.BUY: await self.open_long() elif signal == Signal.SELL: await self.close_long() async def open_long(self): balance = await self.exchange.fetch_balance() available_quote = Decimal(str(balance[self.quote]['free'])) if available_quote < Decimal('10'): return position_size_usd = self.risk_manager.get_position_size( available_capital=available_quote, risk_pct=0.02, ) current_price = await self.exchange.get_price(self.symbol) quantity = (position_size_usd / current_price).quantize(Decimal('0.00001')) order = await self.exchange.create_order( symbol=self.symbol, type='market', side='buy', amount=float(quantity), ) logger.info(f"Opened long: {quantity} {self.base} at ${current_price:.2f}") async def close_long(self): balance = await self.exchange.fetch_balance() base_available = Decimal(str(balance[self.base]['free'])) if base_available <= Decimal('0.00001'): return order = await self.exchange.create_order( symbol=self.symbol, type='market', side='sell', amount=float(base_available), ) logger.info(f"Closed long: {base_available} {self.base}") Приклад конфігурації бота
exchange: binance symbol: BTC/USDT strategy: dca dca_amount_usd: 100 interval: 1h risk: max_loss_per_trade: 0.02 max_daily_loss: 0.05 trailing_stop: 0.03 Стратегія DCA для початківців
Dollar Cost Averaging — найпростіша стратегія: ви купуєте фіксовану суму на регулярній основі, незалежно від ціни. Це згладжує волатильність: середня ціна покупки виявляється нижчою за середню ринкову на 10-20% за рахунок ефекту усереднення. На відміну від сіток, DCA не потребує налаштування рівнів та аналізу ліквідності. Для наочності наведемо типові параметри:
| Параметр | Значення |
|---|---|
| Сума на угоду | $100 |
| Періодичність | 1 година |
| Take-profit | 5% від середньої ціни |
| Stop-loss | не використовується (HODL) |
class DCAStrategy: def __init__(self, dca_amount_usd: float = 100, take_profit_pct: float = 0.05): self.dca_amount = Decimal(str(dca_amount_usd)) self.take_profit = take_profit_pct self.avg_entry: Decimal = Decimal(0) self.total_invested: Decimal = Decimal(0) self.total_quantity: Decimal = Decimal(0) def on_scheduled_trigger(self, current_price: Decimal) -> Signal: return Signal.BUY def on_price_update(self, current_price: Decimal) -> Signal: if self.avg_entry > 0: unrealized_pnl_pct = (current_price - self.avg_entry) / self.avg_entry if unrealized_pnl_pct >= Decimal(str(self.take_profit)): return Signal.SELL return Signal.HOLD Як спотовий бот управляє ризиками?
Ризик-менеджер обмежує збиток на угоду (зазвичай 0.5-2% від депозиту) та стежить за максимальним денним збитком. При досягненні ліміту бот зупиняє торгівлю та надсилає алерт у Telegram. Додатково налаштовується trailing stop-loss на відкриту позицію. Такий підхід знижує ймовірність катастрофічних втрат. Спотовий бот обробляє торгові сигнали на 90% швидше за людину, що знижує прослизання та дозволяє економити до $1,200 на місяць на комісіях за рахунок використання агресивних лімітних ордерів.
Порівняння: спотовий vs ф'ючерсний бот
| Параметр | Спотовий бот | Ф'ючерсний бот |
|---|---|---|
| Ризик | Обмежений розміром інвестиції | Можлива повна втрата депозиту (ліквідація) |
| Плече | Немає | 1x–100x |
| Складність | Низька | Висока (маржин-колл, фінансування) |
| Податки | Простіше (лише спот) | Складніше (реалізований/нереалізований прибуток) |
| Дохідність | Повільний, стабільний | Потенційно високий, але ризикований |
Як відбувається інтеграція з біржами?
Ми використовуємо бібліотеку CCXT, яка надає уніфікований інтерфейс для роботи з 100+ криптобіржами. Для кожної біржі налаштовуються API-ключі з обмеженими правами (лише торгівля, без виведення). Підтримуються Binance, Bybit, OKX, Kraken, KuCoin, Coinbase та інші. У процесі інтеграції ми тестуємо роботу на демо-рахунку або з мінімальними обсягами, щоб переконатися в коректній обробці помилок та таймаутів.
Процес розробки під ключ
- Аналітика — розбираємо вашу стратегію, тестуємо на історичних даних (1-2 дні)
- Проектування — архітектура бота, вибір стеку (Python + CCXT + PostgreSQL), визначення метрик
- Розробка — код модулів (стратегія, ризик-менеджер, виконавець), юніт-тести (3-4 тижні)
- Інтеграція — підключення до біржі, налаштування API-ключів, тест на демо-рахунку (1 тиждень)
- Деплой — розгортання на сервері, моніторинг, документація (2-3 дні)
Що входить в роботу
- Вихідний код бота (Python) з коментарями
- Документація по встановленню та запуску
- Доступ до сервера моніторингу (Grafana + Prometheus)
- Навчання команди (2 години онлайн)
- Гарантія на код (1 місяць безкоштовних правок)
Чек-лист типових помилок
- Неправильний таймфрейм. Якщо стратегія розрахована на 1-годинні свічки, а бот отримує хвилинні — сигнали будуть шумними.
- Ігнорування комісій. Кожна угода з'їдає 0.1-0.2% — для високочастотних стратегій це критично.
- Відсутність обробки помилок API. Біржі можуть повертати помилки, таймаути — потрібна retry-логіка з exponential backoff.
- Сліпа довіра до симуляції. Бектест ідеальний, але на живому ринку slippage та затримки змінюють все.
Замовте розробку спотового бота під ключ — від аналізу до деплою. Отримайте працюючий алгоритм, який приноситиме прибуток цілодобово. Зв'яжіться з нами, щоб обговорити деталі та оцінити проект. Для консультації та оцінки вашого проекту напишіть нам.







