Зазначимо: коли ви запускаєте криптобіржу, перша проблема — порожній стакан ордерів. Без ліквідності трейдери йдуть до конкурентів. Ми вирішуємо це підключенням професійних провайдерів ліквідності (LP) — за 2-4 тижні отримуєте двосторонні котирування з глибиною, як у топ-5 бірж. Пошук відповідного провайдера ліквідності — нетривіальне завдання: потрібно враховувати спреди, глибину стакана, час відгуку та надійність. Ми проаналізували понад 30 провайдерів, включаючи Prime Broker, агреговані API та DEX/AMM, і відібрали оптимальних для кожного профілю біржі. Наш досвід: понад 30 інтеграцій LP для бірж різного масштабу, від стартапів до платформ з добовою торгівлею $50M+. Гарантуємо стабільність: uptime 99.95%, спреди від 0.01%, час відповіді < 50 мс.
Інтеграція провайдерів ліквідності: повний цикл
Вибір LP залежить від обсягів, регулювання та типів активів. Розглянемо три основні категорії:
| Тип провайдера | Приклади | Вимоги | Швидкість інтеграції | Мінімальний обсяг |
|---|---|---|---|---|
| Prime Broker | Wintermute, Jump, Cumberland | KYB, юрособа, legal agreement | 2-4 тижні | $1M/міс |
| Aggregated API | B2Broker, FXCM Crypto | KYB, API ключі | 1-2 тижні | $100K/міс |
| DEX/AMM (0x, 1inch) | Uniswap, Curve | Немає KYC, лише API | 1-3 дні | Немає |
Prime Broker дає найкращі спреди, але вимагає інституційного статусу. Aggregated API — золота середина для середніх бірж. DEX/AMM — для long-tail токенів, де немає ліквідності у централізованих LP. Prime Broker забезпечує спреди в 3-5 разів вужчі, ніж DEX/AMM для основних пар, що критично для великих ордерів.
| Параметр | CEX LP (Prime Broker) | DEX/AMM (Uniswap) |
|---|---|---|
| Спред (основні пари) | 0.01-0.05% | 0.05-1% |
| Спред (альткойни) | 0.1-0.5% | 0.5-3% |
| Глибина стакана | 10 BTC+ | 1 BTC+ |
| KYC | Так | Ні |
| Мінімальний обсяг | $1M/міс | Немає |
| Час інтеграції | 2-4 тижні | 1-3 дні |
| Failover | Ланцюжок LP + DEX fallback | Залежить від пула |
Як вибрати провайдера ліквідності під свою біржу?
Процес підключення Prime Broker складається з чотирьох етапів: KYB та підписання Master Agreement (1-2 тижні), технічна інтеграція по FIX або REST/WebSocket з налаштуванням Heartbeat, депозит або колатерал від $100K, та go-live з моніторингом якості виконання. Типова помилка — ігнорувати failover. Якщо один LP падає, ордери втрачаються. Ми завжди налаштовуємо ланцюжок з 3+ провайдерів та DEX fallback.
Що входить в інтеграцію LP під ключ?
Інтеграція LP під ключ включає аналітику: збір вимог по глибині, інструментах та latency; проектування архітектури агрегації, failover та Smart Order Routing; реалізацію через REST/WebSocket/FIX з адаптерами під кожного провайдера; навантажувальне тестування до 5000 RPS з симуляцією збоїв; деплой в production з моніторингом (Tenderly, Grafana); документацію API та runbook для incident response; та цілодобову підтримку з реагуванням на інциденти.
Типові помилки при інтеграції LP
Серед типових помилок — ігнорування failover: якщо один LP падає, ордери втрачаються. Натомість необхідно налаштувати ланцюжок з 3+ провайдерів та DEX fallback. Ще одна помилка — неправильний SOR: Smart Order Routing без врахування глибини може виконати ордер за поганою ціною. Використовуємо TWAP-алгоритм з дробленням. Відсутність моніторингу quality of fills також критична: різниця між quoted та executed ціною — метрика, яку потрібно відстежувати, інакше ви не дізнаєтесь, що LP дає погане виконання.
Як ми будуємо failover та resilience
Наша архітектура витримує відмову до 2 LP одночасно без втрати якості. Приклад реалізації:
Архітектура failover на Python
class ResilientLPManager: def __init__(self, providers: list, fallback_amm=None): self.providers = {p.name: p for p in providers} self.provider_health = {p.name: True for p in providers} self.fallback_amm = fallback_amm # DEX як fallback async def get_quote_with_fallback(self, symbol, side, qty) -> LPQuote: for provider_name, provider in self.providers.items(): if not self.provider_health[provider_name]: continue try: quote = await asyncio.wait_for( provider.get_quote(symbol, side, qty), timeout=2.0 ) return quote except (asyncio.TimeoutError, LPError) as e: logger.warning(f"LP {provider_name} failed: {e}") await self.mark_unhealthy(provider_name) if self.fallback_amm: return await self.fallback_amm.get_quote(symbol, side, qty) raise NoLiquidityAvailable("All LP providers failed") Додатково налаштовуємо Heartbeat-моніторинг: якщо провайдер не відповідає 5 секунд, автоматично виключаємо його з ротації та повідомляємо чергового.
Агрегація ліквідності від декількох провайдерів
Зазначимо: коли підключаєте декілька LP, потрібно агрегувати котирування та вибирати найкращу. Клас LiquidityAggregator реалізує збір та фільтрацію застарілих котирувань:
class LiquidityAggregator: def __init__(self, providers: list[BaseLPClient]): self.providers = providers self.quotes: dict[str, list[LPQuote]] = {} def on_quote_update(self, quote: LPQuote): symbol = quote.symbol if symbol not in self.quotes: self.quotes[symbol] = [] self.quotes[symbol] = [ q for q in self.quotes[symbol] if q.provider != quote.provider ] self.quotes[symbol].append(quote) def get_best_bid_ask(self, symbol: str) -> BestBidAsk: quotes = self.quotes.get(symbol, []) valid = [q for q in quotes if not q.is_stale()] if not valid: return None best_bid = max(valid, key=lambda q: q.bid) best_ask = min(valid, key=lambda q: q.ask) return BestBidAsk( bid=best_bid.bid, bid_size=best_bid.bid_size, bid_provider=best_bid.provider, ask=best_ask.ask, ask_size=best_ask.ask_size, ask_provider=best_ask.provider, spread_bps=int((best_ask.ask - best_bid.bid) / best_bid.bid * 10000) ) Що таке Smart Order Routing і як він працює?
SmartOrderRouter вибирає оптимального провайдера для ордера. Для market-ордерів використовуємо дроблення (TWAP), щоб не прослизати:
class SmartOrderRouter: def route(self, order: ClientOrder, aggregator: LiquidityAggregator) -> RoutingPlan: available = aggregator.get_all_quotes(order.symbol) if order.type == 'market': return self.route_market(order, available) elif order.type == 'limit': return self.route_limit(order, available) def route_market(self, order: ClientOrder, quotes: list[LPQuote]) -> RoutingPlan: remaining = order.quantity plan = [] sorted_quotes = sorted( quotes, key=lambda q: q.ask if order.side == 'buy' else -q.bid ) for quote in sorted_quotes: if remaining <= 0: break fill_qty = min(remaining, quote.ask_size if order.side == 'buy' else quote.bid_size) plan.append(RoutingLeg( provider=quote.provider, quantity=fill_qty, expected_price=quote.ask if order.side == 'buy' else quote.bid )) remaining -= fill_qty if remaining > 0: raise InsufficientLiquidity(f"Could not route full order, {remaining} remaining") return RoutingPlan(legs=plan, total_quantity=order.quantity) Детальніше про принципи SOR можна прочитати в Wikipedia.
Що вибрати: CEX LP чи DEX/AMM?
Aggregated CEX LP (B2Broker) дає спреди 0.01–0.05% для топ-пар, але вимагає KYB та щомісячного обсягу. DEX/AMM (Uniswap) не вимагає KYC і доступний для будь-яких токенів, але спреди можуть бути вищими (0.05–1%) і є ризик impermanent loss при використанні власного пула. Найкраща стратегія — комбінувати: основні пари через CEX LP, long-tail через DEX. Економія на спреді може досягати 50% порівняно з ринковими ордерами без SOR. Середня вартість інтеграції LP для біржі варіюється від $20 000 до $100 000 залежно від складності, кількості провайдерів та вимог до latency.
Процес роботи: від запиту до production
Процес включає етапи: аналітика (1-2 дні), проектування (2-3 дні), реалізація (1-2 тижні), тестування (3-5 днів), деплой (1-2 дні) та пост-підтримка. Оцінимо ваш проєкт за 1 день — зв'яжіться з нами для консультації. Замовте інтеграцію LP під ключ та отримайте готову архітектуру за 2-4 тижні. Отримайте готову інтеграцію LP з гарантією uptime 99.95%.







