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