Розробка AI-моделі аналізу технічних індикаторів: RSI, MACD, Bollinger
Технічний аналіз існує довше, ніж сучасні нейронні мережі. RSI, MACD, Bollinger Bands — емпірично знайдені інструменти, які описують ринкову динаміку. ML-підхід не замінює ці індикатори, а автоматично з них навчається: знаходить оптимальні параметри, комбінації та контекст застосування.
RSI: Прогнозування повернення до середнього
Стандартний RSI(14):
RSI = 100 - 100 / (1 + RS)
RS = Середній прибуток / Середня втрата за 14 періодів
Традиційне правило: RSI < 30 → перепроданість → сигнал до покупки. Проблема: працює погано на трендових ринках (RSI може залишатися нижче 30 протягом тижнів у даунтренді).
ML-поліпшення:
- Оптимізація періоду (7-28) через Optuna для кожного інструменту
- RSI у контексті тренду:
rsi_divergence_from_trend = rsi - trend_adjusted_rsi - Мультитайм-фрейм RSI: 7d, 14d, 21d як окремі ознаки
- Швидкість RSI: зміна RSI за 3 дні (сигнал прискорення)
MACD: Момент та сигнали перетину
Стандартний MACD:
Лінія MACD = EMA(12) - EMA(26)
Сигнальна лінія = EMA(9) MACD лінії
Гістограма = MACD - сигнал
ML-ознаки з MACD:
-
macd_histogram: значення та знак -
macd_histogram_trend: зростає або падає (момент моменту) -
macd_signal_cross: 1 при бичачому перетині (MACD перетнув сигнал знизу) -
macd_zero_cross: перетин нульової лінії -
macd_divergence: новий мінімум ціни, але вищий MACD — бичача дивергенція
Параметрична оптимізація: Стандарт (12, 26, 9) — не обов'язково оптимальний для конкретного інструменту/часового фрейму. Байєсова оптимізація простору (fast_period, slow_period, signal_period) за коефіцієнтом Шарпа на прямій валідації.
Bollinger Bands: волатильність та пробої
Стандартні Bollinger Bands(20, 2):
Середня смуга = SMA(20)
Верхня смуга = SMA(20) + 2 × σ(20)
Нижня смуга = SMA(20) - 2 × σ(20)
ML-ознаки:
-
%b = (ціна - нижня) / (верхня - нижня): позиція ціни в смузі (0-1) -
bandwidth = (верхня - нижня) / середня: ширина смуги, проксі волатильності -
squeeze: bandwidth < 6-місячний мінімум → приходить пробій -
band_walk: ціна кілька днів підряд дотикається верхньої/нижньої смуги → трендовий ринок
Стратегія Bollinger Squeeze: Стиснення передує значному рухові. Напрямок невизначений, але величина очікується. ML передбачає напрямок пробою зі стиснення.
Комбінована ML-модель
Інтеграція всіх індикаторів в єдину модель:
Матриця ознак:
def build_technical_features(df):
features = {}
# Родина RSI
for period in [7, 14, 21]:
features[f'rsi_{period}'] = talib.RSI(df.close, period)
features['rsi_divergence'] = compute_rsi_divergence(df)
# Родина MACD
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)
# Стохастичний
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 з квантильними втратами. Ціль: вперед 5-денний повернення. Важливість ознаки виявить, які індикатори дійсно прогнозуючі.
Залежність від контексту індикаторів
Ключове прозріння: індикатори працюють по-різному в різних режимах ринку:
- На трендовому ринку: RSI < 30 = продовження спаду (не розворот!)
- На варіюючому ринку: RSI < 30 = справжній сигнал розвороту
- Висока волатильність: Bollinger Bands потребує розширення (3σ замість 2σ)
Модель, залежна від режиму:
# Детектор режиму
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: довга позиція N лотів
- Коли signal < -threshold: коротка позиція
- Stop: -2 × ATR(14)
- Мета: +4 × ATR(14)
Розрахунок реальних витрат на транзакцію:
- Комісія: 0.04% за сторону (Interactive Brokers)
- Проковзування: 0.02-0.05%
- Фінансування: ночевий своп для forex/CFD
Оцінка: Sharpe > 1.0 на поза вибіркою після TC — достатній результат для подальшого розвитку.
Часова шкала: базова модель з ознаками RSI+MACD+Bollinger — 2-3 тижні. Повна система з виявленням режиму, параметричною оптимізацією та backtesting — 6-8 тижнів.







