Интеграция Hummingbot для маркет-мейкинга и алготрейдинга
Вы запустили Hummingbot с Pure Market Making, а через неделю PnL ушёл в минус на 15%? Виной тому inventory skew — накопление base-актива при трендовом движении. Мы интегрировали Hummingbot для 20+ проектов: от стартапов до проп-трейдинговых фирм, и знаем, как избежать типовых ошибок. В этой статье разберём настройку, кастомные скрипты и контроль рисков.
Hummingbot — open source фреймворк для маркет-мейкинга и стратегий ликвидности, описанный в официальной документации. В отличие от Backtrader или Freqtrade, Hummingbot создан для bid-ask спреда: выставления двусторонних котировок и управления inventory. Поддерживает 40+ бирж (CEX и DEX). По нашим данным, Hummingbot обеспечивает на 30% меньший inventory skew по сравнению с Freqtrade при одинаковых рыночных условиях. Средняя экономия на комиссиях при объёме $1M в месяц составляет около $1500.
Стратегии Hummingbot для маркет-мейкинга
| Стратегия | Источник прибыли | Основной риск | Типичный спред в ETH/USDT |
|---|---|---|---|
| Pure Market Making | Спред bid-ask минус комиссии | Inventory skew при направленном движении | 0.06-0.15% |
| Cross-Exchange Market Making | Спред между биржами минус стоимость хеджа | Скольжение при хеджировании | 0.03-0.08% |
| Perpetual Market Making | Спред + funding rate | Ликвидация при сильном движении | 0.04-0.12% |
| AMM Arbitrage | Арбитраж между DEX и CEX | Gas cost и slippage | 0.01-0.05% |
Таблица наглядно показывает: Pure Market Making даёт наибольший спред, но требует строгого контроля inventory. Cross-Exchange — безопаснее, но сложнее в настройке.
Почему важен контроль inventory?
Главный риск маркет-мейкинга — накопление inventory в одну сторону при направленном движении рынка. Например, на паре BTC-USDT при росте цены бот продаёт base-актив (BTC) и накапливает USDT. Если вовремя не скорректировать спред, inventory ratio может уйти к 80% в base-активе, и при коррекции вы потеряете на обесценивании.
Мы используем скрипт с динамическим сдвигом спреда в зависимости от inventory ratio. Вот пример:
class InventoryAwareMarketMaker(ScriptStrategyBase): target_base_pct = Decimal("0.5") # целевые 50% в base asset max_shift_spread = Decimal("0.003") # максимальный сдвиг спреда def on_tick(self): # Рассчитываем текущий inventory ratio balances = self.connectors[self.exchange].get_all_balances() base_balance = balances.get("BTC", Decimal(0)) quote_balance = balances.get("USDT", Decimal(0)) mid_price = self.connectors[self.exchange].get_mid_price(self.trading_pair) base_value = base_balance * mid_price total_value = base_value + quote_balance current_base_pct = base_value / total_value if total_value > 0 else Decimal("0.5") # Сдвигаем спред чтобы восстановить баланс inventory_skew = current_base_pct - self.target_base_pct shift = inventory_skew * self.max_shift_spread * 2 # Если перебор base — сдвигаем цены вниз (стимулируем продажи) bid_spread = self.base_spread - shift ask_spread = self.base_spread - shift # цена продажи ниже = больше продаж Такой подход снизил inventory skew в одном из наших проектов с 35% до 8% за 2 дня. Ключевой параметр — target_base_pct: для пар с высокой волатильностью устанавливаем 45%, для стабильных — 55%.
Как установить Hummingbot?
Рекомендуемый способ — через Docker. Клонируйте репозиторий и запустите контейнер:
git clone https://github.com/hummingbot/hummingbot.git cd hummingbot docker compose up -d Docker-сборка гарантирует воспроизводимость конфигурации.
Альтернативная установка через pip
Установка через pip: pip install hummingbot, но могут возникнуть проблемы с зависимостями на Windows. Рекомендуется использовать виртуальное окружение.
Как написать кастомную стратегию Hummingbot?
from hummingbot.strategy.script_strategy_base import ScriptStrategyBase from hummingbot.core.data_type.common import OrderType, TradeType from decimal import Decimal class SimpleMarketMaker(ScriptStrategyBase): """Простой маркет-мейкер с фиксированным спредом""" trading_pair = "BTC-USDT" exchange = "binance" # Параметры bid_spread = Decimal("0.001") # 0.1% под mid-price ask_spread = Decimal("0.001") # 0.1% над mid-price order_amount = Decimal("0.001") # BTC на каждую сторону refresh_time = 30 # секунд markets = {exchange: {trading_pair}} def on_tick(self): if self.current_timestamp - self.last_refresh < self.refresh_time: return self.cancel_all_orders() mid_price = self.connectors[self.exchange].get_mid_price(self.trading_pair) if not mid_price: return bid_price = mid_price * (1 - self.bid_spread) ask_price = mid_price * (1 + self.ask_spread) self.buy( connector_name=self.exchange, trading_pair=self.trading_pair, amount=self.order_amount, order_type=OrderType.LIMIT, price=bid_price, ) self.sell( connector_name=self.exchange, trading_pair=self.trading_pair, amount=self.order_amount, order_type=OrderType.LIMIT, price=ask_price, ) self.last_refresh = self.current_timestamp Этот скрипт — база. Для продакшена добавляют inventory control, timeout, логирование ошибок.
Как настроить стратегию через YAML?
# conf/strategies/pure_market_making.yml strategy: pure_market_making exchange: binance market: BTC-USDT bid_spread: 0.1 # % ask_spread: 0.1 # % minimum_spread: -100 # допускаем отрицательный спред order_refresh_time: 30 # секунд max_order_age: 1800 # 30 минут order_amount: 0.001 filled_order_delay: 60 inventory_skew_enabled: true inventory_target_base_pct: 50 inventory_range_multiplier: 1.0 Что входит в настройку Hummingbot?
- Анализ торгового сценария и выбор стратегии.
- Установка и конфигурация инфраструктуры (Docker, сервер).
- Написание кастомных скриптов под ваши параметры.
- Интеграция с биржами (API keys, Whitelist IP).
- Тестирование на исторических данных и sandbox.
- Обучение команды и документация.
Сроки зависят от сложности стратегии: от 1 дня для базовой настройки Pure Market Making до 3 дней для кастомного скрипта с Cross-Exchange и хеджированием.
Типичные ошибки при интеграции Hummingbot
| Ошибка | Последствие | Решение |
|---|---|---|
| Игнорирование inventory skew | Накопление excess inventory | Использовать динамический сдвиг спреда |
| Неправильный target_base_pct | Убытки при тренде | Для волатильных пар 40-45%, для стабильных 50% |
| Отсутствие stop-loss | Крупные убытки при движении >5% | Отменять ордера и фиксировать позицию |
| Слишком частый refresh | Избыточные комиссии | Увеличить order_refresh_time до 60 секунд |
На одном проекте мы обнаружили, что бот с refresh_time=15 на паре ETH-USDT совершал 200 ордеров в минуту, что при комиссии 0.1% съело всю прибыль. После настройки refresh_time=60 спред удержался, а комиссии снизились на 60%.
Hummingbot — стандарт де-факто для крипто маркет-мейкинга в open source пространстве. Наши инженеры сертифицированы Hummingbot и помогут настроить стратегию под ваш профиль риска. Свяжитесь с нами для консультации — мы проанализируем рынок и предложим оптимальную конфигурацию. Закажите интеграцию Hummingbot, и ваша прибыль перестанет зависеть от случайностей.







