Глава 86: Предсказание рынка с малым количеством примеров (Few-Shot)
Обзор
Few-Shot Market Prediction решает задачу точного предсказания на новых или неизвестных рынках при минимальном количестве исторических данных. Это особенно важно на криптовалютных рынках, где постоянно появляются новые торговые пары, а традиционные модели машинного обучения требуют обширного переобучения. Используя техники мета-обучения, мы можем быстро адаптироваться к новым рыночным условиям всего с 5-20 примерами.
Содержание
- Введение
- Теоретические основы
- Подходы Few-Shot обучения
- Проектирование архитектуры
- Применение к предсказанию рынка
- Стратегия реализации
- Интеграция с Bybit
- Управление рисками
- Метрики производительности
- Ссылки
Введение
Традиционные модели машинного обучения для предсказания рынка сталкиваются с критическим ограничением: им требуются тысячи размеченных примеров для каждого рынка или актива для достижения приемлемой точности. Это становится проблемой когда:
- Появляются новые активы: Новые криптовалюты, токены или торговые пары листятся ежедневно
- Динамика рынка меняется: Статистические свойства рынков изменяются со временем
- Кросс-рыночный перенос: Знания с одного рынка могут не применяться напрямую к другому
- Ограниченные исторические данные: Некоторые рыночные условия (обвалы, сквизы) имеют мало исторических примеров
Решение Few-Shot обучения
┌─────────────────────────────────────────────────────────────────────────────┐│ Традиционное ML vs Few-Shot обучение │├─────────────────────────────────────────────────────────────────────────────┤│ ││ ТРАДИЦИОННОЕ ML: ││ ──────────────── ││ Обучение: 10,000+ примеров на актив ││ Проблема: Новый актив листится → Нужны недели данных ││ Результат: Невозможно прибыльно торговать на ранней стадии ││ ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ BTC │████████████████████████████████│ 50,000 примеров │ ││ │ ETH │████████████████████████████████│ 45,000 примеров │ ││ │ НОВЫЙ!│██ │ 500 примеров ❌ Мало │ ││ └─────────────────────────────────────────────────────────────────────┘ ││ ││ FEW-SHOT ОБУЧЕНИЕ: ││ ────────────────── ││ Обучение: Учимся "как учиться" на многих активах ││ Инференс: Адаптация к новому активу с 5-20 примерами ││ Результат: Прибыльная торговля в течение часов после листинга ││ ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ Мета-обучение на: BTC, ETH, SOL, AVAX, DOT, LINK, UNI, ... │ ││ │ Мета-тест на: НОВЫЙ_ТОКЕН с 10 примерами ✓ │ ││ └─────────────────────────────────────────────────────────────────────┘ ││ │└─────────────────────────────────────────────────────────────────────────────┘Ключевые преимущества для трейдинга
| Аспект | Традиционное ML | Few-Shot обучение |
|---|---|---|
| Адаптация к новому активу | Недели-месяцы | Часы |
| Требования к данным | 10,000+ примеров | 5-20 примеров |
| Кросс-рыночный перенос | Ограниченный | Отличный |
| Адаптация к режиму | Медленное переобучение | Быстрая адаптация |
| Поддержка модели | Высокая | Низкая |
| Охват рынков | Ограничен обученными активами | Расширяется на лету |
Теоретические основы
Фреймворк мета-обучения
Few-shot предсказание рынка построено на мета-обучении, также известном как “обучение учиться”. Вместо обучения модели для конкретной задачи предсказания, мы обучаем модель, которая может быстро адаптироваться к новым задачам.
Математическая формулировка
Распределение задач: Пусть $p(\mathcal{T})$ - распределение над торговыми задачами (напр., разные активы, таймфреймы или цели предсказания).
Support Set: Для каждой задачи $\mathcal{T}_i$ у нас есть support set $\mathcal{S}i = {(x_j, y_j)}{j=1}^K$ с $K$ примерами (K-shot).
Query Set: Оцениваем на query set $\mathcal{Q}i = {(x_j, y_j)}{j=1}^Q$.
Цель мета-обучения:
$$\min_\theta \mathbb{E}_{\mathcal{T}_i \sim p(\mathcal{T})} \left[ \mathcal{L}(\mathcal{Q}i; f{\theta’_i}) \right]$$
где $\theta’_i = \text{adapt}(\theta, \mathcal{S}_i)$ представляет адаптированные параметры для задачи $i$.
Эпизодическое обучение
┌────────────────────────────────────────────────────────────────────────────┐│ Эпизодическое обучение для предсказания рынка │├────────────────────────────────────────────────────────────────────────────┤│ ││ Генерация эпизодов: ││ ────────────────── ││ ││ Шаг 1: Выбираем N задач (напр., N разных активов) ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ Задача 1: Предсказание направления цены BTC │ ││ │ Задача 2: Прогнозирование волатильности ETH │ ││ │ Задача 3: Классификация тренда SOL │ ││ │ Задача 4: Определение режима AVAX │ ││ │ Задача 5: Предсказание поддержки/сопротивления DOT │ ││ └─────────────────────────────────────────────────────────────────────┘ ││ ││ Шаг 2: Для каждой задачи создаём support и query наборы ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ Задача BTC: │ ││ │ Support: [Признаки дней 1-5 → метки] (5-shot) │ ││ │ Query: [Признаки дней 6-10 → метки] (5 query примеров) │ ││ │ │ ││ │ Задача ETH: │ ││ │ Support: [Признаки дней 1-5 → метки] (5-shot) │ ││ │ Query: [Признаки дней 6-10 → метки] (5 query примеров) │ ││ └─────────────────────────────────────────────────────────────────────┘ ││ ││ Шаг 3: Мета-обновление ││ • Адаптируем модель к каждой задаче используя support set ││ • Оцениваем на query set ││ • Обновляем мета-параметры для улучшения адаптации ││ │└────────────────────────────────────────────────────────────────────────────┘Формулировка N-way K-shot задачи
Для предсказания рынка мы обычно формулируем задачи как:
- N-way классификация: Классифицировать в N категорий (напр., Вверх/Вниз/Боковик)
- K-shot: Использовать K примеров на категорию в support set
- Регрессия: Предсказывать непрерывные значения (цена, волатильность)
Типичные конфигурации для трейдинга:
- 3-way 5-shot: Вверх/Вниз/Боковик с 5 примерами каждый
- 5-way 10-shot: Пять рыночных режимов с 10 примерами каждый
- 1-shot регрессия: Предсказание доходности с 1 референсным примером
Подходы Few-Shot обучения
1. Метрические методы
Изучаем метрическое пространство, где похожие рыночные условия группируются вместе.
┌────────────────────────────────────────────────────────────────────────────┐│ Метрическое Few-Shot обучение │├────────────────────────────────────────────────────────────────────────────┤│ ││ Основная идея: Изучить эмбеддинги, где расстояние = похожесть ││ ││ Визуализация пространства эмбеддингов: ││ ││ ↑ Измерение 2 ││ │ ││ │ ★ Query (новый актив) ││ │ / ││ │ / расстояние ││ │ / ││ ●─●─●────●────────● ││ Support примеры │ ││ (тот же класс) │ ││ │ ○──○──○ ││ │ Support примеры ││ │ (другой класс) ││ └────────────────────────→ Измерение 1 ││ ││ Методы: ││ ──────── ││ • Сиамские сети: Изучают попарную похожесть ││ • Прототипные сети: Сравнение с прототипами классов (центроидами) ││ • Matching Networks: Attention-взвешенная похожесть ││ • Relation Networks: Изучение функции похожести нейросетью ││ │└────────────────────────────────────────────────────────────────────────────┘2. Оптимизационные методы (семейство MAML)
Изучаем начальные параметры, которые можно быстро дообучить.
┌────────────────────────────────────────────────────────────────────────────┐│ Model-Agnostic Meta-Learning (MAML) │├────────────────────────────────────────────────────────────────────────────┤│ ││ Основная идея: Найти инициализацию θ, которая быстро адаптируется ││ ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ │ ││ │ θ (начальные параметры) │ ││ │ │ │ ││ │ ┌─────┼─────┬─────────┐ │ ││ │ │ │ │ │ │ ││ │ ↓ ↓ ↓ ↓ │ ││ │ θ'₁ θ'₂ θ'₃ ... θ'ₙ (параметры для задач) │ ││ │ │ │ │ │ │ ││ │ Зад.1 Зад.2 Зад.3 Зад.N (внутр. цикл: несколько шагов град.) │ ││ │ │ │ │ │ │ ││ │ └─────┴─────┴─────────┘ │ ││ │ │ │ ││ │ ↓ │ ││ │ Мета-обновление θ (внешний цикл: оптимизация для быстрой адапт.) │ ││ │ │ ││ └─────────────────────────────────────────────────────────────────────┘ ││ ││ Алгоритм: ││ ───────── ││ 1. Выбираем батч задач ││ 2. Для каждой задачи: ││ - Адаптируем θ → θ' используя support set (1-5 шагов градиента) ││ - Вычисляем loss на query set с θ' ││ 3. Обновляем θ используя сумму query losses ││ │└────────────────────────────────────────────────────────────────────────────┘3. Гибридный подход для предсказания рынка
┌────────────────────────────────────────────────────────────────────────────┐│ Гибридный Few-Shot предиктор рынка │├────────────────────────────────────────────────────────────────────────────┤│ ││ Вход: Признаки рынка ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ Ценовые признаки: доходности, волатильность, моментум │ ││ │ Объёмные признаки: объём, VWAP, поток ордеров │ ││ │ Технические индикаторы: RSI, MACD, Bollinger Bands │ ││ │ Крипто-специфичные: funding rate, OI, ликвидации │ ││ └─────────────────────────────────────────────────────────────────────┘ ││ │ ││ ↓ ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ Временной энкодер (общий для всех задач) │ ││ │ ────────────────────────────────────── │ ││ │ • 1D-CNN для локальных паттернов │ ││ │ • LSTM/Transformer для моделирования последовательностей │ ││ │ • Механизм внимания для важных признаков │ ││ └─────────────────────────────────────────────────────────────────────┘ ││ │ ││ ↓ ││ ┌────────────────────────┴────────────────────────┐ ││ │ │ ││ ↓ ↓ ││ Метрический путь Оптимизационный путь ││ ┌────────────────────┐ ┌────────────────────┐ ││ │ Прототип. матчинг │ │ MAML адаптация │ ││ │ (быстро, без град.)│ │ (точно, с град.) │ ││ └────────────────────┘ └────────────────────┘ ││ │ │ ││ └───────────────┬──────────────────────────┘ ││ │ ││ ↓ ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ Ансамбль / Взвешенный по уверенности выход │ ││ │ ──────────────────────────────────────── │ ││ │ Высокая уверенность: Использовать метрический (быстрее) │ ││ │ Низкая уверенность: Использовать оптимизационный (точнее) │ ││ └─────────────────────────────────────────────────────────────────────┘ ││ │ ││ ↓ ││ Выход: Предсказание + Оценка уверенности ││ │└────────────────────────────────────────────────────────────────────────────┘Проектирование архитектуры
Модуль извлечения признаков
/// Типы рыночных признаков для few-shot обучения#[derive(Debug, Clone)]pub struct MarketFeatures { /// Ценовые признаки pub price_features: PriceFeatures, /// Объёмные признаки pub volume_features: VolumeFeatures, /// Технические индикаторы pub technical_features: TechnicalFeatures, /// Крипто-специфичные признаки pub crypto_features: CryptoFeatures,}
#[derive(Debug, Clone)]pub struct PriceFeatures { /// Доходности на разных горизонтах pub returns: Vec<f32>, // [1м, 5м, 15м, 1ч, 4ч, 24ч] /// Логарифмические доходности pub log_returns: Vec<f32>, /// Реализованная волатильность pub volatility: Vec<f32>, // Несколько окон /// Нормализованный диапазон high-low pub range: f32, /// Позиция close в диапазоне [0, 1] pub close_position: f32, /// Ценовой моментум pub momentum: Vec<f32>,}
#[derive(Debug, Clone)]pub struct VolumeFeatures { /// Нормализованный объём pub volume_normalized: f32, /// Скорость изменения объёма pub volume_change: f32, /// Соотношение Buy/Sell объёма pub buy_sell_ratio: f32, /// Отклонение от VWAP pub vwap_deviation: f32, /// Признаки профиля объёма pub volume_profile: Vec<f32>,}
#[derive(Debug, Clone)]pub struct TechnicalFeatures { /// RSI на разных периодах pub rsi: Vec<f32>, /// MACD линия, сигнал, гистограмма pub macd: [f32; 3], /// Позиция в Bollinger Band pub bb_position: f32, /// Сигналы пересечения скользящих средних pub ma_signals: Vec<f32>, /// Нормализованный ATR pub atr: f32,}
#[derive(Debug, Clone)]pub struct CryptoFeatures { /// Ставка финансирования (для перпетуалов) pub funding_rate: f32, /// Изменение открытого интереса pub oi_change: f32, /// Соотношение Long/Short pub long_short_ratio: f32, /// Недавний объём ликвидаций pub liquidation_volume: f32, /// Базис Spot-Futures pub basis: f32,}Архитектура сети эмбеддинга
/// Конфигурация сети эмбеддинга#[derive(Debug, Clone)]pub struct EmbeddingConfig { /// Размерность входных признаков pub input_dim: usize, /// Длина последовательности (число временных шагов) pub seq_length: usize, /// Скрытая размерность временного энкодера pub hidden_dim: usize, /// Размерность выходного эмбеддинга pub embedding_dim: usize, /// Число голов внимания pub num_heads: usize, /// Коэффициент dropout pub dropout: f32,}
impl Default for EmbeddingConfig { fn default() -> Self { Self { input_dim: 48, // Общее число признаков seq_length: 96, // 96 временных шагов (напр., 96 часов) hidden_dim: 256, embedding_dim: 128, num_heads: 8, dropout: 0.1, } }}Модуль Few-Shot предиктора
/// Конфигурация few-shot предиктора рынка#[derive(Debug, Clone)]pub struct FewShotConfig { /// Число классов/категорий pub n_way: usize, /// Число support примеров на класс pub k_shot: usize, /// Число query примеров для оценки pub n_query: usize, /// Конфигурация эмбеддинга pub embedding_config: EmbeddingConfig, /// Тип метрики расстояния pub distance_type: DistanceType, /// Температура для softmax pub temperature: f32, /// Использовать ли MAML адаптацию pub use_maml: bool, /// Learning rate внутреннего цикла MAML pub maml_inner_lr: f32, /// Число шагов внутреннего цикла MAML pub maml_inner_steps: usize,}
impl Default for FewShotConfig { fn default() -> Self { Self { n_way: 3, // Вверх, Вниз, Боковик k_shot: 5, // 5 примеров на класс n_query: 15, // 15 query примеров embedding_config: EmbeddingConfig::default(), distance_type: DistanceType::SquaredEuclidean, temperature: 1.0, use_maml: false, // Начинаем с метрического maml_inner_lr: 0.01, maml_inner_steps: 5, } }}
/// Типы метрик расстояния#[derive(Debug, Clone, Copy)]pub enum DistanceType { Euclidean, // Евклидово SquaredEuclidean, // Квадрат евклидова Cosine, // Косинусное Learned, // В стиле Relation Network}
/// Результат предсказания с уверенностью#[derive(Debug, Clone)]pub struct PredictionResult { /// Предсказанный класс/категория pub prediction: usize, /// Вероятности классов pub probabilities: Vec<f32>, /// Оценка уверенности (макс. вероятность) pub confidence: f32, /// Расстояние до каждого прототипа pub distances: Vec<f32>,}Применение к предсказанию рынка
Задачи предсказания
┌────────────────────────────────────────────────────────────────────────────┐│ Задачи Few-Shot предсказания рынка │├────────────────────────────────────────────────────────────────────────────┤│ ││ Тип задачи 1: ПРЕДСКАЗАНИЕ НАПРАВЛЕНИЯ (Классификация) ││ ────────────────────────────────────────────────────── ││ Предсказать: Направление цены в следующие N периодов ││ Классы: [Вверх, Вниз, Боковик] ││ N-way: 3 ││ K-shot: 5-10 ││ ││ Пример Support Set: ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Класс "Вверх": │ ││ │ • Период 1: признаки → доходность +2.3% │ ││ │ • Период 2: признаки → доходность +1.8% │ ││ │ • Период 3: признаки → доходность +3.1% │ ││ │ ... │ ││ │ Класс "Вниз": │ ││ │ • Период 1: признаки → доходность -2.1% │ ││ │ • Период 2: признаки → доходность -1.5% │ ││ │ ... │ ││ └────────────────────────────────────────────────────────────────────┘ ││ ││ Тип задачи 2: ОПРЕДЕЛЕНИЕ РЕЖИМА (Классификация) ││ ───────────────────────────────────────────────── ││ Предсказать: Текущий рыночный режим ││ Классы: [Бычий, Медвежий, Боковик, Выс_Вол, Низ_Вол] ││ N-way: 5 ││ K-shot: 5-10 ││ ││ Тип задачи 3: ПРОГНОЗ ВОЛАТИЛЬНОСТИ (Регрессия) ││ ─────────────────────────────────────────────── ││ Предсказать: Будущую реализованную волатильность ││ Выход: Непрерывное значение ││ K-shot: 5-20 референсных периодов ││ ││ Тип задачи 4: ПОДДЕРЖКА/СОПРОТИВЛЕНИЕ (Классификация) ││ ────────────────────────────────────────────────────── ││ Предсказать: Цена отскочит или пробьёт? ││ Классы: [Отскок, Пробой] ││ N-way: 2 ││ K-shot: 5-10 ││ ││ Тип задачи 5: КРОСС-АКТИВНЫЙ ПЕРЕНОС ││ ───────────────────────────────────── ││ Обучение на: BTC, ETH, SOL, AVAX ││ Адаптация к: Новому токену с 5 примерами ││ Применение: Прибыльная торговля новыми листингами ││ │└────────────────────────────────────────────────────────────────────────────┘Интеграция торговой стратегии
┌────────────────────────────────────────────────────────────────────────────┐│ Пайплайн Few-Shot торговой стратегии │├────────────────────────────────────────────────────────────────────────────┤│ ││ Фаза 1: ПОСТРОЕНИЕ SUPPORT SET (Онлайн) ││ ──────────────────────────────────────── ││ • Мониторинг последних рыночных данных для актива ││ • Разметка последних периодов на основе реализованных исходов ││ • Создание support set со сбалансированным представительством классов ││ • Обновление support set по мере поступления данных (скользящее окно) ││ ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Скользящий Support Set для BTC: │ ││ │ ┌──────────────────────────────────────────────────────────────┐ │ ││ │ │ t-48ч │ t-47ч │ ... │ t-25ч │ ... │ t-1ч │ Текущий │ │ ││ │ │ Вверх │ Вверх │ │ Вниз │ │ Бок │ ? │ │ ││ │ └──────────────────────────────────────────────────────────────┘ │ ││ │ Support: Последние 48 размеченных периодов │ ││ │ Query: Текущий период (для предсказания) │ ││ └────────────────────────────────────────────────────────────────────┘ ││ ││ Фаза 2: ПРЕДСКАЗАНИЕ (Реальное время) ││ ───────────────────────────────────── ││ • Извлечение признаков для текущего периода ││ • Вычисление эмбеддинга ││ • Сравнение с прототипами/адаптированной моделью ││ • Генерация предсказания с уверенностью ││ ││ Фаза 3: ГЕНЕРАЦИЯ СИГНАЛОВ ││ ────────────────────────── ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Предсказание → Маппинг торгового сигнала │ ││ │ │ ││ │ ВВЕРХ (увер. > 0.7) → ЛОНГ сигнал, размер = увер. × баз_размер │ ││ │ ВНИЗ (увер. > 0.7) → ШОРТ сигнал, размер = увер. × баз_размер │ ││ │ БОКОВИК → Без сделки или торговля в диапазоне │ ││ │ Низкая уверенность → Уменьшить размер или пропустить │ ││ └────────────────────────────────────────────────────────────────────┘ ││ ││ Фаза 4: УПРАВЛЕНИЕ ПОЗИЦИЕЙ ││ ──────────────────────────── ││ • Вход в позицию на основе сигнала ││ • Установка stop-loss и take-profit на основе режима ││ • Непрерывный мониторинг уверенности предсказания ││ • Выход при: достижении цели, стопа или падении уверенности ││ │└────────────────────────────────────────────────────────────────────────────┘Протокол адаптации к новому активу
┌────────────────────────────────────────────────────────────────────────────┐│ Протокол адаптации к новому активу │├────────────────────────────────────────────────────────────────────────────┤│ ││ Когда листится новый актив (напр., новый токен на Bybit): ││ ││ Час 0-1: СБОР ДАННЫХ ││ ──────────────────── ││ • Начинаем сбор данных OHLCV ││ • Мониторинг динамики книги ордеров ││ • Запись funding rates (если перпетуал) ││ ││ Час 1-4: НАЧАЛЬНЫЙ SUPPORT SET ││ ───────────────────────────── ││ • Разметка первых периодов на основе реализованных доходностей ││ • Создание минимального support set (3-5 примеров на класс) ││ • Консервативные предсказания (высокий порог уверенности) ││ ││ Час 4-24: АКТИВНОЕ ОБУЧЕНИЕ ││ ─────────────────────────── ││ • Расширение support set новыми размеченными примерами ││ • Снижение порога уверенности по мере накопления данных ││ • Начинаем с малых размеров позиций ││ ││ После 24ч: ПОЛНАЯ АДАПТАЦИЯ ││ ─────────────────────────── ││ • Support set достигает целевого размера (20-50 примеров) ││ • Включены полные размеры позиций ││ • Непрерывное обновление support set (скользящее окно) ││ ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Расписание порога уверенности │ ││ │ │ ││ │ 100% ───────────────────────────────────────── │ ││ │ 95% ▓▓▓▓▓ │ ││ │ 90% ▓▓▓▓▓▓▓▓▓ │ ││ │ 85% ▓▓▓▓▓▓ │ ││ │ 80% ▓▓▓▓▓▓▓▓ │ ││ │ 75% ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │ ││ │ 70% ▓▓▓▓▓▓▓▓▓▓▓ │ ││ │ ────┬────┬────┬────┬────┬────┬────┬────┬────┬────→ Часы │ ││ │ 1 4 8 12 16 20 24 36 48 72 │ ││ └────────────────────────────────────────────────────────────────────┘ ││ │└────────────────────────────────────────────────────────────────────────────┘Стратегия реализации
Структура модулей
86_few_shot_market_prediction/├── Cargo.toml├── README.md # Основная документация (English)├── README.ru.md # Русский перевод├── readme.simple.md # Упрощённое объяснение├── readme.simple.ru.md # Упрощённое на русском├── src/│ ├── lib.rs # Корень библиотеки│ ├── config.rs # Типы конфигурации│ ├── features/│ │ ├── mod.rs # Модуль признаков│ │ ├── extractor.rs # Извлечение признаков│ │ ├── normalizer.rs # Нормализация признаков│ │ └── types.rs # Типы признаков│ ├── embedding/│ │ ├── mod.rs # Модуль эмбеддинга│ │ ├── network.rs # Сеть эмбеддинга│ │ ├── temporal.rs # Временное кодирование│ │ └── attention.rs # Механизмы внимания│ ├── fewshot/│ │ ├── mod.rs # Few-shot модуль│ │ ├── prototypical.rs # Прототипные сети│ │ ├── maml.rs # Реализация MAML│ │ ├── episode.rs # Генерация эпизодов│ │ └── predictor.rs # Интерфейс предсказания│ ├── data/│ │ ├── mod.rs # Модуль данных│ │ ├── bybit.rs # Клиент API Bybit│ │ ├── dataset.rs # Обработка датасетов│ │ └── support_set.rs # Управление support set│ ├── trading/│ │ ├── mod.rs # Модуль трейдинга│ │ ├── signals.rs # Генерация сигналов│ │ ├── strategy.rs # Торговая стратегия│ │ └── risk.rs # Управление рисками│ └── utils/│ ├── mod.rs # Утилиты│ ├── metrics.rs # Метрики оценки│ └── math.rs # Математические утилиты├── examples/│ ├── basic_fewshot.rs # Базовый пример few-shot│ ├── direction_prediction.rs # Демо предсказания направления│ ├── new_asset_trading.rs # Адаптация к новому активу│ └── backtest.rs # Пример бэктестинга├── python/│ ├── few_shot_predictor.py # Реализация на PyTorch│ ├── train.py # Скрипт обучения│ ├── evaluate.py # Скрипт оценки│ └── requirements.txt # Python зависимости└── tests/ ├── integration.rs # Интеграционные тесты └── unit_tests.rs # Unit тестыИнтеграция с Bybit
Пайплайн сбора данных
┌────────────────────────────────────────────────────────────────────────────┐│ Пайплайн данных Bybit для Few-Shot обучения │├────────────────────────────────────────────────────────────────────────────┤│ ││ 1. ИСТОРИЧЕСКИЕ ДАННЫЕ (Мета-обучение) ││ ────────────────────────────────────── ││ Цель: Обучение базовой модели на многих активах ││ ││ API Endpoints: ││ • GET /v5/market/kline → OHLCV свечи для нескольких символов ││ • GET /v5/market/tickers → Текущее состояние рынка ││ • GET /v5/market/funding/history → История funding rate ││ • GET /v5/market/open-interest → История открытого интереса ││ ││ Стратегия сбора данных: ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Символы: BTC, ETH, SOL, AVAX, DOT, LINK, UNI, ATOM, ... │ ││ │ Таймфрейм: 1ч свечи │ ││ │ История: 1 год на символ │ ││ │ Семплирование задач: Разные окна как разные задачи │ ││ └────────────────────────────────────────────────────────────────────┘ ││ ││ 2. ДАННЫЕ РЕАЛЬНОГО ВРЕМЕНИ (Инференс/Адаптация) ││ ──────────────────────────────────────────────── ││ Цель: Построение support sets и предсказания ││ ││ WebSocket подписки: ││ • kline.1.{symbol} → 1-минутные свечи для обновления признаков ││ • ticker.{symbol} → Цены реального времени для исполнения ││ • liquidation.{symbol} → События ликвидаций для признаков ││ ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Цикл реального времени: │ ││ │ 1. Получаем новую свечу через WebSocket │ ││ │ 2. Обновляем буфер признаков │ ││ │ 3. Каждый час: Размечаем предыдущий период, обновляем support set │ ││ │ 4. Делаем предсказание на следующий период │ ││ │ 5. Генерируем торговый сигнал если уверенность > порога │ ││ └────────────────────────────────────────────────────────────────────┘ ││ ││ 3. ИСПОЛНЕНИЕ ОРДЕРОВ ││ ───────────────────── ││ • POST /v5/order/create → Размещение market/limit ордеров ││ • GET /v5/position/list → Проверка текущих позиций ││ • POST /v5/order/cancel → Отмена ожидающих ордеров ││ │└────────────────────────────────────────────────────────────────────────────┘Управление рисками
Размер позиции на основе уверенности
┌────────────────────────────────────────────────────────────────────────────┐│ Управление рисками для Few-Shot трейдинга │├────────────────────────────────────────────────────────────────────────────┤│ ││ 1. РАЗМЕР ПОЗИЦИИ НА ОСНОВЕ УВЕРЕННОСТИ ││ ──────────────────────────────────────── ││ ││ Размер позиции = Базовый размер × Уверенность × Мультипликатор режима ││ ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Пороги уверенности: │ ││ │ │ ││ │ Уверенность < 0.50: НЕ ТОРГОВАТЬ (слишком неопределённо) │ ││ │ Уверенность 0.50-0.65: 25% от базового размера │ ││ │ Уверенность 0.65-0.75: 50% от базового размера │ ││ │ Уверенность 0.75-0.85: 75% от базового размера │ ││ │ Уверенность 0.85-0.95: 100% от базового размера │ ││ │ Уверенность > 0.95: 100% (ограничение против переобучения) │ ││ └────────────────────────────────────────────────────────────────────┘ ││ ││ 2. ОЦЕНКА КАЧЕСТВА SUPPORT SET ││ ────────────────────────────── ││ ││ Оценка качества = f(баланс_классов, свежесть, разнообразие) ││ ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Факторы качества: │ ││ │ │ ││ │ • Баланс классов: Все классы должны иметь ~ одинаково примеров │ ││ │ • Свежесть: Недавние примеры должны весить больше │ ││ │ • Разнообразие: Примеры должны охватывать разные условия │ ││ │ • Согласованность: Похожие примеры должны иметь похожие метки │ ││ └────────────────────────────────────────────────────────────────────┘ ││ ││ 3. STOP-LOSS И TAKE-PROFIT ││ ────────────────────────── ││ ││ ┌─────────────────────────────────────────────────────────────────┐ ││ │ Предсказание │ Stop-Loss │ Take-Profit │ Макс. время удерж.│ ││ │──────────────────┼───────────┼─────────────┼───────────────────│ ││ │ ВВЕРХ (выс.ув.) │ -2.0% │ +3.0% │ 4 часа │ ││ │ ВВЕРХ (ср.ув.) │ -1.5% │ +2.0% │ 2 часа │ ││ │ ВНИЗ (выс.) │ -2.0% │ +3.0% │ 4 часа │ ││ │ ВНИЗ (ср.) │ -1.5% │ +2.0% │ 2 часа │ ││ │ БОКОВИК │ -1.0% │ +1.0% │ 1 час │ ││ └─────────────────────────────────────────────────────────────────┘ ││ ││ 4. АВТОМАТИЧЕСКИЕ ВЫКЛЮЧАТЕЛИ ││ ──────────────────────────── ││ ││ Автоматическое закрытие позиции когда: ││ • Уверенность падает ниже 0.40 во время удержания позиции ││ • Предсказание меняет направление (ВВЕРХ → ВНИЗ или наоборот) ││ • Support set устарел (>4ч с последнего обновления) ││ • Дневной убыток превышает 3% капитала ││ • 5 убыточных сделок подряд ││ ││ 5. МАСШТАБИРОВАНИЕ РИСКА ДЛЯ НОВЫХ АКТИВОВ ││ ────────────────────────────────────────── ││ ││ ┌────────────────────────────────────────────────────────────────────┐ ││ │ Часов с листинга │ Макс. размер позиции │ ││ │───────────────────────┼────────────────────────────────────────────│ ││ │ 0-4 часа │ 10% от нормального │ ││ │ 4-12 часов │ 25% от нормального │ ││ │ 12-24 часа │ 50% от нормального │ ││ │ 24-48 часов │ 75% от нормального │ ││ │ 48+ часов │ 100% от нормального │ ││ └────────────────────────────────────────────────────────────────────┘ ││ │└────────────────────────────────────────────────────────────────────────────┘Метрики производительности
Метрики оценки модели
| Метрика | Описание | Цель |
|---|---|---|
| Few-Shot Accuracy | Точность классификации с K примерами | > 65% |
| 1-Shot Accuracy | Точность с одним примером на класс | > 55% |
| 5-Shot Accuracy | Точность с 5 примерами на класс | > 70% |
| Cross-Asset Transfer | Точность на невиденных активах | > 60% |
| Скорость адаптации | Эпизодов до целевой точности | < 10 |
| Калибровка уверенности | Надёжность оценок уверенности | ECE < 0.10 |
Метрики торговой производительности
| Метрика | Описание | Цель |
|---|---|---|
| Коэффициент Шарпа | Доходность с поправкой на риск | > 2.0 |
| Коэффициент Сортино | Доходность с поправкой на нисходящий риск | > 2.5 |
| Макс. просадка | Наибольшее падение от пика | < 15% |
| Доля выигрышей | Процент прибыльных сделок | > 55% |
| Profit Factor | Валовая прибыль / Валовой убыток | > 1.5 |
| ROI на новых активах | Доходность на новых листингах | > 10% в месяц |
Бюджет задержки
┌─────────────────────────────────────────────────┐│ Требования к задержке │├─────────────────────────────────────────────────┤│ Извлечение признаков: < 5мс ││ Вычисление эмбеддинга: < 15мс ││ Расстояние до прототипов: < 3мс ││ Предсказание: < 2мс │├─────────────────────────────────────────────────┤│ Общий инференс: < 25мс │├─────────────────────────────────────────────────┤│ Обновление Support Set: < 50мс ││ MAML адаптация (если исп.): < 500мс │└─────────────────────────────────────────────────┘Ссылки
-
Short-Term Stock Price-Trend Prediction Using Meta-Learning
- URL: https://arxiv.org/abs/2105.13599
- Год: 2021
-
Prototypical Networks for Few-shot Learning
- Snell, J., Swersky, K., & Zemel, R. (2017)
- URL: https://arxiv.org/abs/1703.05175
-
Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
- Finn, C., Abbeel, P., & Levine, S. (2017)
- URL: https://arxiv.org/abs/1703.03400
-
Matching Networks for One Shot Learning
- Vinyals, O., et al. (2016)
- URL: https://arxiv.org/abs/1606.04080
-
Meta-Learning: A Survey
- Hospedales, T., et al. (2020)
- URL: https://arxiv.org/abs/2004.05439
-
Few-Shot Learning for Time Series Forecasting
- Последние достижения в применении мета-обучения к временным данным
-
Cross-Asset Learning in Financial Markets
- Подходы трансферного обучения для мульти-активной торговли
Следующие шаги
- Простое объяснение - Версия для начинающих
- English Version - Английская версия
- Примеры кода - Рабочий код на Rust
- Python реализация - Референсная реализация на PyTorch
Глава 86 из Machine Learning for Trading