Перейти к содержимому

Глава 78: Исполнение торговых ордеров с помощью LLM

Обзор

Исполнение торговых ордеров с помощью LLM представляет собой передовой подход к оптимизации исполнения ордеров с использованием больших языковых моделей. Традиционные алгоритмические стратегии исполнения (TWAP, VWAP, implementation shortfall) следуют предопределённым правилам, в то время как исполнение на базе LLM может динамически адаптироваться к рыночным условиям, интерпретировать информацию в реальном времени и принимать интеллектуальные решения для минимизации влияния на рынок и издержек исполнения.

В этой главе рассматривается использование LLM для интеллектуального исполнения сделок как на традиционных фондовых рынках, так и в криптовалютной торговле на платформах типа Bybit.

Содержание

  1. Введение
  2. Теоретические основы
  3. Компоненты издержек исполнения
  4. Традиционные алгоритмы исполнения
  5. Архитектура исполнения на базе LLM
  6. Моделирование влияния на рынок
  7. Принятие решений в реальном времени
  8. Исполнение криптовалют на Bybit
  9. Стратегия реализации
  10. Управление рисками
  11. Метрики производительности
  12. Литература

Введение

Что такое оптимизация исполнения сделок?

Исполнение сделок — это процесс преобразования торговых решений в реальные рыночные транзакции. Задача состоит в том, чтобы исполнить крупные ордера без значительного влияния на рынок:

┌─────────────────────────────────────────────────────────────────────────┐
│ Проблема исполнения │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Вы хотите КУПИТЬ 10 000 акций AAPL │
│ │
│ Вариант A: Исполнить всё сразу │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Текущая цена: $150.00 │ │
│ │ Ваш огромный ордер выходит на рынок │ │
│ │ Цена прыгает до: $152.50 (влияние на рынок!) │ │
│ │ Средняя цена исполнения: $151.25 │ │
│ │ Дополнительные издержки: $12 500 (1.25 * 10 000) │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ Вариант B: Умное исполнение (оптимизированное LLM) │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ LLM анализирует: ликвидность, стакан, новости, время │ │
│ │ Разбивает на 50 ордеров за 2 часа │ │
│ │ Средняя цена исполнения: $150.15 │ │
│ │ Дополнительные издержки: $1 500 (0.15 * 10 000) │ │
│ │ Экономия: $11 000! │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Почему LLM для исполнения сделок?

АспектТрадиционные алгоритмыИсполнение на базе LLM
АдаптивностьФиксированные правилаДинамическая корректировка
Обработка информацииТолько числовые данныеМультимодальный (новости, настроения)
Определение режима рынкаПредопределённые порогиКонтекстное понимание
Объяснение решенийОграниченноеРассуждения на естественном языке
Способность к обучениюТребует переобученияНепрерывная адаптация
Нестандартные ситуацииМогут давать сбойСпособны рассуждать

Теоретические основы

Теория оптимального исполнения

Основополагающая работа Альмгрена и Крисса (2001) формулирует оптимальное исполнение как компромисс между влиянием на рынок и временным риском:

$$\min_{x_t} E\left[\sum_{t=1}^{T} \left( g(v_t) + h(x_t) \right) \right] + \lambda \cdot \text{Var}\left[\sum_{t=1}^{T} P_t x_t \right]$$

Где:

  • $x_t$ — количество, исполненное в момент $t$
  • $g(v_t)$ — временное влияние на рынок (функция скорости торговли)
  • $h(x_t)$ — постоянное влияние на рынок
  • $\lambda$ — параметр неприятия риска
  • $P_t$ — цена в момент $t$

LLM как агент исполнения

LLM можно рассматривать как функции политики, которые отображают состояние рынка в действия по исполнению:

$$\pi_{LLM}: \text{Состояние рынка} \times \text{Состояние ордера} \rightarrow \text{Действие исполнения}$$

Ключевое преимущество в том, что LLM могут учитывать:

┌─────────────────────────────────────────────────────────────────────────┐
│ Слияние информации в LLM │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ВХОДЫ ТРАДИЦИОННОГО АЛГО: ДОПОЛНИТЕЛЬНЫЕ ВХОДЫ LLM: │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ • Ценовые данные │ │ • Настроения новостей │ │
│ │ • Объём │ │ • Социальные сети │ │
│ │ • Спред │ │ • Отчёты о прибылях │ │
│ │ • Глубина стакана │ │ • Макроэкономика │ │
│ │ • Исторические паттерны│ │ • Секторные тренды │ │
│ │ • Волатильность │ │ • Кросс-активы │ │
│ └──────────────────────┘ │ • Регуляторные новости│ │
│ │ • Технический анализ │ │
│ │ • Мнения аналитиков │ │
│ └──────────────────────┘ │
│ │
│ Комбинация → Целостные решения по исполнению │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Метрики качества исполнения

Хорошее исполнение должно минимизировать общие издержки:

┌─────────────────────────────────────────────────────────────────────────┐
│ Декомпозиция издержек исполнения │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Общие издержки = Влияние на рынок + Временные издержки + Упущенная │
│ выгода │
│ │
│ 1. Влияние на рынок │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ • Временное: цена двигается во время сделки │ │
│ │ • Постоянное: сдвиг цены, остающийся после сделки │ │
│ │ • Типично: 0.1-0.5% для ликвидных акций │ │
│ │ 1-5% для неликвидных криптовалют │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 2. Временные издержки │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ • Риск неблагоприятного движения цены при ожидании │ │
│ │ • Выше для волатильных активов │ │
│ │ • Крипто: высокие из-за торговли 24/7 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 3. Упущенная выгода │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ • Цена отказа от немедленного исполнения │ │
│ │ • Упущенная альфа, если сигнал быстро угасает │ │
│ │ • Баланс: быстрое исполнение vs низкое влияние │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Компоненты издержек исполнения

Implementation Shortfall

Implementation Shortfall (IS) измеряет общие издержки исполнения относительно базовой цены:

$$IS = \frac{P_{exec} - P_{decision}}{P_{decision}} \times \text{sign}(\text{side})$$

Где:

  • $P_{exec}$ — средневзвешенная по объёму цена исполнения
  • $P_{decision}$ — цена на момент принятия торгового решения
  • $\text{side}$ = +1 для покупки, -1 для продажи

Модель влияния на рынок

Модель влияния на рынок Альмгрена-Крисса:

Временное влияние: η(v) = η · v^β (обычно β ≈ 0.5-1.0)
Постоянное влияние: g(v) = γ · v (линейно по размеру сделки)
Где:
- v — скорость торговли (акций в единицу времени)
- η — коэффициент временного влияния
- γ — коэффициент постоянного влияния
Общая стоимость = Σ [η(vₜ) + g(vₜ)] × xₜ

Оценка влияния на рынок с помощью LLM

/// Оценка влияния на рынок с расширением LLM
#[derive(Debug, Clone)]
pub struct LlmMarketImpactEstimator {
/// Базовая модель Альмгрена-Крисса
pub base_model: AlmgrenChrissModel,
/// LLM клиент для контекстных корректировок
pub llm_client: LlmClient,
/// Исторические данные о влиянии
pub impact_history: Vec<ImpactObservation>,
/// Текущий режим рынка
pub market_regime: MarketRegime,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MarketImpactEstimate {
/// Базовая оценка модели
pub base_impact_bps: f64,
/// Коэффициент корректировки LLM (0.5 - 2.0)
pub llm_adjustment: f64,
/// Итоговая оценка влияния
pub estimated_impact_bps: f64,
/// Доверительный интервал
pub confidence_low: f64,
pub confidence_high: f64,
/// Рассуждения LLM
pub reasoning: String,
}

Традиционные алгоритмы исполнения

TWAP (Time-Weighted Average Price)

┌─────────────────────────────────────────────────────────────────────────┐
│ Стратегия исполнения TWAP │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Цель: Исполнять равномерно во времени │
│ │
│ Количество на интервал = Общее количество / Число интервалов │
│ │
│ Пример: Купить 10 000 акций за 2 часа (8 интервалов по 15 мин) │
│ │
│ Время | Цель | Цена | Исполнено | Накопленно │
│ ---------|--------|--------|-----------|------------ │
│ 09:30 | 1 250 | $100.0 | 1 250 | 1 250 │
│ 09:45 | 1 250 | $100.1 | 1 250 | 2 500 │
│ 10:00 | 1 250 | $100.2 | 1 250 | 3 750 │
│ 10:15 | 1 250 | $99.9 | 1 250 | 5 000 │
│ 10:30 | 1 250 | $100.3 | 1 250 | 6 250 │
│ 10:45 | 1 250 | $100.1 | 1 250 | 7 500 │
│ 11:00 | 1 250 | $100.0 | 1 250 | 8 750 │
│ 11:15 | 1 250 | $100.2 | 1 250 | 10 000 │
│ │
│ Плюсы: Простой, предсказуемый │
│ Минусы: Игнорирует рыночные условия, легко обнаруживается │
│ │
└─────────────────────────────────────────────────────────────────────────┘

VWAP (Volume-Weighted Average Price)

┌─────────────────────────────────────────────────────────────────────────┐
│ Стратегия исполнения VWAP │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Цель: Исполнять пропорционально ожидаемому объёму │
│ │
│ Количество_t = Общее_кол × (Ожид_объём_t / Общий_объём) │
│ │
│ Пример: Историческое распределение объёма │
│ │
│ Профиль объёма (типичная U-образная форма): │
│ ▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓ │
│ |------|--------|--------|--------|--------|------| │
│ 9:30 10:00 11:00 12:00 13:00 14:00 16:00 │
│ Выс. Низ. Низ. Обед Низ. Низ. Выс. │
│ │
│ Исполнение следует этому профилю: │
│ Время | Объём% | Цель | Цена | Исполнено │
│ ---------|--------|--------|--------|---------- │
│ 09:30 | 15% | 1 500 | $100.0 | 1 500 │
│ 10:00 | 8% | 800 | $100.1 | 800 │
│ 11:00 | 7% | 700 | $100.2 | 700 │
│ ... | ... | ... | ... | ... │
│ │
│ Плюсы: Сливается с рынком, меньшее влияние │
│ Минусы: Требует прогноза объёма, всё ещё предсказуемый │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Implementation Shortfall

┌─────────────────────────────────────────────────────────────────────────┐
│ Стратегия Implementation Shortfall │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Цель: Минимизировать издержки относительно цены решения │
│ │
│ Компромисс: Срочность vs Влияние на рынок │
│ │
│ ┌────────────────────────────────────────────┐ │
│ │ Компромисс риск-влияние │ │
│ │ │ │
│ │ Издержки │ │
│ │ ↑ │ │
│ │ │ ╲ Влияние │ │
│ │ │ ╲ на рынок │ │
│ │ │ ╲ ↗ │ │
│ │ │ ╲ ↗ │ │
│ │ │ ╲ ★ ↗ │ │
│ │ │ ╲ ↗ │ │
│ │ │ Временной╲ ↗ │ │
│ │ │ риск ↗ │ │
│ │ │ ↗ ╲ │ │
│ │ └──────────────────────────→ Время │ │
│ │ Быстро Медленно │ │
│ │ │ │
│ │ ★ = Оптимальная скорость исполнения │ │
│ └────────────────────────────────────────────┘ │
│ │
│ Оптимальная траектория Альмгрена-Крисса: │
│ x(t) = X₀ × sinh(κ(T-t)) / sinh(κT) │
│ │
│ Где κ = √(λσ²/η), λ = неприятие риска │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Архитектура исполнения на базе LLM

Обзор системы

┌─────────────────────────────────────────────────────────────────────────┐
│ Архитектура системы исполнения LLM │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────┐ │
│ │ РОДИТЕЛЬСКИЙ ОРДЕР │ │
│ │ Купить 10 000 BTC за 4 часа │ │
│ └─────────────────┬───────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ДВИЖОК ИСПОЛНЕНИЯ LLM │ │
│ │ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │Наблюдатель │ │ Движок решений │ │ Риск-менеджер │ │ │
│ │ │состояния │→ │ • Выбор │→ │ • Лимиты │ │ │
│ │ │ • Стакан │ │ стратегии │ │ позиции │ │ │
│ │ │ • Сделки │ │ • Тайминг │ │ • Пороги │ │ │
│ │ │ • Новости │ │ • Размер │ │ влияния │ │ │
│ │ │ • Режим рынка │ │ │ │ │ │ │
│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │
│ │ │ │ │ │ │
│ │ └────────────────────┴────────────────────┘ │ │
│ │ │ │ │
│ │ ↓ │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ Слой рассуждений │ │ │
│ │ │ LLM │ │ │
│ │ │ • Слияние контекста │ │ │
│ │ │ • Адаптация стратег.│ │ │
│ │ │ • Объяснение решений│ │ │
│ │ └──────────┬──────────┘ │ │
│ └───────────────────────────────┼───────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ГЕНЕРАЦИЯ ДОЧЕРНИХ ОРДЕРОВ │ │
│ │ │ │
│ │ Время | Действие| Кол-во | Тип цены | Обоснование │ │
│ │ --------|---------|---------|----------|-------------------- │ │
│ │ 00:00 | Купить | 500 BTC | Лимит | "Низкая волат-ть, │ │
│ │ | | | | терпеливое исполн." │ │
│ │ 00:15 | Купить | 800 BTC | Рынок | "Новость-катализ., │ │
│ │ | | | | ускоряем покупку" │ │
│ │ 00:30 | Ждать | - | - | "Спред расширился, │ │
│ │ | | | | ждём ликвидность" │ │
│ │ ... | ... | ... | ... | ... │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Основные компоненты

/// Система исполнения на базе LLM
#[derive(Debug, Clone)]
pub struct LlmExecutionSystem {
/// LLM клиент для принятия решений
pub llm_client: LlmClient,
/// Поток рыночных данных
pub market_data: MarketDataStream,
/// Система управления ордерами
pub oms: OrderManagementSystem,
/// Доступные стратегии исполнения
pub strategies: Vec<ExecutionStrategy>,
/// Управление рисками
pub risk_manager: RiskManager,
/// Трекер производительности
pub tracker: ExecutionTracker,
/// Конфигурация
pub config: ExecutionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionConfig {
/// Максимальный уровень участия (% объёма)
pub max_participation: f64,
/// Максимальный спред для пересечения
pub max_spread_bps: f64,
/// Параметр срочности (0 = терпеливый, 1 = срочный)
pub urgency: f64,
/// Включить адаптацию на базе LLM
pub llm_adaptation_enabled: bool,
/// Частота запросов LLM (секунды)
pub llm_query_interval_secs: u64,
/// Минимальный размер ордера
pub min_order_size: f64,
/// Использовать тёмные пулы при возможности
pub use_dark_pools: bool,
}
impl Default for ExecutionConfig {
fn default() -> Self {
Self {
max_participation: 0.10,
max_spread_bps: 10.0,
urgency: 0.5,
llm_adaptation_enabled: true,
llm_query_interval_secs: 60,
min_order_size: 0.01,
use_dark_pools: true,
}
}
}

Моделирование влияния на рынок

Улучшенное прогнозирование влияния с помощью LLM

┌─────────────────────────────────────────────────────────────────────────┐
│ Пайплайн прогнозирования влияния на рынок │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ШАГ 1: Сбор данных микроструктуры рынка │
│ ───────────────────────────────────────────────────────────────────── │
│ • Глубина стакана на нескольких уровнях │
│ • Недавний поток сделок и направление │
│ • Динамика спреда │
│ • Профиль объёма и паттерны │
│ │
│ ШАГ 2: Вычисление базовой оценки влияния │
│ ───────────────────────────────────────────────────────────────────── │
│ Используя Альмгрена-Крисса или лямбда Кайла: │
│ │
│ impact_base = η × (размер_ордера / ADV)^0.5 × σ │
│ │
│ Где: │
│ - η: коэффициент влияния (калибруется исторически) │
│ - ADV: средний дневной объём │
│ - σ: волатильность │
│ │
│ ШАГ 3: Контекстная корректировка LLM │
│ ───────────────────────────────────────────────────────────────────── │
│ LLM учитывает: │
│ • Есть ли необычный поток ордеров, указывающий на инсайдерскую │
│ торговлю? │
│ • Есть ли ожидающиеся новости, которые могут повлиять на ликвидность? │
│ • Находится ли рынок в режиме высокой/низкой ликвидности? │
│ • Дают ли коррелированные активы сигналы? │
│ │
│ Выход: коэффициент_корректировки ∈ [0.5, 2.0] │
│ │
│ ШАГ 4: Итоговая оценка │
│ ───────────────────────────────────────────────────────────────────── │
│ impact_final = impact_base × коэффициент_корректировки │
│ │
│ Пример: │
│ • Базовая оценка: 15 бп │
│ • Рассуждения LLM: "Завтра отчётность, ожидается низкая ликвидность" │
│ • Корректировка: 1.4x │
│ • Итоговая оценка: 21 бп │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Исполнение криптовалют на Bybit

Особенности исполнения криптовалют на Bybit

┌─────────────────────────────────────────────────────────────────────────┐
│ Особенности исполнения криптовалют (Bybit) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Рынки 24/7 │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ • Нет закрытия рынка — возможно непрерывное исполнение │ │
│ │ • Ликвидность варьируется по часам (сессии США/Европы/Азии) │ │
│ │ • Волатильность на выходных может быть экстремальной │ │
│ │ • LLM должен понимать паттерны времени суток │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ 2. Фрагментированная ликвидность │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ • Ликвидность разделена между спотом, бессрочными и опционами│ │
│ │ • Несколько бирж (Bybit, Binance, OKX и т.д.) │ │
│ │ • Кросс-биржевое исполнение может снизить влияние │ │
│ │ • LLM может направлять ордера на оптимальные площадки │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ 3. Высокая волатильность │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ • Волатильность BTC: 50-100% годовых (vs 15-20% для акций) │ │
│ │ • Внезапные обвалы и памп часты │ │
│ │ • Тайминг исполнения намного критичнее │ │
│ │ • LLM должен быстро определять смену режима │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ 4. Динамика ставки финансирования │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ • Бессрочные фьючерсы имеют 8-часовое финансирование │ │
│ │ • Экстремальное финансирование может влиять на цену │ │
│ │ • Тайминг исполнения вокруг финансирования для выгоды │ │
│ │ • LLM может предвидеть движения от финансирования │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ 5. Каскады ликвидаций │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ • Плечо может вызвать принудительные ликвидации │ │
│ │ • Ликвидации создают временную ликвидность │ │
│ │ • Может быть возможностью или риском в зависимости от стороны│ │
│ │ • LLM мониторит уровни ликвидаций │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Интеграция с Bybit

/// Клиент исполнения Bybit
pub struct BybitExecutionClient {
/// API клиент
api: BybitApi,
/// WebSocket для данных в реальном времени
ws: BybitWebSocket,
/// Менеджер стакана
orderbook: OrderBookManager,
/// Трекер позиций
positions: PositionTracker,
/// Конфигурация исполнения
config: BybitExecutionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BybitExecutionConfig {
/// API учётные данные
pub api_key: String,
pub api_secret: String,
/// Использовать тестнет для бумажной торговли
pub testnet: bool,
/// Тип аккаунта (спот, линейный, инверсный)
pub account_type: AccountType,
/// Плечо по умолчанию
pub default_leverage: u32,
/// Максимальный размер ордера в USD
pub max_order_size_usd: f64,
/// Минимальный интервал между ордерами (миллисекунды)
pub min_order_interval_ms: u64,
}

Крипто-специфичные сигналы для исполнения

┌─────────────────────────────────────────────────────────────────────────┐
│ Крипто-сигналы для исполнения │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Сигнал ставки финансирования │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ ЕСЛИ ставка_финансирования > 0.05% (высоко положительная): │ │
│ │ → Много лонгов платят шортам │ │
│ │ → Потенциал для сквиза лонгов │ │
│ │ → Если ПРОДАЁМ: ускоряем до снимка финансирования │ │
│ │ → Если ПОКУПАЕМ: ждём откат после финансирования │ │
│ │ │ │
│ │ ЕСЛИ ставка_финансирования < -0.03% (отрицательная): │ │
│ │ → Шорты платят лонгам │ │
│ │ → Если ПОКУПАЕМ: ускоряем до финансирования │ │
│ │ → Если ПРОДАЁМ: ждём потенциальный отскок │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ 2. Изменения открытого интереса │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ OI растёт + Цена растёт: │ │
│ │ → Новые лонги входят, продолжение тренда │ │
│ │ → Если ПОКУПАЕМ: исполняем стабильно │ │
│ │ │ │
│ │ OI растёт + Цена падает: │ │
│ │ → Новые шорты входят, продолжение тренда │ │
│ │ → Если ПРОДАЁМ: исполняем стабильно │ │
│ │ │ │
│ │ OI падает + Цена движется: │ │
│ │ → Позиции закрываются, потенциальный разворот │ │
│ │ → Быть осторожным, снизить агрессию │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ 3. Близость к ликвидациям │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Крупный кластер ликвидаций рядом: │ │
│ │ → Если цена движется к кластеру: ждём каскад │ │
│ │ → Каскад даёт временную ликвидность │ │
│ │ → Исполняем агрессивно в поток ликвидаций │ │
│ │ │ │
│ │ Пример: $65 000 BTC с $500М лонгов ликвид. на $64к │ │
│ │ → Если ПРОДАЁМ: ускоряем до $64к, затем нормальный темп │ │
│ │ → Если ПОКУПАЕМ: ждём каскад, покупаем на просадке │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ 4. Поток на биржи │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Крупный приток на биржи: │ │
│ │ → Потенциальное давление на продажу │ │
│ │ → Если ПРОДАЁМ: опережаем агрессивным исполнением │ │
│ │ │ │
│ │ Крупный отток с бирж: │ │
│ │ → Предложение убирается (бычий сигнал) │ │
│ │ → Если ПОКУПАЕМ: ускоряем до сжатия предложения │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Стратегия реализации

Архитектура модулей

78_llm_trade_execution/
├── Cargo.toml
├── README.md
├── README.ru.md
├── readme.simple.md
├── readme.simple.ru.md
├── python/
│ ├── __init__.py
│ ├── execution/
│ │ ├── __init__.py
│ │ ├── llm_executor.py # Основной движок исполнения LLM
│ │ ├── strategies.py # Традиционные + LLM стратегии
│ │ ├── impact_model.py # Оценка влияния на рынок
│ │ └── decision_engine.py # Принятие решений в реальном времени
│ ├── data/
│ │ ├── __init__.py
│ │ ├── bybit_client.py # Интеграция Bybit API
│ │ ├── market_data.py # Обработка рыночных данных
│ │ └── orderbook.py # Управление стаканом
│ ├── evaluation/
│ │ ├── __init__.py
│ │ ├── metrics.py # Метрики исполнения
│ │ └── backtest.py # Бэктестинг исполнения
│ └── notebooks/
│ ├── 01_basic_execution.ipynb
│ ├── 02_llm_adaptation.ipynb
│ └── 03_crypto_execution.ipynb
├── src/
│ ├── lib.rs # Корень библиотеки
│ ├── execution/
│ │ ├── mod.rs # Модуль исполнения
│ │ ├── engine.rs # Основной движок
│ │ ├── strategies.rs # Стратегии исполнения
│ │ ├── llm_adapter.rs # Интеграция LLM
│ │ └── state_machine.rs # Состояние исполнения
│ ├── impact/
│ │ ├── mod.rs # Модуль влияния
│ │ ├── models.rs # Модели влияния
│ │ ├── estimator.rs # Оценка в реальном времени
│ │ └── calibration.rs # Калибровка модели
│ ├── data/
│ │ ├── mod.rs # Модуль данных
│ │ ├── bybit.rs # Клиент Bybit
│ │ ├── orderbook.rs # Стакан
│ │ └── types.rs # Типы данных
│ ├── strategy/
│ │ ├── mod.rs # Модуль стратегий
│ │ ├── twap.rs # Стратегия TWAP
│ │ ├── vwap.rs # Стратегия VWAP
│ │ ├── is.rs # Implementation shortfall
│ │ └── adaptive.rs # Адаптивная LLM стратегия
│ └── utils/
│ ├── mod.rs # Утилиты
│ └── config.rs # Конфигурация
├── examples/
│ ├── basic_execution.rs # Базовое исполнение
│ ├── llm_execution.rs # Исполнение с LLM
│ ├── bybit_execution.rs # Интеграция Bybit
│ └── backtest_execution.rs # Бэктест исполнения
├── experiments/
│ └── test_impact_model.rs # Тестирование модели влияния
└── tests/
└── integration.rs # Интеграционные тесты

Управление рисками

Специфичные риски исполнения

┌────────────────────────────────────────────────────────────────────────┐
│ Управление рисками исполнения │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Риск задержки LLM │
│ ├── Запросы LLM занимают 1-5 секунд │
│ ├── Рынок может значительно сдвинуться за это время │
│ └── Смягчение: │
│ → Асинхронные запросы LLM (не блокируем исполнение) │
│ → Использовать кэшированные решения при медленном LLM │
│ → Откат к традиционному алгоритму при недоступности LLM │
│ │
│ 2. Риск галлюцинаций LLM │
│ ├── LLM может рекомендовать невозможные действия │
│ ├── Может ошибиться в расчёте количеств или цен │
│ └── Смягчение: │
│ → Строгая валидация всех выходов LLM │
│ → Проверка разумности количеств и цен │
│ → Никогда не доверять LLM слепо — всегда верифицировать │
│ │
│ 3. Риск избыточной торговли │
│ ├── LLM может быть слишком агрессивным │
│ ├── Может вызвать чрезмерное влияние на рынок │
│ └── Смягчение: │
│ → Жёсткие лимиты на уровень участия │
│ → Ограничения максимального размера ордера │
│ → Минимальное время между ордерами │
│ │
│ 4. Модельный риск │
│ ├── Модели влияния могут быть неправильно откалиброваны │
│ ├── Смена режима рынка инвалидирует предположения │
│ └── Смягчение: │
│ → Непрерывная рекалибровка модели │
│ → Консервативные оценки влияния │
│ → Мониторинг предсказанного vs фактического влияния │
│ │
│ 5. Технический риск (крипто) │
│ ├── Сбои API биржи │
│ ├── Сетевая задержка │
│ ├── Загруженность блокчейна │
│ └── Смягчение: │
│ → Логика повторов с экспоненциальным откатом │
│ → Множественные подключения к биржам │
│ → Локальное отслеживание ордеров независимо от API │
│ │
└────────────────────────────────────────────────────────────────────────┘

Лимиты безопасности

/// Лимиты безопасности исполнения
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SafetyLimits {
/// Максимальный уровень участия (доля объёма)
pub max_participation: f64,
/// Максимальный размер одного ордера (в валюте котировки)
pub max_order_size: f64,
/// Минимальное время между ордерами (секунды)
pub min_order_interval_secs: f64,
/// Максимальный спред для пересечения (бп)
pub max_spread_bps: f64,
/// Максимальное отклонение от базовой цены (бп)
pub max_price_deviation_bps: f64,
/// Максимальный IS до предупреждения (бп)
pub max_is_threshold_bps: f64,
/// Остановка исполнения при волатильности выше (%)
pub max_volatility_threshold: f64,
/// Таймаут запроса LLM (секунды)
pub llm_timeout_secs: u64,
/// Максимум ордеров в минуту
pub max_orders_per_minute: u32,
}
impl Default for SafetyLimits {
fn default() -> Self {
Self {
max_participation: 0.10, // 10% объёма
max_order_size: 100_000.0, // $100К на ордер
min_order_interval_secs: 5.0, // 5 секунд
max_spread_bps: 20.0, // 20 бп
max_price_deviation_bps: 100.0, // 1%
max_is_threshold_bps: 50.0, // 50 бп
max_volatility_threshold: 5.0, // 5% в час
llm_timeout_secs: 10, // 10 секунд
max_orders_per_minute: 20, // 20 ордеров
}
}
}

Метрики производительности

Метрики качества исполнения

МетрикаОписаниеЦель
Implementation ShortfallИздержки vs цена решения< 10 бп
Проскальзывание VWAPVWAP исполнения vs рыночный VWAP< 5 бп
Проскальзывание от цены приходаИсполнение vs цена прихода< 15 бп
Уровень участия% рыночного объёма5-15%
Процент исполнения% исполненного ордера> 95%
Время завершенияВремя до завершенияВ рамках дедлайна
Захваченный спредДля лимитных ордеров> 30% спреда
Добавочная ценность LLMУлучшение над базовым алго> 3 бп

Метрики исполнения LLM

МетрикаОписаниеЦель
Задержка решенияВремя от запроса до решения< 5 секунд
Качество решенийПроцент правильных действий> 80%
Частота адаптацииИзменений стратегии за исполнение2-5
Качество рассужденийСвязные объяснения> 90%
Частота откатаРаз откат к базовому< 10%
Экономия издержекУлучшение IS vs TWAP> 20%

Литература

  1. LLM-Based Agents for Algorithmic Trading: A Survey

  2. Optimal Execution of Portfolio Transactions

    • Almgren, R., & Chriss, N. (2001)
    • Journal of Risk
  3. Optimal Trading Strategy and Supply/Demand Dynamics

    • Obizhaeva, A., & Wang, J. (2013)
    • Journal of Financial Markets
  4. The Market Microstructure of Cryptocurrency Markets

    • Makarov, I., & Schoar, A. (2020)
    • Journal of Financial Economics
  5. Machine Learning for Market Microstructure and High Frequency Trading

    • Sirignano, J., & Cont, R. (2019)
    • SSRN Working Paper
  6. Deep Reinforcement Learning for Optimal Execution

    • Ning, B., Lin, F., & Jaimungal, S. (2021)
    • Machine Learning for Asset Management
  7. Language Models for Trading: A Survey

  8. Execution Quality with Algorithmic Trading

    • Hendershott, T., Jones, C., & Menkveld, A. (2011)
    • Journal of Finance

Следующие шаги


Глава 78 книги “Машинное обучение для трейдинга”