Розроблення AI-моделі прогнозування напрямку тренду
Прогнозування напрямку руху ціни (бінарна класифікація: вверх/вниз) простіше, ніж точна оцінка величини зміни. Навіть умірна точність 52-55% на горизонті кількох днів дає позитивне математичне очікування при правильному управлінні ризиками.
Постановка як класифікаційна задача
Бінарний таргет:
df['target'] = (df['close'].shift(-N) > df['close']).astype(int)
# 1 = ціна виросте за N днів, 0 = впаде або залишиться
Проблема незбалансованих класів: ринки часто мають bias (наприклад, акції у довгостроковому тренді росту). Потрібна калібровка або балансування.
Альтернативна постановка: 3-класова (ріст / боковик / падіння) з зоною невизначеності ±0.2% — дозволяє утримуватися від торгівлі при невпевненому сигналі.
Feature Engineering
Momentum фічи (найпередбачливіші):
- Relative Strength: дохідність за 1/3/6/12 місяців
- Rate of Change (ROC): log return за різні горизонти
- Acceleration: зміна momentum (momentum of momentum)
Mean Reversion фічи:
- Deviation from SMA: (Close - SMA_20) / SMA_20
- Bollinger %B: (Close - Lower) / (Upper - Lower)
- RSI: рівні перекупленості/перепроданості
Volatility-adjusted фічи:
- Sharp/Smooth: ratio волатильності на короткому vs. довгому вікні
- Позиція ціни в N-денному діапазоні (Williams %R)
Regime фічи:
- VIX рівень (risk-on / risk-off)
- Market breadth: % акцій вище SMA200
- Treasury yield curve slope (10y-2y)
Ансамблеві моделі
Базові класифікатори:
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 — лінійні сигнали. Ансамбль стабілізує, зменшує 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 фічами — 3-4 тижні. Повноцінна система з ансамблем, калібровкою, backtesting та моніторингом — 8-12 тижнів.







