Разработка AI-модели прогнозирования направления тренда
Предсказание направления движения цены (бинарная классификация: вверх/вниз) проще, чем точная оценка величины изменения. Даже умеренная точность 52-55% на горизонте нескольких дней даёт положительное математическое ожидание при правильном управлении рисками.
Постановка как классификационная задача
Таргет (бинарный):
df['target'] = (df['close'].shift(-N) > df['close']).astype(int)
# 1 = цена вырастет за N дней, 0 = упадёт или останется
Проблема несбалансированных классов: рынки часто имеют незначительный bias (например, акции в долгосрочном тренде роста). Нужна калибровка или балансировка.
Альтернативная постановка: 3-классовая (рост / боковик / падение) с зоной неопределённости ±0.2% — позволяет воздерживаться от торговли при неуверенном сигнале.
Feature Engineering
Momentum features (наиболее предсказательные):
- Relative Strength: доходность за 1/3/6/12 месяцев
- Rate of change (ROC): log return за разные горизонты
- Acceleration: изменение momentum (momentum of momentum)
Mean reversion features:
- Deviation from SMA: (Close - SMA_20) / SMA_20
- Bollinger %B: (Close - Lower) / (Upper - Lower)
- RSI: уровни перекупленности/перепроданности
Volatility-adjusted features:
- Sharp/Smooth: ratio volatility на коротком vs. длинном окне
- Price position в N-дневном диапазоне (Williams %R)
Regime features:
- VIX уровень (risk-on / risk-off)
- Market breadth: % акций выше SMA200
- Treasury yield curve slope (10y-2y)
Ensemble модели
Базовые классификаторы:
from sklearn.ensemble import VotingClassifier
from lightgbm import LGBMClassifier
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
ensemble = VotingClassifier(
estimators=[
('lgbm', LGBMClassifier(n_estimators=300, class_weight='balanced')),
('xgb', XGBClassifier(n_estimators=300, scale_pos_weight=ratio)),
('lr', LogisticRegression(C=0.1, class_weight='balanced'))
],
voting='soft' # вероятностное голосование
)
Почему ансамбль: разные модели улавливают разные аспекты предсказуемости. LightGBM — нелинейные взаимодействия. Logistic Regression — линейные сигналы. Ensemble стабилизирует, снижает overfit.
Калибровка вероятностей
Raw предсказания моделей часто плохо откалиброваны. Для торговых стратегий это важно: предсказанная вероятность 0.6 должна означать реальную частоту 60%.
Плотность сигнала: Нас интересует правило торговли: торгуем только при уверенности модели > threshold. Precision-Recall кривая помогает выбрать порог.
from sklearn.calibration import CalibratedClassifierCV
calibrated = CalibratedClassifierCV(ensemble, method='isotonic', cv=3)
calibrated.fit(X_train, y_train)
Управление рисками при торговле по сигналу
Условия торговли:
- P(up) > 0.55: лонг
- P(up) < 0.45: шорт
- 0.45-0.55: нет позиции
Position sizing по уверенности:
Position = (2 × P - 1) × Max_Position_Size × Volatility_Adjustment
Kelly-подобная формула: чем выше P, тем больше позиция.
Stop-loss: при лонге, stop при -2 × ATR(14). Это механический exit, не зависящий от переобучившейся модели.
Метрики и оценка
| Метрика | Значение | Интерпретация |
|---|---|---|
| Accuracy | 52-56% | Лучше случайного |
| Precision Long | > 55% | Лонги прибыльны |
| AUC-ROC | > 0.55 | Ранжирование работает |
| IC (prediction correlation) | > 0.03 | Слабый, но стабильный edge |
Backtesting с реальными параметрами:
- Slippage: 0.05-0.1% на исполнение
- Комиссия: 0.02-0.05% per side
- Финансирование для шорта: annual rate / 365 per day
После учёта TC модель должна показывать Sharpe > 0.8 на out-of-sample для рассмотрения.
Распространённые ловушки:
- Overfitting к историческим паттернам: CPCV (Combinatorial Purged CV) помогает
- Нестабильность: переобучившаяся модель деградирует за 1-3 месяца
- Regime change: модель, обученная на боковике, разрушается при трендовом рынке
Сроки: baseline модель с momentum features — 3-4 недели. Полноценная система с ensemble, calibration, backtesting и мониторингом — 8-12 недель.







