Представьте: вы запускаете крупный ордер на 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 — это коэффициент, измеряющий влияние потока ордеров на цену. Его оценка требует очистки от микроструктурного шума.
Как мы строим модель?
Процесс включает пять этапов:
- Аналитика — сбор данных за последние 12 месяцев: order book snapshots, trade data, funding rates.
- Проектирование — разработка 30+ признаков: временные циклические кодировки, лаги спреда и глубины, скользящие средние, волатильность, Amihud ratio.
- Реализация — обучение модели LightGBM с настройкой гиперпараметров через Optuna. Базовая версия предсказывает спред на 4 часа вперёд с точностью 85% — это на 30% лучше ARIMA и на 15% лучше LSTM на том же горизонте.
- Тестирование — валидация walk-forward с окном 6 месяцев.
- Деплой — интеграция с торговым движком через 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 недель. Стоимость рассчитывается индивидуально после аудита. Закажите разработку — начните с аудита ваших данных.







