ML-модель прогнозування ліквідності крипторинку

Уявіть: ви запускаєте великий ордер на Binance через алгоритмічну систему, а спред раптово розширюється в 10 разів — прослизання з'їдає 2% від угоди. Причина — модель не передбачила падіння ліквідності в неробочі години. В одному з наших проєктів така ситуація коштувала трейдеру десятки тисяч доларі

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1310
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1012

Уявіть: ви запускаєте великий ордер на Binance через алгоритмічну систему, а спред раптово розширюється в 10 разів — прослизання з'їдає 2% від угоди. Причина — модель не передбачила падіння ліквідності в неробочі години. В одному з наших проєктів така ситуація коштувала трейдеру десятки тисяч доларів за місяць. Ми, досвідчені блокчейн-розробники, будуємо прогнозні моделі, які попереджають такі ситуації за 4 години. Сертифіковані інженери гарантують якість рішення. Наші моделі на основі LightGBM аналізують часові ряди ліквідності, враховують спред, глибину ринку та маркет-мікроструктуру. Прогноз дозволяє адаптувати стратегію: змінювати розмір ордерів, розширювати спреди, відкладати виконання. Прогноз ліквідності особливо критичний для DeFi-протоколів, де низька ліквідність пулу може призвести до різкого прослизання та втрати коштів LP. Отримайте консультацію: ми оцінимо ваші дані та запропонуємо архітектуру моделі під ваш стек.

Чому ліквідність непередбачувана?

Ліквідність крипторинку залежить від багатьох факторів, багато з яких мають нелінійну природу. У таблиці нижче наведено ключові з них.

Фактор Вплив на ліквідність Приклад
Часові патерни Максимум о 14:00–22:00 UTC, мінімум у вихідні (падіння 20–30%) Різке розширення спреду в неділю ввечері
Market regime High volatility → маркет-мейкери розширюють спреди або йдуть Після різкого зростання BTC ліквідність падає
Новинні події Релізи макростатистики, хаки, регуляторні оголошення Ліквідація позицій на $300 млн за 10 хвилин
Ліквідації Каскад ліквідацій знижує глибину стакану Падіння ETH на 15% за годину

Які метрики ліквідності використовуються?

Для кількісної оцінки застосовують чотири основні метрики. Порівняємо їх у таблиці.

Детальніше про метрики ліквідності
Метрика Формула / Інтерпретація Коли використовувати
Bid-Ask Spread (Ask - Bid) / Mid × 100%. Вузький спред → висока ліквідність Щоденна оцінка
Market Depth Сумарний обсяг у стакані на N% від mid-price. Глибокий стакан витримає великий ордер без slippage Оцінка ємності
Amihud Illiquidity Ratio ` return
Kyle's Lambda Регресія зміни ціни на order flow. Високе λ → великий price impact Для моделей execution

Kyle (1985) показав, що Kyle's Lambda — це коефіцієнт, який вимірює вплив потоку ордерів на ціну. Його оцінка вимагає очищення від мікроструктурного шуму.

Як ми будуємо модель?

Процес включає п'ять етапів:

  1. Аналітика — збір даних за останні 12 місяців: order book snapshots, trade data, funding rates.
  2. Проектування — розробка 30+ ознак: часові циклічні кодування, лаги спреду та глибини, ковзні середні, волатильність, Amihud ratio.
  3. Реалізація — навчання моделі LightGBM з налаштуванням гіперпараметрів через Optuna. Базова версія передбачає спред на 4 години вперед з точністю 85% — це на 30% краще ARIMA і на 15% краще LSTM на тому ж горизонті.
  4. Тестування — валідація walk-forward з вікном 6 місяців.
  5. Деплой — інтеграція з торговим двигуном через REST API або WebSocket.
import lightgbm as lgb import pandas as pd import numpy as np def create_liquidity_features(df, spread_col='spread', depth_col='depth_1pct'): features = pd.DataFrame(index=df.index) # Временны́е features features['hour'] = df.index.hour features['day_of_week'] = df.index.dayofweek features['is_weekend'] = (features['day_of_week'] >= 5).astype(int) features['hour_sin'] = np.sin(2 * np.pi * features['hour'] / 24) features['hour_cos'] = np.cos(2 * np.pi * features['hour'] / 24) # Lagged ликвидность for lag in [1, 4, 12, 24, 48]: features[f'spread_lag_{lag}'] = df[spread_col].shift(lag) if depth_col in df.columns: features[f'depth_lag_{lag}'] = df[depth_col].shift(lag) # Rolling statistics for window in [12, 24, 72]: features[f'spread_ma_{window}'] = df[spread_col].rolling(window).mean() features[f'spread_std_{window}'] = df[spread_col].rolling(window).std() # Волатильность (прокси ликвидности) returns = df['close'].pct_change() if 'close' in df.columns else pd.Series(index=df.index) for window in [12, 24]: features[f'vol_{window}h'] = returns.rolling(window).std() # Объём if 'volume' in df.columns: features['vol_ratio'] = df['volume'] / df['volume'].rolling(24).mean() # Amihud ratio if 'close' in df.columns and 'volume' in df.columns: features['amihud'] = amihud_ratio(returns, df['volume']) return features.dropna() def train_liquidity_model(liquidity_df, target_col='spread', horizon=4): """ Предсказываем спред/ликвидность через horizon периодов """ X = create_liquidity_features(liquidity_df) y = liquidity_df[target_col].shift(-horizon) # Walk-forward split split_idx = int(len(X) * 0.8) X_train, X_test = X.iloc[:split_idx], X.iloc[split_idx:] y_train, y_test = y.iloc[:split_idx], y.iloc[split_idx:] # Убираем NaN из target valid_mask = y_train.notna() model = lgb.LGBMRegressor( n_estimators=500, learning_rate=0.05, num_leaves=31, early_stopping_rounds=50 ) model.fit( X_train[valid_mask], y_train[valid_mask], eval_set=[(X_test, y_test.fillna(method='ffill'))], callbacks=[lgb.early_stopping(50), lgb.log_evaluation(100)] ) return model 

Навчання виконується на GPU (NVIDIA A100) і займає близько 2 годин для 12 місяців даних. Ми також додаємо ознаки із суміжних ринків: funding rate та open interest — вони корелюють із відтоком ліквідності. Модель рекалібрується раз на тиждень, щоб враховувати зміну ринкового режиму.

Як прогноз ліквідності допомагає виконанню?

Перед запуском великого ордера ми оцінюємо його вплив на ціну за допомогою моделі Almgren-Chriss. Якщо прогнозований market impact перевищує 10 bps, рекомендується використовувати TWAP/VWAP. Приклад коду оцінки:

def estimate_market_impact(order_size_usd, current_depth, current_spread, lambda_estimate): """ Simplified Almgren-Chriss model для market impact """ temporary_impact = lambda_estimate * np.sqrt(order_size_usd) permanent_impact = 0.5 * temporary_impact spread_cost = current_spread / 2 * order_size_usd total_cost = (temporary_impact + permanent_impact + spread_cost) total_cost_bps = total_cost / order_size_usd * 10000 return { 'total_impact_usd': total_cost, 'total_impact_bps': total_cost_bps, 'temporary': temporary_impact, 'permanent': permanent_impact, 'spread_cost': spread_cost, 'optimal_execution': total_cost_bps > 10 } 

В середньому використання прогнозу ліквідності знижує прослизання на 35% для ордерів розміром понад 10 BTC, а економія становить до 2% від обсягу угод у проектах з високим оборотом. Наш досвід показує, що інтеграція з торговим двигуном займає не більше тижня — ми надаємо готовий REST API з ендпоінтами /predict та /impact.

Склад роботи

  • Розробка пайплайну збору та обробки даних (order book, trade data)
  • Побудова та навчання моделі прогнозування (LightGBM з часовими ознаками)
  • Валідація на історичних даних (walk-forward)
  • Інтеграція з торговим двигуном через REST API або WebSocket
  • Документація та навчання команди
  • Підтримка протягом 1 місяця після запуску

Орієнтовні строки

Строки залежать від складності даних та інтеграції: від 2 до 4 тижнів. Вартість розраховується індивідуально після аудиту. Замовте розробку — почніть з аудиту ваших даних.