Розробка HFT-алгоритму (високочастотна торгівля)
High-Frequency Trading у крипто — це не те саме, що HFT на традиційних ринках. Немає co-location поруч із exchange matching engine, немає прямих FIX-з'єднань з мікросекундною затримкою. Але принципи залишаються: швидкість виконання, високий обсяг угод, утримання позицій від мілісекунд до хвилин, прибуток на малих рухах із великим плечем.
HFT-стратегії у крипто
Latency arbitrage — використання різниці в затримках між учасниками ринку. Якщо ваш WebSocket отримує оновлення order book швидше, ніж інші учасники встигають реагувати — з'являється вікно для торгівлі.
Statistical arbitrage — торгівля на тимчасових відхиленнях у цінових співвідношеннях між корельованими активами. Наприклад, BTC spot vs BTC perpetual futures.
Market making — постійне виставлення bid/ask ордерів на обох сторонах. Прибуток від bid-ask спреду мінус risk inventory.
Order book imbalance — аналіз дисбалансу між bid та ask сторонами стакану. Значний перевес на одній стороні передбачає короткострокове руху ціни.
Momentum ignition — швидкий вхід при виявленні початку короткострокового тренду на tick-даних.
Архітектура низьколатентної системи
Ключовий принцип: кожен компонент оптимізується для мінімальної затримки.
Мережевий рівень:
- Co-location (VPS у тому ж датацентрі, що й exchange): AWS Tokyo для Binance, AWS Frankfurt для Kraken
- Пряме WebSocket з'єднання без посередницьких проксі
- Оптимізація TCP: TCP_NODELAY, збільшені SO_SNDBUF/SO_RCVBUF буфери
- Keep-alive з'єднання, мінімізація reconnect'ів
Мова та runtime:
- C++ — максимальна продуктивність, sub-millisecond затримка
- Rust — близько до C++ за продуктивністю, безпечніше
- Python + Cython/NumPy — прийнятно для стратегій з затримкою > 10ms
- Java — використовується у традиційному HFT, менше популярна у крипто
Управління order book:
// Інкрементальне оновлення order book
void OrderBook::update(Side side, Price price, Quantity qty) {
auto& book = (side == Side::Bid) ? bids_ : asks_;
if (qty == 0) {
book.erase(price);
} else {
book[price] = qty;
}
best_bid_ask_cache_dirty_ = true;
}
Повна копія order book в пам'яті, оновлюється через WebSocket diff stream. Немає REST-запитів у hot path.
WebSocket стек для низької затримки
Binance:
-
wss://stream.binance.com:9443/ws/btcusdt@depth@100ms— оновлення кожні 100ms -
wss://stream.binance.com:9443/ws/btcusdt@aggTrade— агреговані угоди -
wss://stream.binance.com:9443/ws/btcusdt@bookTicker— найкраще bid/ask у реальному часі
Bybit:
-
wss://stream.bybit.com/v5/public/linear— perpetual orderbook (depth.1, depth.50, depth.200)
Для мінімальної затримки — підписка на bookTicker (лише найкраще bid/ask) замість повного стакану. Це зменшує обсяг даних та час парсингу.
Стратегія: Order Book Imbalance
def calculate_imbalance(orderbook, n_levels=5):
bid_volume = sum(qty for _, qty in orderbook['bids'][:n_levels])
ask_volume = sum(qty for _, qty in orderbook['asks'][:n_levels])
total = bid_volume + ask_volume
if total == 0:
return 0
return (bid_volume - ask_volume) / total # [-1, 1]
Значення > 0.3 → тиск покупців, вірогідне зростання ціни в наступні кілька секунд. Значення < -0.3 → тиск продавців.
Сигнал використовується для короткострокового входу з тугою stop-loss (0.05–0.1% від ціни).
Виконання та управління ризиком
Типи ордерів: для HFT використовуються limit orders (maker) та іноді market orders (taker). Limit orders економлять на комісіях (maker vs taker).
Ліміти позицій: максимальний розмір позиції, максимальна кількість відкритих позицій, max drawdown за сесію.
Circuit breakers: якщо втрата за N хвилин перевищує M% — алгоритм зупиняється та вимагає ручного втручання.
Моніторинг затримки: логування часу кожного кроку pipeline — від отримання ринкових даних до відправлення ордера. P99 затримка повинна бути нижче визначеного порога (наприклад, 50ms).
Backtesting HFT
Backtesting HFT-стратегій вимагає tick-даних (або агрегованих за рівнем угод), а не OHLCV. Симуляція order book на історичних даних, облік latency, slippage та комісій.
Проблема overfitting: HFT-стратегії особливо схильні до переобучення. Walk-forward analysis та out-of-sample тестування є обов'язковими.
Інфраструктура backtesting: nautilus_trader (Python/Rust) або backtrader для менш вимогливих стратегій. Tick-дані зберігаються у форматах Parquet, ClickHouse для швидких агрегацій.
Що ми розробляємо
Низьколатентну систему для HFT крипто-стратегій: WebSocket-клієнт з інкрементальним оновленням order book, вибрані стратегії (OBI, statistical arb, market making), backtesting на tick-даних, управління ризиком із circuit breakers, моніторинг затримки та продуктивності у реальному часі.







