Без ліквідності біржа мертва: широкий спред, глибокий price impact, відхід трейдерів до конкурентів. Розглянемо типову задачу: біржа запускає пару BTC/USDT, але спред 50 bps при обсязі $1000. Трейдери йдуть на Binance. Наше рішення — розгорнути бота з динамічним спредом 10 bps і глибиною $50k. Результат: спред знижується до 15 bps, обсяг зростає в 5 разів. Ми розробляємо системи маркет-мейкінгу під ключ — від стратегії до продакшену. Досвід команди — 10+ проєктів у DeFi та CeFi. Розробка системи ліквідності біржі (market making) потребує глибокого розуміння мікроструктури ринку та управління ризиками.
Чому динамічний спред критичний для ліквідності?
Статичний спред не адаптується до волатильності та подій. Результат — або збиток при високій волатильності, або втрата конкурентоспроможності. Ми використовуємо динамічний спред, який розширюється при зростанні волатильності та перед важливими подіями (FED, халвінги). Це дозволяє зберігати рентабельність і забезпечувати ліквідність у будь-якій ситуації.
Як market making вирішує проблему ліквідності?
Динамічний спред проти статики — розробка системи ліквідності
Статичний спред не адаптується до волатильності та подій. Результат — або збиток при високій волатильності, або втрата конкурентоспроможності. Ми використовуємо динамічний спред, який розширюється при зростанні волатильності та перед важливими подіями (FED, халвінги).
Управління inventory risk
Без управління інвентарем market maker може накопичити величезну позицію і втратити гроші при розвороті ринку. Наш бот автоматично розраховує inventory skew і зміщує котирування для повернення до нейтральної позиції. При перевищенні лімітів — примусовий market ордер на зовнішній біржі.
Execution risk при хеджуванні
Затримка між угодою клієнта та хеджем на Binance (1-100 мс) створює ризик прослизання. Ми мінімізуємо його через low-latency API та колокацію серверів.
Як влаштована архітектура бота?
Базова архітектура бота
class MarketMaker: def __init__(self, symbol: str, config: MMConfig): self.symbol = symbol self.spread_bps = config.spread_bps self.order_size_base = config.order_size self.num_layers = config.num_layers self.layer_spacing_bps = config.layer_spacing async def compute_quotes(self, mid_price: float) -> list[Quote]: quotes = [] inventory_skew = self.calculate_inventory_skew() for i in range(1, self.num_layers + 1): bid_offset_bps = self.spread_bps * i + inventory_skew ask_offset_bps = self.spread_bps * i - inventory_skew bid_price = mid_price * (1 - bid_offset_bps / 10000) ask_price = mid_price * (1 + ask_offset_bps / 10000) size = self.order_size_base / i quotes.append(Quote('buy', bid_price, size)) quotes.append(Quote('sell', ask_price, size)) return quotes def calculate_inventory_skew(self) -> float: target_inventory = 0 current_inventory = self.get_current_inventory() inventory_deviation = current_inventory - target_inventory skew = inventory_deviation * self.inventory_skew_factor return max(-self.max_skew_bps, min(self.max_skew_bps, skew)) Хеджування
async def hedge_trade(self, trade: InternalTrade): hedge_side = 'buy' if trade.side == 'sell' else 'sell' await self.hedge_exchange.market_order( symbol=self.symbol, side=hedge_side, quantity=trade.quantity ) Inventory management
Ключова метрика — inventory skew. Ми відстежуємо позицію в реальному часі та зміщуємо котирування для повернення до нейтралі.
def get_inventory_metrics(self) -> dict: current_pos = self.get_position_btc() pos_value_usd = current_pos * self.get_mid_price() return { "position_btc": current_pos, "position_usd": pos_value_usd, "max_inventory_usd": self.config.max_inventory_usd, "utilization": abs(pos_value_usd) / self.config.max_inventory_usd, "pnl_unrealized": self.calculate_unrealized_pnl(current_pos) } Що таке execution risk і як його мінімізувати?
Execution risk виникає через затримку між угодою клієнта та хеджем. Чим більша затримка, тим вища ймовірність, що ціна на зовнішній біржі зміниться. Ми знижуємо цей ризик через low-latency API та колокацію серверів поруч із біржею. У критичних випадках використовуємо фіксований спред для покриття можливого прослизання.
Як розраховується динамічний спред?
Спред розраховується як сума вартості переносу, очікуваного adverse selection та маржі. Adverse selection — імовірність торгувати проти інформованого трейдера. У криптовалюті вона вища при високій волатильності та перед великими подіями.
def calculate_dynamic_spread(self) -> float: base_spread = self.config.base_spread_bps volatility = self.get_realized_volatility_1h() vol_multiplier = max(1.0, volatility / self.baseline_volatility) event_factor = 1.5 if self.is_event_window() else 1.0 hedge_spread = self.get_hedge_exchange_spread() hedge_factor = max(1.0, hedge_spread / self.baseline_hedge_spread) return base_spread * vol_multiplier * event_factor * hedge_factor Liquidity provider програма
Біржа може залучати зовнішніх market makers через fee rebate. Стандартні тири:
| Tier | Maker обсяг/30d | Maker fee | Taker fee |
|---|---|---|---|
| Standard | < $1M | 0.10% | 0.15% |
| Market Maker 1 | $1M+ | -0.01% (rebate) | 0.10% |
| Market Maker 2 | $10M+ | -0.02% (rebate) | 0.08% |
| Market Maker 3 | $100M+ | -0.03% (rebate) | 0.06% |
Негативний maker fee означає, що біржа платить market maker-у за кожен виконаний ордер. Це стандартна практика.
Performance requirements
def check_mm_performance(self, mm_id: str, period_minutes: int = 60) -> MMScore: quotes = self.db.get_mm_quotes(mm_id, period_minutes) total_seconds = period_minutes * 60 active_seconds = sum(q.duration for q in quotes if q.has_both_sides) uptime = active_seconds / total_seconds avg_spread = statistics.mean(q.spread_bps for q in quotes) avg_depth_usd = statistics.mean(q.total_depth_usd for q in quotes) return MMScore( uptime=uptime, avg_spread_bps=avg_spread, avg_depth_usd=avg_depth_usd ) On-chain AMM liquidity
Для DEX ліквідність надається через LP-позиції. Порівняння:
| Параметр | CEX Market Making | AMM LP |
|---|---|---|
| Контроль над ціною | Повний | Алгоритмічний |
| Impermanent loss | Ні (хеджується) | Є |
| Вимоги до інфраструктури | Бот + API | Просто транзакція |
| Управління ризиком | Активне | Пасивне |
| Дохідність | Вища | Нижча |
Для серйозного обсягу CEX market making ефективніший. AMM підходить як backstop ліквідність для long-tail токенів.
Процес роботи
- Аналіз ліквідності та конкурентів
- Проектування стратегії з урахуванням ризиків
- Розробка бота на Python/Solidity + Foundry
- Тестування на історичних даних та симуляція
- Деплой на продакшен та моніторинг
Терміни: від 2 тижнів до 2 місяців залежно від складності. Вартість розраховується індивідуально.
Що входить у роботу?
- Архітектура та документація стратегії
- Вихідний код бота з інтеграцією біржі
- Налаштування хеджування та inventory management
- Тестування та оптимізація
- Підтримка та доопрацювання протягом гарантійного періоду
Гарантуємо якість: сертифіковані інженери, досвід понад 10 успішних проєктів. Зв'яжіться з нами для оцінки вашого проєкту. Замовте розробку системи маркет-мейкінгу під ключ — отримайте консультацію по вашому проєкту.







