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

Глава 75: Открытие факторов с помощью LLM для трейдинга

Обзор

Открытие факторов с помощью LLM представляет собой смену парадигмы в количественных торговых исследованиях. Традиционный майнинг альфа-факторов опирается на ручное проектирование формул, экспертизу в предметной области и исчерпывающие алгоритмы поиска. Большие языковые модели (LLM) теперь могут автоматизировать и ускорить этот процесс, генерируя, оценивая и уточняя торговые факторы через понимание естественного языка и возможности генерации кода.

В этой главе рассматривается использование LLM, таких как GPT-4, Claude и специализированных финансовых моделей (FinGPT), для открытия новых альфа-факторов как для традиционных фондовых рынков, так и для криптовалютного трейдинга на платформах типа Bybit.

Содержание

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

Введение

Что такое открытие альфа-факторов?

Альфа-факторы — это количественные сигналы, которые прогнозируют будущую доходность активов за вычетом рыночного риска. Они являются строительными блоками систематических торговых стратегий:

┌─────────────────────────────────────────────────────────────────────────┐
│ Эволюция открытия альфа-факторов │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Традиционный подход: Подход с LLM: │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Эксперт предметной│ │ Исследовательский│ │
│ │ области │ │ ввод на естеств. │ │
│ │ ↓ │ │ языке │ │
│ │ Ручное │ │ ↓ │ │
│ │ проектирование │ │ Генерация LLM │ │
│ │ формул │ │ ↓ │ │
│ │ ↓ │ │ Автоматическая │ │
│ │ Бэктест │ │ валидация │ │
│ │ ↓ │ │ ↓ │ │
│ │ Итерация │ │ Итеративное │ │
│ │ (недели/месяцы) │ │ уточнение │ │
│ └──────────────────┘ │ (часы/дни) │ │
│ └──────────────────┘ │
│ │
│ Примеры альфа-факторов: │
│ • Моментум: rank(returns(20d)) │
│ • Возврат к среднему: -zscore(close, 10) │
│ • Профиль объёма: ts_rank(volume, 20) * sign(returns(5d)) │
│ • Тональность: sentiment_score * news_volume │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Почему LLM для открытия факторов?

АспектТрадиционные методыОткрытие на основе LLM
Генерация идейРучной мозговой штурмАвтоматическая генерация
Знание предметной областиОбязательноМожет использовать обучающие данные
Синтаксис формулНужно изучатьЕстественный язык → код
Скорость итерацийДни/неделиМинуты/часы
Пространство поискаОграничено человекомЭкспоненциально больше
ПредвзятостьСильная исследовательскаяМожет быть разнообразнее
ИнтерпретируемостьВарьируетсяМожет объяснить рассуждения

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

Структура факторной модели

Современное факторное инвестирование основано на предположении, что доходность может быть разложена:

$$R_i = \alpha_i + \sum_{k=1}^{K} \beta_{ik} F_k + \epsilon_i$$

Где:

  • $R_i$ — доходность актива $i$
  • $\alpha_i$ — альфа, специфичная для актива (то, что мы хотим найти!)
  • $\beta_{ik}$ — экспозиция к фактору $k$
  • $F_k$ — доходность фактора $k$
  • $\epsilon_i$ — идиосинкратическая ошибка

LLM как генератор факторов

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

$$f_{LLM}: \text{Исследовательская идея} \rightarrow \text{Выражение фактора}$$

Ключевое понимание состоит в том, что LLM изучили паттерны из огромных объёмов финансовой литературы, исследовательских статей и репозиториев кода. Они могут:

  1. Синтезировать знания из нескольких областей
  2. Генерировать новые комбинации существующих факторов
  3. Переводить интуицию в математические выражения
  4. Быстро итерировать на основе обратной связи

Информационное содержание факторов

Хороший альфа-фактор должен иметь:

┌─────────────────────────────────────────────────────────────────────────┐
│ Критерии качества факторов │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Предсказательная сила (IC: Информационный коэффициент) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Корреляция между значениями фактора и будущей │ │
│ │ доходностью │ │
│ │ IC = corr(фактор_t, доходность_{t+1}) │ │
│ │ Цель: |IC| > 0.02 (2% корреляция значима) │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 2. Стабильность (IC_IR: Информационное отношение) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Постоянство предсказательной силы во времени │ │
│ │ IC_IR = mean(IC) / std(IC) │ │
│ │ Цель: IC_IR > 0.3 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 3. Уникальность (низкая корреляция с существующими) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Фактор должен захватывать НОВУЮ информацию │ │
│ │ corr(новый_фактор, существующие_факторы) < 0.7 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 4. Оборот (торговая реализуемость) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Как часто нужно менять позиции │ │
│ │ Меньший оборот = меньшие торговые издержки │ │
│ │ Цель: Оборот < 50% за период │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Основы альфа-факторов

Язык выражения факторов

Факторы обычно выражаются как математические формулы, оперирующие ценовыми и объёмными данными:

Базовые операции:
├── returns(d) - d-дневная доходность: close / close.shift(d) - 1
├── rank(x) - Кросс-секционный ранг (от 0 до 1)
├── zscore(x, d) - Скользящий z-score: (x - mean(x,d)) / std(x,d)
├── ts_rank(x, d) - Ранг временного ряда за d периодов
├── ts_sum(x, d) - Скользящая сумма за d периодов
├── ts_mean(x, d) - Скользящее среднее за d периодов
├── ts_std(x, d) - Скользящее стандартное отклонение
├── ts_max(x, d) - Скользящий максимум
├── ts_min(x, d) - Скользящий минимум
├── delay(x, d) - Запаздывающее значение
├── delta(x, d) - Изменение: x - delay(x, d)
├── correlation(x, y, d) - Скользящая корреляция
└── covariance(x, y, d) - Скользящая ковариация
Переменные рыночных данных:
├── open - Цена открытия
├── high - Максимальная цена
├── low - Минимальная цена
├── close - Цена закрытия
├── volume - Торговый объём
├── vwap - Средневзвешенная по объёму цена
└── amount - Торговый оборот (цена * объём)

Примеры факторов

┌─────────────────────────────────────────────────────────────────────────┐
│ Классические примеры альфа-факторов │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Ценовой моментум (12-месячный, пропуск последнего месяца) │
│ формула: rank(returns(252) - returns(21)) │
│ логика: Активы с позитивным моментумом склонны продолжать │
│ │
│ 2. Краткосрочный разворот │
│ формула: -rank(returns(5)) │
│ логика: Краткосрочные проигравшие склонны отскакивать │
│ │
│ 3. Дивергенция объём-цена │
│ формула: -correlation(close, volume, 10) │
│ логика: Рост цены на низком объёме = слабость │
│ │
│ 4. Моментум, скорректированный на волатильность │
│ формула: returns(20) / ts_std(returns(1), 20) │
│ логика: Моментум, нормализованный на риск │
│ │
│ 5. Поток умных денег │
│ формула: ts_sum(volume * sign(close - open), 10) / ts_sum(volume,10)│
│ логика: Отслеживание, идёт ли объём в направлении цены │
│ │
│ 6. Разворот ликвидности │
│ формула: -correlation(returns(1), volume, 20) * ts_rank(volume, 20) │
│ логика: Развороты на высоком объёме более значимы │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Открытие факторов на основе LLM

Парадигма Alpha-GPT

Alpha-GPT представил революционный подход к майнингу факторов через взаимодействие Человек-ИИ:

┌─────────────────────────────────────────────────────────────────────────┐
│ Архитектура системы Alpha-GPT │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────┐ │
│ │ ВВОД ПОЛЬЗОВАТЕЛЯ │ │
│ │ "Я хочу моментум-фактор, который │ │
│ │ учитывает подтверждение объёмом" │ │
│ └─────────────────┬───────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ КОМПИЛЯЦИЯ ЗНАНИЙ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ Внешняя память │ │ Похожие примеры │ │ Правила домена │ │ │
│ │ │(Библиотека │ │ (Few-shot) │ │ (Ограничения) │ │ │
│ │ │ факторов) │ └────────┬────────┘ └────────┬────────┘ │ │
│ │ └────────┬────────┘ │ │ │ │
│ │ └──────────────────┬─┴─────────────────────┘ │ │
│ │ │ │ │
│ │ ↓ │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ СИСТЕМНЫЙ ПРОМПТ │ │ │
│ │ │ + Запрос │ │ │
│ │ └──────────┬──────────┘ │ │
│ └───────────────────────────────┼───────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ДВИЖОК LLM │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ Сгенерированное выражение фактора: │ │ │
│ │ │ rank(ts_sum(volume * sign(returns(1)), 5)) * │ │ │
│ │ │ rank(returns(10)) │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────┼───────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ПОИСК АЛЬФЫ │ │
│ │ • Валидация синтаксиса │ │
│ │ • Выполнение бэктеста │ │
│ │ • Расчёт IC/IR │ │
│ │ • Анализ оборота │ │
│ └───────────────────────────────┼───────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ РЕЗУЛЬТАТЫ И ИНТЕРПРЕТАЦИЯ │ │
│ │ • IC: 0.035, IC_IR: 0.42 │ │
│ │ • Годовая доходность: 12.3%, Sharpe: 1.8 │ │
│ │ • "Этот фактор комбинирует моментум, подтверждённый объёмом..." │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Alpha-GPT 2.0: Мультиагентная архитектура

Эволюция до Alpha-GPT 2.0 ввела мультиагентную систему:

┌─────────────────────────────────────────────────────────────────────────┐
│ Мультиагентный конвейер Alpha-GPT 2.0 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ СЛОЙ 1: АГЕНТ МАЙНИНГА АЛЬФЫ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Инструменты: Генератор факторов, Валидатор выражений │ │
│ │ Задача: Генерировать кандидатов альфа-выражений из идей │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ СЛОЙ 2: АГЕНТ МОДЕЛИРОВАНИЯ АЛЬФЫ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Инструменты: Обучение ML-моделей, Комбинатор признаков │ │
│ │ Задача: Объединять факторы в предсказательные модели │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ СЛОЙ 3: АГЕНТ АНАЛИЗА АЛЬФЫ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Инструменты: Бэктестер, Анализатор рисков, Репортер │ │
│ │ Задача: Оценивать и отчитываться о производительности │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Человек в цикле: Пользователь может вмешаться на любом слое │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Chain-of-Alpha: Последние достижения (2025)

Фреймворк Chain-of-Alpha вводит архитектуру двойной цепочки:

┌─────────────────────────────────────────────────────────────────────────┐
│ Фреймворк Chain-of-Alpha │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ ЦЕПОЧКА ГЕНЕРАЦИИ ФАКТОРОВ │ │
│ │ │ │
│ │ Рыночные данные → Анализ LLM → Кандидаты факторов → Валидация │ │
│ │ ↑ │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ │ Итерация с обратной связью │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ ↕ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ ЦЕПОЧКА ОПТИМИЗАЦИИ ФАКТОРОВ │ │
│ │ │ │
│ │ Результаты бэктеста → Анализ производительности → Промпты │ │
│ │ ↑ │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ │ База знаний оптимизации │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Ключевая инновация: Обе цепочки работают синергетически, деля знания │
│ о том, что работает и что нет, для непрерывного улучшения │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Архитектура Alpha-GPT

Компоненты системы

/// Основные компоненты системы открытия факторов на базе LLM
#[derive(Debug, Clone)]
pub struct FactorDiscoverySystem {
/// LLM клиент для генерации факторов
pub llm_client: LlmClient,
/// Парсер и валидатор выражений факторов
pub expression_parser: ExpressionParser,
/// Движок бэктестинга
pub backtester: Backtester,
/// Библиотека факторов для поиска похожих
pub factor_library: FactorLibrary,
/// Конфигурация
pub config: DiscoveryConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoveryConfig {
/// Минимальный порог IC для принятия фактора
pub min_ic: f64,
/// Минимальный порог IC_IR
pub min_ic_ir: f64,
/// Максимальная корреляция с существующими факторами
pub max_correlation: f64,
/// Максимально допустимый оборот
pub max_turnover: f64,
/// Количество факторов для генерации за итерацию
pub batch_size: usize,
/// Максимальное количество итераций уточнения
pub max_iterations: usize,
}
impl Default for DiscoveryConfig {
fn default() -> Self {
Self {
min_ic: 0.02,
min_ic_ir: 0.3,
max_correlation: 0.7,
max_turnover: 0.5,
batch_size: 10,
max_iterations: 5,
}
}
}

Инженерия промптов для генерации факторов

┌─────────────────────────────────────────────────────────────────────────┐
│ Шаблон промпта для генерации факторов │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ СИСТЕМНЫЙ ПРОМПТ: │
│ """ │
│ Вы количественный исследователь, специализирующийся на открытии │
│ альфа-факторов. Ваша задача — генерировать торговые факторы, │
│ которые предсказывают будущую доходность активов. │
│ │
│ Доступные операторы: │
│ - rank(x): Кросс-секционный ранг │
│ - zscore(x, d): Скользящий z-score │
│ - ts_rank(x, d): Ранг временного ряда │
│ - returns(d): d-дневная доходность │
│ - ts_sum(x, d), ts_mean(x, d), ts_std(x, d): Скользящая статистика │
│ - correlation(x, y, d), covariance(x, y, d): Скользящие корреляции │
│ - delta(x, d): Изменение за d периодов │
│ - delay(x, d): Запаздывающее значение │
│ │
│ Доступные данные: │
│ - open, high, low, close, volume, vwap, amount │
│ │
│ Требования: │
│ - Генерировать валидные выражения факторов │
│ - Объяснять экономическую интуицию │
│ - Учитывать транзакционные издержки (предпочитать низкий оборот) │
│ """ │
│ │
│ ПОЛЬЗОВАТЕЛЬСКИЙ ПРОМПТ: │
│ """ │
│ Сгенерируйте альфа-факторы на основе этой исследовательской идеи: │
│ {research_idea} │
│ │
│ Недавняя производительность похожих факторов: │
│ {similar_factors_performance} │
│ │
│ Пожалуйста, выведите: │
│ 1. Выражение фактора │
│ 2. Экономическое обоснование │
│ 3. Ожидаемое поведение (моментум/разворот/и т.д.) │
│ 4. Потенциальные риски и ограничения │
│ """ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Конвейер генерации факторов

Сквозной рабочий процесс

┌─────────────────────────────────────────────────────────────────────────┐
│ Конвейер открытия факторов │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ФАЗА 1: ГЕНЕРАЦИЯ ИДЕЙ │
│ ─────────────────────────────────────────────────────────────────── │
│ Вход: Научные статьи, рыночные аномалии, интуиции │
│ Выход: Список гипотез о факторах │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Научные статьи │ → │ LLM-суммаризатор│ → │ Идеи факторов │ │
│ │ Рыночные новости│ │ и переводчик │ │ на ест. языке │ │
│ │ Отчёты аномалий │ └─────────────────┘ └─────────────────┘ │
│ └─────────────────┘ │
│ │
│ ФАЗА 2: ГЕНЕРАЦИЯ │
│ ─────────────────────────────────────────────────────────────────── │
│ Вход: Идеи факторов │
│ Выход: Кандидаты выражений факторов │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Идеи факторов │ → │ LLM-генератор │ → │ Кандидаты │ │
│ │ + Примеры │ │ (с RAG) │ │ выражений │ │
│ │ + Ограничения │ └─────────────────┘ └─────────────────┘ │
│ └─────────────────┘ │
│ │
│ ФАЗА 3: ВАЛИДАЦИЯ │
│ ─────────────────────────────────────────────────────────────────── │
│ Вход: Выражения факторов │
│ Выход: Валидные, вычислимые факторы │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Кандидаты │ → │ Парсер и │ → │ Валидные │ │
│ │ выражений │ │ валидатор │ │ факторы │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ ФАЗА 4: ОЦЕНКА │
│ ─────────────────────────────────────────────────────────────────── │
│ Вход: Валидные факторы │
│ Выход: Метрики производительности, ранжирование │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Валидные факторы│ → │ Движок │ → │ IC, IR, Sharpe │ │
│ │ + Рыночные данные│ │ бэктестинга │ │ Оборот │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ ФАЗА 5: УТОЧНЕНИЕ │
│ ─────────────────────────────────────────────────────────────────── │
│ Вход: Обратная связь по производительности │
│ Выход: Улучшенные факторы │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Слабые факторы │ → │ LLM-уточнитель │ → │ Улучшенные │ │
│ │ │ │ (с обр. связью) │ │ выражения │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ Итерировать до схождения или max_iterations │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Оценка и бэктестинг факторов

Расчёт информационного коэффициента

/// Расчёт информационного коэффициента (IC) между фактором и доходностью
pub fn calculate_ic(
factor_values: &[f64],
forward_returns: &[f64],
) -> f64 {
// Используем ранговую корреляцию Спирмена
let n = factor_values.len();
// Ранжируем обе серии
let factor_ranks = rank_values(factor_values);
let return_ranks = rank_values(forward_returns);
// Вычисляем корреляцию Спирмена
let mean_f: f64 = factor_ranks.iter().sum::<f64>() / n as f64;
let mean_r: f64 = return_ranks.iter().sum::<f64>() / n as f64;
let mut cov = 0.0;
let mut var_f = 0.0;
let mut var_r = 0.0;
for i in 0..n {
let df = factor_ranks[i] - mean_f;
let dr = return_ranks[i] - mean_r;
cov += df * dr;
var_f += df * df;
var_r += dr * dr;
}
if var_f == 0.0 || var_r == 0.0 {
return 0.0;
}
cov / (var_f.sqrt() * var_r.sqrt())
}
/// Статистика IC во времени
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ICStats {
/// Средний IC
pub mean_ic: f64,
/// Стандартное отклонение IC
pub ic_std: f64,
/// Информационное отношение (IC_IR = mean_ic / ic_std)
pub ic_ir: f64,
/// Процент периодов с положительным IC
pub positive_ic_ratio: f64,
/// T-статистика для значимости IC
pub t_stat: f64,
}

Применение в криптовалютном трейдинге

Интеграция с Bybit для факторного трейдинга

┌─────────────────────────────────────────────────────────────────────────┐
│ Конвейер крипто-факторного трейдинга │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ЗАГРУЗКА ДАННЫХ │ │
│ │ Bybit API ──→ ┐ │ │
│ │ Binance ──→ │──→ OHLCV данные ──→ Инженерия признаков │ │
│ │ Ончейн ──→ ┘ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ВЫЧИСЛЕНИЕ ФАКТОРОВ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Моментум- │ │ Разворотные │ │ Объёмные │ │ │
│ │ │ факторы │ │ факторы │ │ факторы │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │ │ │ │
│ │ └────────────────┴────────────────┘ │ │
│ │ │ │ │
│ │ ↓ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ Комбинатор │ │ │
│ │ │ факторов │ │ │
│ │ │ (ML или линейн.)│ │ │
│ │ └────────┬────────┘ │ │
│ └─────────────────────────┼─────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ГЕНЕРАЦИЯ СИГНАЛОВ │ │
│ │ │ │
│ │ Комб. оценка ──→ Размер позиции ──→ Лимиты риска │ │
│ │ │ │ │
│ │ ↓ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ Торговые сигналы│ │ │
│ │ │ BTC: +0.3 (лонг)│ │ │
│ │ │ ETH: -0.2 (шорт)│ │ │
│ │ │ SOL: +0.5 (лонг)│ │ │
│ │ └────────┬────────┘ │ │
│ └─────────────────────────────────────────────┼─────────────────────┘ │
│ │ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ИСПОЛНЕНИЕ │ │
│ │ │ │
│ │ Сигналы ──→ Маршрутизация ордеров ──→ Bybit API ──→ Подтверждение│ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Специфичные для крипто факторы

┌─────────────────────────────────────────────────────────────────────────┐
│ Примеры криптовалютных факторов │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Моментум ставки финансирования │
│ формула: ts_mean(funding_rate, 8) * rank(returns(24h)) │
│ логика: Устойчивое финансирование указывает на направление │
│ │
│ 2. Дивергенция открытого интереса │
│ формула: delta(open_interest, 4h) / ts_std(open_interest, 24) │
│ логика: Рост OI может сигнализировать продолжение тренда │
│ │
│ 3. Асимметрия ликвидаций │
│ формула: (long_liquidations - short_liquidations) / │
│ (long_liquidations + short_liquidations) │
│ логика: Односторонние ликвидации могут сигнализировать разворот │
│ │
│ 4. Накопление китами │
│ формула: ts_sum(exchange_outflow, 7d) / ts_mean(volume, 30d) │
│ логика: Отток с бирж предполагает накопление │
│ │
│ 5. Межбиржевой спред │
│ формула: zscore(price_binance - price_bybit, 24) │
│ логика: Арбитражные возможности сигнализируют о неправильной цене │
│ │
│ 6. Социальный моментум │
│ формула: rank(delta(social_volume, 1d)) * │
│ sign(sentiment_score) │
│ логика: Растущее позитивное внимание может опережать цену │
│ │
└─────────────────────────────────────────────────────────────────────────┘

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

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

75_llm_factor_discovery/
├── Cargo.toml
├── README.md
├── README.ru.md
├── readme.simple.md
├── readme.simple.ru.md
├── src/
│ ├── lib.rs # Корень библиотеки
│ ├── discovery/
│ │ ├── mod.rs # Модуль открытия
│ │ ├── llm_client.rs # Клиент API LLM
│ │ ├── prompt_builder.rs # Инженерия промптов
│ │ ├── generator.rs # Генерация факторов
│ │ └── refiner.rs # Уточнение факторов
│ ├── parser/
│ │ ├── mod.rs # Модуль парсера
│ │ ├── expression.rs # AST выражений факторов
│ │ ├── lexer.rs # Токенизатор
│ │ └── validator.rs # Валидация выражений
│ ├── evaluation/
│ │ ├── mod.rs # Модуль оценки
│ │ ├── ic.rs # Расчёт IC
│ │ ├── backtester.rs # Движок бэктестинга
│ │ └── metrics.rs # Метрики производительности
│ ├── data/
│ │ ├── mod.rs # Модуль данных
│ │ ├── bybit.rs # Клиент Bybit
│ │ ├── types.rs # Типы данных
│ │ └── buffer.rs # Скользящие буферы
│ ├── strategy/
│ │ ├── mod.rs # Модуль стратегии
│ │ ├── signals.rs # Генерация сигналов
│ │ ├── combiner.rs # Комбинация факторов
│ │ └── execution.rs # Исполнение ордеров
│ └── utils/
│ ├── mod.rs # Утилиты
│ └── config.rs # Конфигурация
├── examples/
│ ├── basic_discovery.rs # Базовое открытие факторов
│ ├── backtest_factors.rs # Демо бэктестинга
│ └── live_trading.rs # Демо живого трейдинга
├── experiments/
│ └── test_factors.rs # Эксперименты с факторами
└── tests/
└── integration.rs # Интеграционные тесты

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

Специфичные для факторов риски

┌────────────────────────────────────────────────────────────────────────┐
│ Управление рисками открытия факторов │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Риск переобучения │
│ ├── LLM может генерировать факторы, слишком подогнанные под данные │
│ ├── Сложные выражения более склонны к переобучению │
│ └── Митигация: │
│ → Тестирование вне выборки (прокатывающая валидация) │
│ → Штрафы за сложность (предпочитать простые выражения) │
│ → Коррекция множественного тестирования (Бонферрони, BH) │
│ │
│ 2. Риск подсматривания данных │
│ ├── Тестирование многих факторов увеличивает ложные открытия │
│ ├── Обучающие данные LLM могут содержать известные факторы │
│ └── Митигация: │
│ → Отслеживать количество протестированных факторов │
│ → Применять статистические коррекции │
│ → Использовать holdout-периоды, не виденные при разработке │
│ │
│ 3. Риск смены режима │
│ ├── Факторы могут перестать работать при смене рыночного режима │
│ ├── Крипторынки имеют частые смены режимов │
│ └── Митигация: │
│ → Мониторинг затухания фактора (скользящий IC) │
│ → Диверсификация по типам факторов │
│ → Внедрение предохранителей (circuit breakers) │
│ │
│ 4. Риск галлюцинаций LLM │
│ ├── LLM может генерировать бессмысленные выражения │
│ ├── Может утверждать, что факторы работают без доказательств │
│ └── Митигация: │
│ → Строгая валидация выражений │
│ → Всегда проверять реальными бэктестами │
│ → Требовать экономическое обоснование │
│ │
└────────────────────────────────────────────────────────────────────────┘

Размер позиций

Размер позиций для факторных стратегий:
1. Масштабирование по уверенности фактора:
размер_позиции = базовый_размер × |сигнал_фактора| × оценка_уверенности
2. Масштабирование на основе IC:
размер_позиции = базовый_размер × (скользящий_IC / целевой_IC)
- Увеличивать позицию, когда фактор работает
- Уменьшать, когда IC падает
3. Корректировка на волатильность:
размер_позиции = целевая_вол / реализованная_вол × базовый_размер
4. Максимальные ограничения:
- Макс. одна позиция: 10% портфеля (крипто)
- Макс. экспозиция к фактору: 30% на тип фактора
- Макс. общее плечо: 2x (консервативно)

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

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

МетрикаОписаниеЦель
IC (Информационный коэффициент)Ранговая корреляция с доходностью> 0.02
IC_IR (Информационное отношение IC)IC / std(IC)> 0.3
Sharpe RatioДоходность, скорректированная на риск> 1.5
Sortino RatioДоходность, скорректированная на нисходящий риск> 2.0
Максимальная просадкаНаибольшее падение от пика до дна< 20%
ОборотСкорость изменения позиций< 50%/месяц
T-статистикаСтатистическая значимость IC> 2.0
Время затуханияПериод полураспада предсказательности> 5 дней

Метрики системы открытия

МетрикаОписаниеЦель
Hit RateФакторы, прошедшие валидацию> 30%
Novel Factor RateУникальные факторы (низкая корреляция)> 20%
Задержка генерацииВремя генерации пакета факторов< 60с
Пропускная способность бэктестаФакторов бэктестировано в час> 100
Улучшение уточненияПрирост IC после итерации> 20%

Литература

  1. Alpha-GPT: Human-AI Interactive Alpha Mining for Quantitative Investment

  2. Alpha-GPT 2.0: Human-in-the-Loop AI for Quantitative Investment

  3. Chain-of-Alpha: Unleashing the Power of Large Language Models for Alpha Mining

  4. From Deep Learning to LLMs: A Survey of AI in Quantitative Investment

  5. FinGPT: Open-Source Financial Large Language Models

  6. A Hybrid Approach to Formulaic Alpha Discovery with Large Language Model Assistance

  7. Large Language Models in Equity Markets: Applications, Techniques, and Insights

  8. Machine Learning for Factor Investing

    • Coqueret, G., & Guida, T. (2020). Chapman & Hall/CRC
  9. Quantitative Equity Portfolio Management

    • Chincarini, L., & Kim, D. (2006). McGraw-Hill

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


Глава 75 Machine Learning for Trading