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

Cross-Modal Contrastive Learning для трейдинга

Эта глава реализует Cross-Modal Contrastive Learning (кросс-модальное контрастивное обучение) для финансовых временных рядов и связанных с ними текстовых данных (новости, отчёты, твиты). Подход переносит фундаментальные принципы архитектуры CLIP (Contrastive Language-Image Pretraining) от OpenAI в сферу алгоритмического трейдинга: Contrastive Language-Timeseries Pretraining.

Поддерживает как данные фондового рынка (AAPL, S&P 500), так и криптовалютные данные (Bybit: BTCUSDT, ETHUSDT).

Основная концепция

Движение цены не происходит в вакууме. Внезапное падение графика на 5% ($x_{price}$) часто напрямую связано с событием в реальном мире, описанным текстом ($x_{text}$), например: “Компания не оправдала ожидания по выручке” или “Флеш-крэш BTCUSDT на Bybit из-за ликвидации крупного игрока”.

Кросс-модальное обучение выравнивает эти два совершенно разных источника информации (модальности) в едином общем скрытом пространстве (Shared Latent Space).

  • Позитивная пара: Окно графика цены и новостной заголовок, который вышел в этот же самый момент времени.
  • Негативные пары: Тот же график цены, но сопоставленный со случайными новостями за другие дни или для других активов.

Обучая сеть максимизировать косинусное сходство между истинными парами (Цена, Текст) и минимизировать его для всех ложных комбинаций в батче, модель выучивает богатое семантическое представление рынка.

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

Для батча из $N$ пар, матрица сходства $S$:

$$S_{i,j} = \frac{v_{price}^{(i)} \cdot v_{text}^{(j)}}{||v_{price}^{(i)}|| \cdot ||v_{text}^{(j)}||}$$

Симметричный CLIP лосс:

$$\mathcal{L}{CLIP} = \frac{1}{2} \left[ \frac{1}{N}\sum{i} \mathcal{L}{P \rightarrow T}^{(i)} + \frac{1}{N}\sum{j} \mathcal{L}_{T \rightarrow P}^{(j)} \right]$$

где каждый член — это кросс-энтропия с температурным масштабированием по строкам/столбцам матрицы сходства.

Преимущества для трейдинга

  • Zero-Shot поиск паттернов: Вы можете ввести текстовый запрос (например, “внезапный обвал на Bybit”) и найти все похожие исторические графики в базе данных, даже если вы никогда не обучали классификатор конкретно на этот паттерн.
  • Семантическое понимание графиков: Энкодер временных рядов начинает понимать, что означают паттерны в реальном мире, а не просто запоминает их геометрическую форму.
  • Сигнал расхождения (Divergence Trading): Проецируя текущий график и текущую новость в одно пространство, вы можете измерить их “расхождение”. Если цена падает, но эмбеддинг новостей кричит “жёсткий бычий пробой”, это может быть сигналом манипуляции или скорого разворота.
  • Кросс-рыночный перенос: Общее скрытое пространство позволяет сравнивать паттерны между акциями (AAPL) и криптовалютами (BTCUSDT), находя структурное сходство на разных рынках.

Структура проекта

164_cross_modal_contrastive/
├── README.md # Основное описание (English)
├── README.ru.md # Этот файл (Русский)
├── readme.simple.md # Упрощённое объяснение (English)
├── readme.simple.ru.md # Упрощённое объяснение (Русский)
├── python/
│ ├── model.py # TimeSeriesEncoder, TextEncoder, CLIPLoss, SymmetricCLIPLoss
│ ├── data.py # Генерация данных: синтетика, крипто Bybit, фондовый рынок
│ ├── train.py # Скрипт обучения (тест на переобучение + режим рыночных данных)
│ ├── evaluate.py # Оценка zero-shot поиска
│ └── requirements.txt # Python зависимости
├── rust/
│ ├── Cargo.toml # Rust зависимости
│ └── src/
│ └── lib.rs # Высокопроизводительный поиск по эмбеддингам
└── docs/
└── ru/
└── theory.md # Теоретический разбор

Быстрый старт

Python

Окно терминала
cd python
pip install -r requirements.txt
# Режим 1: Тест на переобучение (проверка архитектуры)
python train.py --mode overfit
python evaluate.py --mode overfit
# Режим 2: Обучение на крипто (Bybit) + фондовых данных
python train.py --mode market
python evaluate.py --mode market

Rust

Окно терминала
cd rust
cargo test

Источники данных

Криптовалюты Bybit (симуляция)

  • BTCUSDT: Бессрочные фьючерсы на Bitcoin с событиями: памп, крэш, шорт-сквиз, ралли, дамп
  • ETHUSDT: Бессрочные фьючерсы на Ethereum с аналогичной таксономией событий

Фондовый рынок (симуляция)

  • AAPL: Apple Inc. с событиями: превышение ожиданий по прибыли, повышение ставки ФРС, секторальное ралли, скандал с CEO

Все данные генерируются синтетически внутри этой главы для обеспечения воспроизводимости и автономности.

Архитектура

TimeSeriesEncoder (1D-CNN)

  • 3 свёрточных блока с BatchNorm + ReLU
  • Адаптивный средний пулинг → проекционная голова
  • Вход: (B, 1, 128) → Выход: (B, 32)

TextEncoder (Embedding + Mean Pooling)

  • Обучаемые эмбеддинги токенов с маской паддинга
  • LayerNorm → проекционная голова
  • Вход: (B, 8) → Выход: (B, 32)

Функции потерь

  1. CLIPLoss: CosineEmbeddingLoss с явными позитивными/негативными парами
  2. SymmetricCLIPLoss: Полный NxN InfoNCE с обучаемой температурой (рекомендуется)

Ссылки

  • Radford, A., et al. “Learning Transferable Visual Models From Natural Language Supervision” (CLIP, OpenAI, 2021). arXiv:2103.00020
  • Oord, A. van den, et al. “Representation Learning with Contrastive Predictive Coding” (CPC, 2018). arXiv:1807.03748