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

Глава 151: GAN с физическими ограничениями для трейдинга

Обзор

Генеративные состязательные сети (GAN) произвели революцию в генерации синтетических данных, однако стандартные GAN, применённые к финансовым временным рядам, часто порождают нереалистичные образцы, нарушающие фундаментальные свойства рынка. GAN с физическими ограничениями решают эту проблему, встраивая финансовые “законы” — аналог законов сохранения в физике — непосредственно в целевую функцию обучения. Результатом является генератор, создающий синтетические ценовые траектории, удовлетворяющие условиям безарбитражности, кластеризации волатильности, тяжёлых хвостов распределения и эффекта рычага.

Эта глава охватывает теорию, архитектуру и практическую реализацию GAN с физическими ограничениями как для фондовых, так и для криптовалютных рынков, с особым акцентом на генерацию реалистичных траекторий BTC/ETH с использованием данных Bybit.

Ключевые концепции

Основы GAN: Генератор против Дискриминатора

GAN состоит из двух нейронных сетей, обучающихся в состязательной игре:

Генератор G: z ~ N(0, I) --> G(z) = синтетические данные
Дискриминатор D: x --> D(x) = P(x реальные)
min_G max_D V(D, G) = E[log D(x_real)] + E[log(1 - D(G(z)))]
  • Генератор (G): Принимает случайный шум z и преобразует его в синтетические финансовые временные ряды
  • Дискриминатор (D): Пытается отличить реальные рыночные данные от синтетических
  • Равновесие: При сходимости G порождает данные, неотличимые от реальных

Почему стандартные GAN не работают для финансовых данных

Стандартные GAN могут генерировать визуально правдоподобные временные ряды, но часто нарушают важные статистические свойства:

  1. Нарушение безарбитражности: Сгенерированные пути могут содержать систематически эксплуатируемые паттерны
  2. Отсутствие кластеризации волатильности: Поведение типа GARCH не сохраняется
  3. Тонкие хвосты: Генератор стремится к гауссовским распределениям
  4. Отсутствие эффекта рычага: Отрицательная корреляция между доходностями и волатильностью отсутствует
  5. Неверная автокорреляционная структура: Доходности могут иметь серийную корреляцию

Физические ограничения как регуляризация

Ключевая идея — рассматривать стилизованные факты финансов как “физические законы”, ограничивающие генератор:

Физические ограничения в финансах:
├── Условие безарбитражности
│ ├── Свойство мартингала для дисконтированных цен
│ ├── E[S_{t+1} | F_t] = S_t * (1 + r_f)
│ └── Нет систематического дрейфа сверх безрисковой ставки
├── Кластеризация волатильности
│ ├── Автокорреляция |r_t| медленно убывает
│ ├── Условная дисперсия типа GARCH(1,1)
│ └── Параметр персистентности α + β ≈ 0.95-0.99
├── Тяжёлые хвосты (лептокуртозис)
│ ├── Избыточный эксцесс > 0 (обычно 3-50)
│ ├── Степенное поведение хвостов
│ └── P(|r| > x) ~ x^(-α), α ∈ [2, 5]
├── Эффект рычага
│ ├── Corr(r_t, σ²_{t+1}) < 0
│ ├── Отрицательные доходности увеличивают будущую волатильность
│ └── Асимметричное GARCH / EGARCH поведение
└── Согласование моментов
├── Среднее, дисперсия, асимметрия, эксцесс
├── Автокорреляционная функция доходностей
└── Автокорреляционная функция квадратов доходностей

Математическая формулировка

Общая функция потерь

Функция потерь GAN с физическими ограничениями объединяет состязательные и физические компоненты:

L_total = L_adversarial + λ_martingale * L_martingale
+ λ_volatility * L_volatility
+ λ_kurtosis * L_kurtosis
+ λ_leverage * L_leverage
+ λ_autocorr * L_autocorr

WGAN-GP (Wasserstein GAN с градиентным штрафом)

Для стабильного обучения используем WGAN-GP вместо обычного GAN:

L_critic = E[D(G(z))] - E[D(x_real)] + λ_gp * E[(||∇D(x_hat)||_2 - 1)²]
L_generator = -E[D(G(z))] + λ * L_physics

где x_hat = ε * x_real + (1 - ε) * G(z) — интерполированный образец для градиентного штрафа.

Ограничение мартингала

Для дисконтированных цен как мартингала:

L_martingale = || E[r_{t+1} | F_t] ||² ≈ (1/T) Σ_t (mean(r_t))²

Ограничение кластеризации волатильности

Кластеризация волатильности означает, что |r_t| и |r_{t+k}| положительно коррелированы для малых k:

L_volatility = Σ_{k=1}^{K} (ρ_gen(|r|, k) - ρ_real(|r|, k))²

Ограничение тяжёлых хвостов

Реальные финансовые доходности имеют избыточный эксцесс значительно больше нуля:

L_kurtosis = (κ_gen - κ_real)²

Ограничение эффекта рычага

Эффект рычага: отрицательные доходности предсказывают более высокую будущую волатильность:

L_leverage = (Corr(r_t, |r_{t+1}|)_gen - Corr(r_t, |r_{t+1}|)_real)²

Архитектура

Архитектура генератора

Генератор (временные свёрточные слои):
┌─────────────────────────────────────────────┐
│ Вход: z ~ N(0, I) ∈ R^{latent_dim} │
│ Опционально: c (условие: режим, уровень вол)│
├─────────────────────────────────────────────┤
│ Linear(latent_dim + cond_dim, 256 * T//16) │
│ Reshape в (256, T//16) │
├─────────────────────────────────────────────┤
│ ConvTranspose1d(256, 128, 4, stride=2) │
│ BatchNorm1d + LeakyReLU │
├─────────────────────────────────────────────┤
│ ConvTranspose1d(128, 64, 4, stride=2) │
│ BatchNorm1d + LeakyReLU │
├─────────────────────────────────────────────┤
│ ConvTranspose1d(64, 32, 4, stride=2) │
│ BatchNorm1d + LeakyReLU │
├─────────────────────────────────────────────┤
│ ConvTranspose1d(32, 1, 4, stride=2) │
│ Tanh (ограниченные доходности) │
├─────────────────────────────────────────────┤
│ Выход: доходности ∈ R^{T} │
│ Цены = кумулятивное произведение(1 + returns)│
└─────────────────────────────────────────────┘

Архитектура критика (дискриминатора)

Критик (1D CNN):
┌─────────────────────────────────────────────┐
│ Вход: доходности ∈ R^{T} │
├─────────────────────────────────────────────┤
│ Conv1d(1, 32, 4, stride=2) │
│ LayerNorm + LeakyReLU │
├─────────────────────────────────────────────┤
│ Conv1d(32, 64, 4, stride=2) │
│ LayerNorm + LeakyReLU │
├─────────────────────────────────────────────┤
│ Conv1d(64, 128, 4, stride=2) │
│ LayerNorm + LeakyReLU │
├─────────────────────────────────────────────┤
│ Conv1d(128, 256, 4, stride=2) │
│ LayerNorm + LeakyReLU │
├─────────────────────────────────────────────┤
│ Flatten + Linear(256 * T//16, 1) │
│ Без сигмоиды (расстояние Вассерштейна) │
└─────────────────────────────────────────────┘

Условная генерация

Генератор может быть обусловлен рыночным режимом или уровнем волатильности:

# Кодирование условий
conditions = {
'regime': ['bull', 'bear', 'sideways', 'crisis'],
'volatility': ['low', 'medium', 'high', 'extreme'],
}
# Кодируется как one-hot или обучаемый эмбеддинг
c = embed(regime_label, vol_label)
z_conditioned = torch.cat([z, c], dim=-1)
synthetic_returns = G(z_conditioned)

Это позволяет:

  • Генерация сценариев: “Сгенерировать 1000 траекторий при медвежьем рынке с высокой волатильностью”
  • Стресс-тестирование: “Как выглядит экстремальная волатильность с эффектом рычага?”
  • Дополнение данных по режимам: “Нужно больше кризисных сценариев для обучения модели рисков”

Сравнение с альтернативами

СвойствоСтандартный GANTimeGANGAN с физ. ограничениями
Состязательное обучениеДаДаДа
Временная динамикаНетДа (авторегрессия)Да (1D Conv)
Стилизованные фактыНе обеспеченыЧастичноЯвно обеспечены
Тяжёлые хвостыЧасто отсутствуютИногдаГарантированы через loss
БезарбитражностьНарушаетсяНе обеспеченаОбеспечена
Кластеризация волатильностиСлучайнаяЧастичноЯвно согласована
Эффект рычагаОтсутствуетИногдаОбеспечен
Стабильность обученияХрупкаяСредняяСтабильная (WGAN-GP)

Применения

1. Дополнение синтетических данных

Когда исторических данных мало (например, только несколько лет крипто), синтетические данные с физическими ограничениями могут:

  • Расширить обучающую выборку для ML-моделей
  • Сохранить статистические свойства, которые случайная аугментация разрушает
  • Генерировать редкие события (крахи, шорт-сквизы) обусловленные кризисным режимом

2. Генерация сценариев и стресс-тестирование

# Сгенерировать 10,000 кризисных сценариев для BTC
crisis_paths = generator.generate(
n_paths=10000,
condition={'regime': 'crisis', 'volatility': 'extreme'}
)
var_99 = np.percentile(crisis_paths[:, -1], 1) # 1% VaR при кризисе

3. Обмен данными с сохранением конфиденциальности

Финансовые институты могут делиться синтетическими данными, сохраняющими статистические свойства, не раскрывая реальную торговую активность.

4. Тестирование устойчивости стратегий

Тестирование торговых стратегий на тысячах реалистичных синтетических сценариев вместо ограниченных исторических бэктестов.

Торговая стратегия

Основная стратегия: Режимный трейдинг с GAN-дополнением

  1. Обучить GAN с физическими ограничениями на исторических данных BTC/ETH с Bybit
  2. Сгенерировать синтетические сценарии обусловленные текущим обнаруженным режимом
  3. Монте-Карло прогнозирование доходности стратегии на синтетических траекториях
  4. Размер позиции на основе ожидаемого распределения результатов

Генерация сигналов

def generate_trading_signal(generator, current_features, n_simulations=1000):
"""
Генерация прогнозных сигналов через Монте-Карло симуляцию
синтетических траекторий с физическими ограничениями.
"""
# Определить текущий режим
regime = detect_regime(current_features)
vol_level = estimate_volatility_level(current_features)
# Генерация условных синтетических прогнозных траекторий
synthetic_paths = generator.generate(
n_paths=n_simulations,
condition={'regime': regime, 'volatility': vol_level},
horizon=20
)
# Вычислить ожидаемую доходность и риск
final_returns = synthetic_paths[:, -1]
expected_return = final_returns.mean()
expected_risk = final_returns.std()
sharpe = expected_return / (expected_risk + 1e-8)
if sharpe > 0.5:
return 'LONG', min(sharpe / 2, 1.0)
elif sharpe < -0.5:
return 'SHORT', min(abs(sharpe) / 2, 1.0)
else:
return 'NEUTRAL', 0.0

Параметры обучения

ПараметрЗначениеОписание
Латентная размерность128Размер вектора шума
Длина последовательности256Количество временных шагов
Итерации критика5Обновлений D на одно обновление G
Скорость обучения (G)1e-4Learning rate генератора
Скорость обучения (D)1e-4Learning rate дискриминатора
Градиентный штраф (λ_gp)10.0Вес штрафа WGAN-GP
Вес мартингала (λ_m)1.0Ограничение мартингала
Вес волатильности (λ_v)0.5Ограничение кластеризации
Вес эксцесса (λ_k)0.3Ограничение тяжёлых хвостов
Вес рычага (λ_l)0.2Ограничение эффекта рычага
Вес автокорреляции (λ_a)0.3Ограничение структуры ACF
Размер батча64Размер обучающего батча

Реализация

Python

  • model.py: Генератор, Критик и модуль PhysicsLoss
  • data_loader.py: Загрузка данных с Bybit/Yahoo с предобработкой
  • train.py: Цикл обучения WGAN-GP с физическими ограничениями
  • visualize.py: Графики сравнения реальных и синтетических данных
  • backtest.py: Бэктест торговой стратегии на сгенерированных сценариях

Rust

  • src/lib.rs: Структуры данных, вычисление физических ограничений, статистические утилиты
  • src/bin/fetch_data.rs: Клиент Bybit API для получения OHLCV данных
  • src/bin/train.rs: Упрощённый цикл обучения
  • src/bin/generate.rs: Генерация и анализ синтетических траекторий
  • examples/: Рабочие примеры с демо-данными

Применение к криптовалютам: Bybit BTC/ETH

Почему криптовалютам нужны GAN с физическими ограничениями

Криптовалютные рынки демонстрируют ещё более выраженные стилизованные факты:

  • Высокий эксцесс: Дневные доходности BTC имеют избыточный эксцесс 10-30
  • Сильная кластеризация волатильности: Крипто-волатильность сохраняется неделями/месяцами
  • Торговля 24/7: Нет ночных разрывов, непрерывные ценовые пути
  • Смена режимов: Быстрые переходы между бычьими ралли и крахами
  • Эффект рычага: Усилен в маржинальной крипто-торговле

Ссылки

  1. Goodfellow, I., et al. (2014). “Generative Adversarial Nets.” NeurIPS.
  2. Arjovsky, M., et al. (2017). “Wasserstein Generative Adversarial Networks.” ICML.
  3. Gulrajani, I., et al. (2017). “Improved Training of Wasserstein GANs.” NeurIPS.
  4. Yoon, J., et al. (2019). “Time-series Generative Adversarial Networks.” NeurIPS.
  5. Cont, R. (2001). “Empirical properties of asset returns: stylized facts and statistical issues.”
  6. Wiese, M., et al. (2020). “Quant GANs: Deep generation of financial time series.”
  7. Raissi, M., et al. (2019). “Physics-informed neural networks.”
  8. Karniadakis, G.E., et al. (2021). “Physics-informed machine learning.”

Итоги

GAN с физическими ограничениями представляют принципиальный подход к генерации синтетических финансовых данных. Встраивая финансовые стилизованные факты как дифференцируемые ограничения в целевую функцию обучения GAN, мы гарантируем, что сгенерированные данные уважают статистические свойства реальных рынков. Ключевые преимущества:

  • Реалистичные синтетические данные, сохраняющие тяжёлые хвосты, кластеризацию волатильности и безарбитражность
  • Условная генерация для целевого анализа сценариев и стресс-тестирования
  • Стабильное обучение через WGAN-GP с интерпретируемой декомпозицией физических потерь
  • Практические применения в дополнении данных, тестировании стратегий и обмене данными с сохранением конфиденциальности