Торгівля криптовалютами на великі суми стикається з фрагментацією ліквідності: навіть на топ-5 біржах доступний обсяг за найкращою ціною рідко перевищує 10–15% від усього ордера. Залишок доводиться добирати за гіршими цінами — прослизання з'їдає прибуток. Smart order routing (SOR) вирішує цю проблему, розподіляючи ордер по кількох майданчиках для мінімізації вартості виконання. Наша команда спеціалізується на розробці таких алгоритмів понад 5 років і гарантує зниження витрат на 20–35% (згідно з внутрішнім бенчмаркінгом).
SOR — це не просто агрегатор цін: він враховує комісії бірж (taker/withdrawal), затримки мережі, глибину стакана та можливість паралельного виконання. Без такого підходу великий ордер на 50 BTC ризикує втратити до 0.5% на прослизанні, що при вартості 2.25 млн $ еквівалентно $11 250 збитку. У цій статті розберемо внутрішній устрій SOR, алгоритм розподілу обсягу та способи захисту від latency arbitrage. Покажемо на прикладі, як обрати оптимальні маршрути, і запропонуємо готове рішення для вашої торгової системи.
Що таке Smart Order Routing?
Smart order routing (SOR) — алгоритм, що автоматично розподіляє ордери між біржами для мінімізації вартості виконання (Wikipedia). Його задача — знайти оптимальне розбиття обсягу по доступних майданчиках з урахуванням усіх супутніх витрат. У криптотрейдингу це особливо актуально через високу волатильність та фрагментовану ліквідність.
Як працює SOR?
SOR автоматично збирає стакани з кількох бірж, перераховує ціни з урахуванням комісій (taker fee, withdrawal fee) та затримок, а потім розподіляє обсяг так, щоб мінімізувати підсумкову вартість. Результат — до 30% економії на великих ордерах порівняно з наївною маршрутизацією.
Приклад. Потрібно купити 50 BTC. Доступні:
- Binance: найкращий ask 45,100, доступно 12 BTC
- Bybit: найкращий ask 45,095, доступно 8 BTC
- OKX: найкращий ask 45,102, доступно 25 BTC
- Kraken: найкращий ask 45,098, доступно 10 BTC
Наївний підхід: взяти найкращу ціну (Bybit). Але там лише 8 BTC. SOR розподіляє: 8 BTC на Bybit, 12 BTC на Binance, 10 BTC на Kraken, 20 BTC на OKX. Підсумкова ціна виявляється нижчою, ніж якби ми купили все на Binance.
Чому транзакційні витрати критичні?
Проста агрегація цін без комісій може призвести до невірного вибору біржі. У SOR ми використовуємо повну модель вартості:
| Складова | Опис |
|---|---|
| Exchange fee | Taker fee на кожній біржі (0.03–0.07%) |
| Withdrawal fee | При переказі між біржами (якщо потрібно) |
| Slippage | Різниця між найкращою ціною та ціною виконання |
| Funding rate | Для perpetual позицій |
| Network latency | Швидше виконання на найближчих біржах |
Adjusted cost model: Total Cost = Σ(qty_i × price_i × (1 + fee_i)) + slippage_estimate_i Порівняємо наївну маршрутизацію та SOR:
| Критерій | Фіксована маршрутизація | SOR |
|---|---|---|
| Вибір біржі | За мінімальною комісією | Динамічний, враховуючи глибину |
| Обробка великих ордерів | Немає розбивки | Дроблення та розподіл |
| Врахування прослизання | Ні | Моделювання slippage |
| Адаптація до змін | Статичні | Real-time |
Алгоритм оптимального розподілу
Sweeping liquidity по рівнях: будуємо об'єднаний стакан з усіх бірж, сортуємо за скоригованою ціною (з урахуванням комісій) та заповнюємо обсяг послідовно.
def merge_orderbooks(orderbooks_dict): """ Об'єднуємо стакани кількох бірж у єдиний """ merged_asks = [] for exchange, ob in orderbooks_dict.items(): for price, qty in ob['asks']: # Враховуємо fees біржі adjusted_price = price * (1 + fees[exchange]) merged_asks.append({ 'exchange': exchange, 'price': price, 'adjusted_price': adjusted_price, 'qty': qty }) return sorted(merged_asks, key=lambda x: x['adjusted_price']) def optimal_allocation(merged_asks, target_qty): allocation = {} remaining = target_qty for level in merged_asks: if remaining <= 0: break fill_qty = min(level['qty'], remaining) exchange = level['exchange'] allocation[exchange] = allocation.get(exchange, 0) + fill_qty remaining -= fill_qty return allocation Як захиститися від latency arbitrage?
Якщо SOR одночасно відправляє ордери на кілька бірж, ціна може встигнути змінитися. Ми реалізуємо:
- Паралельну відправку ордерів з єдиним таймаутом
- Fallback: якщо ордер на одній біржі не виконався — швидке перерозподілення обсягів
- Алгоритмічний моніторинг затримок та автоматичне підстроювання
Для проєктів з високою частотою ордерів ми рекомендуємо інтеграцію нашого SOR-модуля — отримайте консультацію інженера для оцінки ваших затримок.
Процес розробки SOR під ключ
Ми пропонуємо повний цикл створення алгоритму розумної маршрутизації:
- Аналіз вашої торгової стратегії та вибір оптимальної архітектури
- Розробка модуля збору стаканів (CCXT Pro, WebSocket) та кешування (Redis)
- Реалізація ядра SOR з підтримкою 5–10 CEX та DEX пулів
- Інтеграція з вашою торговою системою через REST API
- Тестування на історичних даних (backtesting) та в реальному часі
- Документація, навчання команди та гарантійна підтримка 1 місяць
Орієнтовні строки: від 4 до 12 тижнів залежно від складності. Вартість розраховується індивідуально.
Моніторинг у реальному часі
Після впровадження SOR ми налаштовуємо метрики якості виконання: Execution quality score (середня ціна vs найкраща ціна на одній біржі), Fill rate та Latency breakdown. Це дозволяє постійно покращувати алгоритм.
Зв'яжіться з нами для оцінки вашого проєкту — ми підберемо оптимальну архітектуру та строки реалізації. Отримайте консультацію інженера безкоштовно.







