Разработка AI-модели анализа потока ордеров Order Flow
Order Flow анализ — изучение сделок, а не заявок. Если Order Book показывает намерения, то Order Flow показывает реальные действия: кто агрессивно покупает или продаёт, снимая ликвидность с книги. Это основа для понимания "smart money" и имбаланса спроса/предложения.
Ключевые концепции Order Flow
Aggressor vs. Passive: Каждая сделка инициирована либо покупателем (market buy — поднял ask), либо продавцом (market sell — ударил bid). Классификация по tick rule или Lee-Ready:
- Сделка по цене > предыдущей → buyer-initiated
- Сделка по цене < предыдущей → seller-initiated
- По той же цене → смотрим на предыдущее движение
Delta (Cumulative Volume Delta, CVD):
Delta = Buyer_Volume - Seller_Volume
CVD = Σ Delta за период
Положительный CVD при росте цены = подтверждение тренда. Отрицательный CVD при росте цены = дивергенция (потенциальный разворот).
Absorption: крупный пассивный участник "поглощает" агрессивные ордера без движения цены. Это уровень поддержки/сопротивления с крупным игроком.
Feature Engineering из Order Flow
Trade-level features:
def compute_order_flow_features(trades_df, window_seconds=60):
features = {}
# Buyer/Seller classification
trades_df['initiator'] = np.where(trades_df['side'] == 'buy', 1, -1)
# Rolling window aggregations
features['buy_volume'] = trades_df[trades_df.initiator==1]['volume'].rolling(f'{window_seconds}s').sum()
features['sell_volume'] = trades_df[trades_df.initiator==-1]['volume'].rolling(f'{window_seconds}s').sum()
features['cvd'] = features['buy_volume'] - features['sell_volume']
features['trade_imbalance'] = features['cvd'] / (features['buy_volume'] + features['sell_volume'])
# Trade size distribution
features['avg_buy_size'] = (features['buy_volume'] / buy_count)
features['avg_sell_size'] = (features['sell_volume'] / sell_count)
features['large_buy_ratio'] = (large_buy_volume / total_volume) # сделки > 95th percentile
return features
Volume Profile: Гистограмма объёма по ценовым уровням за период (VPOC = Volume Point of Control — уровень с максимальным объёмом). Используется как уровень поддержки/сопротивления.
Time and Sales анализ: Паттерны в последовательности сделок: кластеры крупных покупок за короткое время = крупный игрок входит в позицию.
Footprint Chart как входные данные
Footprint (или Cluster Chart) — Order Book + Order Flow объединённые:
- Каждая свеча разбита на ценовые уровни
- Каждый уровень: [buyer_volume × seller_volume]
- Видны дивергенции: много покупок на уровне, но цена не выросла → absorption
ML на footprint данных:
# Footprint as matrix: [time_bins × price_levels × 2 (buy/sell)]
# Например: 100 одноминутных баров × 20 ценовых уровней × 2
class FootprintCNN(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv3d(1, 32, kernel_size=(3, 3, 2))
self.conv2 = nn.Conv3d(32, 64, kernel_size=(3, 3, 1))
self.flatten = nn.Flatten()
self.fc = nn.Linear(64 * ..., 1)
Volume Weighted Average Price (VWAP) анализ
VWAP — benchmark для institutional execution. Отклонение цены от VWAP с учётом объёма:
VWAP deviation signal:
- Цена выше VWAP + большие buy объёмы → тренд подтверждён
- Цена выше VWAP + seller доминирует в объёме → потенциальный разворот
TWAP vs. VWAP execution: Для крупных ордеров — предсказание оптимального времени исполнения для минимизации market impact. RL-агент оптимизирует execution strategy.
Prediction Tasks
Short-term (1-10 min):
- Направление mid-price за следующие N сделок
- Вероятность значительного движения в ближайшие X секунд
- Оценка немедленного market impact от размещения ордера
Execution Quality:
- Слипаж: предсказание отклонения исполнения от теоретической цены
- Optimal order sizing: максимальный размер без значимого market impact
Stacked Imbalance и крупные уровни
"Stacked imbalance" — несколько соседних ценовых уровней с преобладанием покупок/продаж. Статистически это уровни поддержки/сопротивления.
ML-детекция значимых уровней:
def detect_imbalance_levels(footprint_data, threshold=0.7):
"""
Уровень значим, если buy_vol / (buy_vol + sell_vol) > threshold
ИЛИ sell_vol / ... > threshold
И суммарный объём в топ-20% дневного
"""
Данные и инфраструктура
Источники тиковых данных:
- Dukascopy (forex): бесплатные исторические тиковые данные
- Kinetick (фьючерсы): real-time тиковые данные, $50/мес
- IQFeed: comprehensive US market data
- Binance WebSocket: криптовалютный L3 (по сделкам)
Хранение: ClickHouse идеален для тиковых данных: колонарное хранение, < 1 мс запросы на миллиарды строк. TimescaleDB как PostgreSQL-альтернатива.
Сроки: Order Flow Feature Engineering + baseline regression — 3-4 недели. Footprint CNN с backtesting и production pipeline — 3-4 месяца.







