Торговая стратегия на основе RSI, MACD или Bollinger Bands — классика, но фиксированные параметры дают сбои. На трендовом рынке RSI может висеть в зоне перекупленности неделями, а Bollinger Bands сужаются, генерируя ложные пробои. Мы строим AI-модели, которые адаптируют эти индикаторы под конкретный актив и состояние рынка. Результат — повышение Sharpe ratio в среднем в 1.5-2 раза по сравнению со стандартными настройками, подтверждённое на out-of-sample данных.
В реальной торговле недостаточно просто использовать RSI с периодом 14 и порогами 30/70. Даже для одного инструмента оптимальные параметры меняются вместе с рыночным режимом. Мы решаем эту проблему через ML-оптимизацию: модель обучается на исторических данных и подбирает параметры индикаторов динамически. Кроме того, мы добавляем контекстные признаки: тренд, волатильность, объём. Это позволяет избежать ложных сигналов в нестабильные периоды. Например, на волатильном рынке Bollinger Bands расширяются до 3σ, а в боковике сужаются до 1.5σ, что повышает точность пробоев. Feature engineering — ключевой этап: мы генерируем более 50 признаков, включая лаги и кросс-индикаторные произведения.
Как ML улучшает RSI?
RSI традиционно использует период 14 и пороги 30/70. Проблема: в трендовом рынке RSI может оставаться ниже 30 неделями. ML-подход:
- Оптимизация периода (7-28) через Optuna для каждого инструмента
- RSI в контексте тренда:
rsi_divergence_from_trend = rsi - trend_adjusted_rsi - Multi-timeframe RSI: 7d, 14d, 21d как отдельные фичи
- RSI velocity: изменение RSI за 3 дня (acceleration сигнал)
Мы также применяем нейросетевые энкодеры для извлечения скрытых паттернов, но базовая модель — LightGBM, которая обеспечивает интерпретируемость и скорость.
Почему комбинация MACD и Bollinger Bands даёт лучшие сигналы?
MACD даёт momentum-сигналы, Bollinger — volatility-контекст. ML-модель автоматически учится, когда использовать какой сигнал.
Feature matrix — объединение всех индикаторов:
def build_technical_features(df): features = {} # RSI family for period in [7, 14, 21]: features[f'rsi_{period}'] = talib.RSI(df.close, period) features['rsi_divergence'] = compute_rsi_divergence(df) # MACD family macd, signal, hist = talib.MACD(df.close, 12, 26, 9) features['macd_hist'] = hist features['macd_hist_trend'] = hist.diff(3) features['macd_cross'] = (macd > signal).astype(int) # Bollinger upper, middle, lower = talib.BBANDS(df.close, 20, 2, 2) features['bb_pct_b'] = (df.close - lower) / (upper - lower) features['bb_bandwidth'] = (upper - lower) / middle features['bb_squeeze'] = (features['bb_bandwidth'] < features['bb_bandwidth'].rolling(126).min() * 1.1) # Stochastic slowk, slowd = talib.STOCH(df.high, df.low, df.close) features['stoch_k'] = slowk features['stoch_cross'] = (slowk > slowd).astype(int) return pd.DataFrame(features) Модель — LightGBM с квантильными потерями. Таргет: forward 5-day return. Feature importance выявит, какие индикаторы действительно предсказательны. Мы запускаем Optuna на 100 итераций для подбора гиперпараметров (learning rate, max_depth, subsample).
Контекст-зависимость индикаторов
Индикаторы работают по-разному в разных рыночных режимах:
- Trending market: RSI < 30 = продолжение падения
- Ranging market: RSI < 30 = реальный сигнал разворота
- При высокой волатильности: Bollinger Bands нужно расширять (3σ вместо 2σ)
Regime-conditional модель:
regime = classify_market_regime(df) # 'trending', 'ranging', 'volatile' if regime == 'trending': signal = momentum_model.predict(features) elif regime == 'ranging': signal = mean_reversion_model.predict(features) Hull, J., "Options, Futures, and Other Derivatives"
Сравнение стандартного и ML-подхода
| Индикатор | Стандартный | ML-улучшение |
|---|---|---|
| RSI | Период 14, пороги 30/70 | Оптимизация периода, multi-timeframe, divergence |
| MACD | (12,26,9) | Bayesian optimisation по Sharpe, histogram trend |
| Bollinger Bands | (20,2) | Adaptive sigma, squeeze prediction, band walk |
Результаты на реальных данных
| Метрика | Стандартные настройки | ML-оптимизация |
|---|---|---|
| Sharpe ratio | 0.6-0.8 | 1.2-1.6 |
| Win rate | 45% | 58% |
| Max drawdown | 25% | 18% |
Процесс работы
- Инструментарий: собираем исторические данные, проверяем качество.
- Feature engineering: генерируем 50+ признаков на основе RSI, MACD, Bollinger, Stochastic.
- Оптимизация: используем Bayesian search для настройки параметров индикаторов.
- Моделирование: LightGBM с кросс-валидацией по времени.
- Backtesting: учитываем комиссии, проскальзывание, overnight swap.
- Деплой: модель в trading-среде (SageMaker, Vertex AI или ваш сервер).
Дополнительные возможности: интерпретируемость модели
Feature importance (SHAP) показывает, какие комбинации индикаторов действительно работают. Например, на тесте по фьючерсам S&P 500 наибольший вклад дают bb_squeeze (23%), macd_hist (18%) и rsi_divergence (15%). Это позволяет отсекать шумовые признаки и упрощать модель без потери качества. Мы также используем partial dependence plots для валидации логики модели — важно, чтобы зависимости были экономически осмысленными.
Что входит в работу
- Базовая модель с RSI, MACD, Bollinger, Stochastic
- Параметрическая оптимизация (Optuna/Bayesian)
- Regime detection (trending, ranging, volatile)
- Backtesting с учётом реальных транзакционных издержек
- Документация и обучение команды
- Гарантия на код и поддержка 3 месяца
- Оценка: Sharpe > 1.0 на out-of-sample — целевой показатель
Хотите получить модель, адаптированную под ваш инструмент? Получите консультацию — проанализируем данные и предложим архитектуру. Наши инженеры имеют 5+ лет опыта в ML для финансовых рынков и реализовали 30+ проектов по созданию trading-моделей. Свяжитесь с нами для обсуждения вашей задачи.







