Інтеграція 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, і ваш прибуток перестане залежати від випадковостей.







