Разработка AI-модели анализа технических индикаторов RSI MACD Bollinger
Технический анализ существует дольше, чем современные нейросети. RSI, MACD, Bollinger Bands — эмпирически найденные инструменты, которые описывают рыночную динамику. ML-подход не заменяет эти индикаторы, а автоматически обучается на них: находит оптимальные параметры, комбинации и контекст применения.
RSI: предсказание возврата к среднему
Стандартный RSI(14):
RSI = 100 - 100 / (1 + RS)
RS = Average Gain / Average Loss over 14 periods
Традиционное правило: RSI < 30 → перепроданность → сигнал покупки. Проблема: работает плохо в трендовых рынках (RSI может оставаться ниже 30 неделями в downtrend).
ML-улучшение:
- Оптимизация периода (7-28) через Optuna для каждого инструмента
- RSI в контексте тренда:
rsi_divergence_from_trend = rsi - trend_adjusted_rsi - Multi-timeframe RSI: 7d, 14d, 21d как отдельные фичи
- RSI velocity: изменение RSI за 3 дня (acceleration сигнал)
MACD: momentum и cross-сигналы
Стандартный MACD:
MACD Line = EMA(12) - EMA(26)
Signal Line = EMA(9) of MACD Line
Histogram = MACD - Signal
ML-Features из MACD:
-
macd_histogram: значение и знак -
macd_histogram_trend: растёт или падает (momentum momentum) -
macd_signal_cross: 1 при bullish cross (MACD пересёк Signal снизу) -
macd_zero_cross: пересечение нулевой линии -
macd_divergence: новый low цены, но higher MACD — bullish divergence
Параметрическая оптимизация: Стандарт (12, 26, 9) — не обязательно оптимален для конкретного инструмента/таймфрейма. Bayesian оптимизация пространства (fast_period, slow_period, signal_period) по Sharpe ratio на walkforward validation.
Bollinger Bands: volatility и breakouts
Стандартные Bollinger Bands(20, 2):
Middle Band = SMA(20)
Upper Band = SMA(20) + 2 × σ(20)
Lower Band = SMA(20) - 2 × σ(20)
ML-Features:
-
%b = (Price - Lower) / (Upper - Lower): позиция цены в полосе (0-1) -
bandwidth = (Upper - Lower) / Middle: ширина полосы, proxy для волатильности -
squeeze: bandwidth < 6-месячного minimum → предстоит breakout -
band_walk: цена несколько дней подряд касается верхней/нижней полосы → трендовый рынок
Bollinger Squeeze стратегия: Squeeze (сжатие) предшествует значимому движению. Direction uncertain, but magnitude expected. ML предсказывает направление breakout из squeeze.
Комбинированная 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 выявит, какие индикаторы действительно предсказательны.
Контекст-зависимость индикаторов
Ключевой insight: индикаторы работают по-разному в разных рыночных режимах:
- В 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)
Backtesting технического подхода
Простая стратегия для валидации модели:
- Когда signal > threshold: long позиция N лотов
- Когда signal < -threshold: short
- Stop: -2 × ATR(14)
- Target: +4 × ATR(14)
Расчёт реальных TC:
- Commission: 0.04% per side (interactive brokers)
- Slippage: 0.02-0.05%
- Financing: overnight swap для forex/CFD
Оценка: Sharpe > 1.0 на out-of-sample после TC — достаточный результат для дальнейшей разработки.
Сроки: baseline модель с RSI+MACD+Bollinger features — 2-3 недели. Полноценная система с regime detection, параметрической оптимизацией и backtesting — 6-8 недель.







