Розробка AI-моделі аналізу потоку ордерів
Аналіз Order Flow — вивчення угод, а не заявок. Якщо Order Book показує наміри, то Order Flow показує реальні дії: хто агресивно купує або продає, знімаючи ліквідність з книги. Це основа для розуміння "розумних грошей" та дисбалансу попиту/пропозиції.
Ключові концепції 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 ознаки:
def compute_order_flow_features(trades_df, window_seconds=60):
features = {}
# Класифікація Buyer/Seller
trades_df['initiator'] = np.where(trades_df['side'] == 'buy', 1, -1)
# Кружні агрегації
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'])
# Розподіл розміру угоди
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 як матриця: [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 — еталон для інституційного виконання. Відхилення ціни від VWAP з урахуванням обсягу:
VWAP deviation signal:
- Ціна вище VWAP + великі обсяги покупок → тренд підтверджений
- Ціна вище VWAP + продавець домінує в обсягу → потенційний розворот
TWAP vs. VWAP виконання: Для великих ордерів — прогнозування оптимального часу виконання для мінімізації market impact. RL-агент оптимізує стратегію виконання.
Завдання прогнозування
Короткострокові (1-10 хв):
- Напрямок mid-price за наступні N угод
- Вірогідність значущого руху в наступні X секунд
- Оцінка негайного market impact від розміщення ордера
Якість виконання:
- Проковзування: прогнозування відхилення виконання від теоретичної ціни
- Оптимальний розмір ордера: максимальний розмір без значущого market impact
Складені дисбаланси та великі рівні
"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: комплексні дані ринку США
- Binance WebSocket: крипто L3 (за угодами)
Зберігання: ClickHouse ідеальний для тікових даних: колонарне зберігання, < 1 мс запити на мільярди рядків. TimescaleDB як альтернатива PostgreSQL.
Часовая шкала: Order Flow Feature Engineering + базова регресія — 3-4 тижні. Footprint CNN з backtesting та production pipeline — 3-4 місяці.







