Без ликвидности биржа мертва: широкий спред, глубокий 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 успешных проектов. Свяжитесь с нами для оценки вашего проекта. Закажите разработку системы маркет-мейкинга под ключ — получите консультацию по вашему проекту.







