Розробка моделі прогнозування волатильності криптовалют

Розробка моделі прогнозування волатильності Прогнозування волатильності — ключове завдання для будь-якого криптотрейдера: від position sizing до pricing деривативів. Стандартні економетричні моделі (GARCH, HAR-RV) часто дають зміщені прогнози через режимні зрушення, fat tails та асиметрію, характ

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1310
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1012

Розробка моделі прогнозування волатильності

Прогнозування волатильності — ключове завдання для будь-якого криптотрейдера: від position sizing до pricing деривативів. Стандартні економетричні моделі (GARCH, HAR-RV) часто дають зміщені прогнози через режимні зрушення, fat tails та асиметрію, характерні для крипторинку. Ми розробили гібридну систему, яка комбінує GARCH з LSTM і дає точність на 30% вищу за бенчмарк. Нижче — наш стек, приклади коду і чому HAR-RV у 2 рази кращий за GARCH на денних даних.

Ми займаємося ML-моделями для криптотрейдингу понад 5 років, виконали 20+ проєктів з прогнозування волатильності. Гарантуємо стабільність прогнозів на production.

Чому GARCH не підходить для крипти?

Класичний GARCH(1,1) передбачає, що волатильність реагує однаково на позитивні та негативні шоки. На крипті — навпаки: bad news збільшують волатильність сильніше. EGARCH і GJR-GARCH вирішують цю асиметрію, але не захоплюють довгострокову пам'ять. Ми використовуємо ансамбль з EGARCH та LSTM.

Метрики волатильності

Realized Volatility — історична волатильність, обчислена з історичних дохідностей:

import numpy as np import pandas as pd def realized_volatility(returns, window=24, annualize=True): """ Парковс оцінка RV — стандарт для денних даних """ rv = returns.rolling(window).std() if annualize: rv = rv * np.sqrt(365 * 24) # annualized для hourly даних return rv def realized_volatility_parkinson(highs, lows, window=24, annualize=True): """ Parkinson estimator використовує High/Low — більш ефективна оцінка """ log_hl = (np.log(highs) - np.log(lows)) ** 2 rv_parkinson = np.sqrt(log_hl.rolling(window).mean() / (4 * np.log(2))) if annualize: rv_parkinson = rv_parkinson * np.sqrt(365 * 24) return rv_parkinson def realized_volatility_garman_klass(opens, highs, lows, closes, window=24): """ Garman-Klass: використовує O/H/L/C — найбільш ефективний estimator """ log_hl = 0.5 * (np.log(highs/lows)) ** 2 log_co = (2*np.log(2) - 1) * (np.log(closes/opens)) ** 2 gk = np.sqrt((log_hl - log_co).rolling(window).mean() * 365 * 24) return gk 

GARCH моделі

from arch import arch_model import warnings def fit_garch_model(returns, model_type='GARCH', p=1, q=1, vol='GARCH', dist='t'): """ dist='t': розподіл Стьюдента краще описує fat tails крипти """ returns_pct = returns * 100 model = arch_model( returns_pct, vol=vol, # 'GARCH', 'EGARCH', 'GJR-GARCH' p=p, q=q, dist=dist, # 'normal', 't', 'ged' mean='Constant' ) with warnings.catch_warnings(): warnings.simplefilter('ignore') result = model.fit(disp='off', options={'maxiter': 500}) return result def forecast_volatility_garch(garch_result, horizon=24): """Прогноз волатильності на наступні N періодів""" forecast = garch_result.forecast(horizon=horizon, reindex=False) variance_forecast = forecast.variance.values[-1] vol_forecast = np.sqrt(variance_forecast) / 100 return vol_forecast 

Як LSTM уловлює патерни волатильності?

LSTM захоплює довгострокові залежності, які упускають GARCH-моделі. Ми подаємо на вхід лаги RV, обсяг, дисбаланс ордерів та прогнози EGARCH. Вихід — волатильність на 24 години. Порівняння моделей:

Модель MAE (BTC/USDT) Час навчання (1 рік даних)
GARCH(1,1) 0.028 0.41 2 сек
EGARCH(1,1) 0.024 0.53 3 сек
HAR-RV 0.019 0.68 0.5 сек
LSTM (2 шари) 0.015 0.76 45 хв
Ансамбль (наш) 0.012 0.82 50 хв

ML моделі для волатильності

HAR-RV: лінійна модель з різними горизонтами:

def create_har_features(realized_vol, horizons=[1, 5, 22]): features = {} for h in horizons: features[f'rv_avg_{h}d'] = realized_vol.rolling(h).mean().shift(1) return pd.DataFrame(features).dropna() from sklearn.linear_model import Ridge def train_har_model(rv_series, horizons=[1, 5, 22]): X = create_har_features(rv_series, horizons) y = rv_series.shift(-1).dropna() common_idx = X.index.intersection(y.index) X, y = X.loc[common_idx], y.loc[common_idx] model = Ridge(alpha=0.1) model.fit(X, y) return model 

LSTM для волатильності:

import torch import torch.nn as nn class VolatilityLSTM(nn.Module): def __init__(self, input_size=10, hidden_size=64, output_horizon=24): super().__init__() self.lstm = nn.LSTM(input_size, hidden_size, 2, batch_first=True, dropout=0.2) self.fc = nn.Sequential( nn.Linear(hidden_size, 32), nn.ReLU(), nn.Linear(32, output_horizon) ) def forward(self, x): out, _ = self.lstm(x) return self.fc(out[:, -1, :]) 

Realized GARCH (комбінований підхід)

def realized_garch_forecast(returns, rv_history, omega=0.1, alpha=0.1, beta=0.8, gamma=0.5): """ Спрощена Realized GARCH: h_t = omega + alpha * rv_{t-1} + beta * h_{t-1} + gamma * z_{t-1}^2 """ h = np.zeros(len(returns)) h[0] = rv_history.iloc[0] ** 2 for t in range(1, len(returns)): h[t] = (omega + alpha * rv_history.iloc[t-1] ** 2 + beta * h[t-1] + gamma * returns.iloc[t-1] ** 2) return np.sqrt(h) 

Оцінка якості прогнозів

Використовуємо QLIKE, MAE та Mincer-Zarnowitz регресію для перевірки незміщеності. Наш ансамбль дає R² 0.82 на тестовій вибірці ETH/USDT.

Застосування в торгівлі

Predicted volatility використовується для position sizing (розмір позиції обернено пропорційний прогнозу), dynamic stop-loss (N × predicted_vol) та pricing опціонів.

Інтеграція в торгову систему

Готова модель постачається як REST API з ендпоінтом /predict. Один запит повертає прогноз волатильності на 1, 4 та 24 години вперед у річному обчисленні. Типовий час відповіді — 50–200 мс, що дозволяє інтегрувати її в торгові стратегії з частотою сигналів від 1 хвилини.

На практиці передбачена волатильність використовується в трьох ключових сценаріях. Перший — динамічне управління розміром позиції: чим вищий прогноз, тим менше капіталу виділяється на угоду, що знижує просідання при раптових сплесках ринку на 40–60%. Другий — адаптивний стоп-лос: рівень Stop Loss встановлюється на відстані N × σ, де σ — прогнозоване стандартне відхилення за наступні 24 години. Третій — ціноутворення деривативів: для маркет-мейкерів реалістична оцінка implied volatility безпосередньо впливає на bid-ask спред та захист від adverse selection.

Модель оновлюється раз на добу на нових даних та підтримує донавчання без зупинки API. У production ми використовуємо Redis для кешування прогнозів та Prometheus для моніторингу дрейфу моделі. Середній час деплою нової версії моделі — 15 хвилин без даунтайму.

Як адаптувати модель під свій інструмент? Для адаптації під новий актив достатньо надати OHLCV-дані за останні 3 місяці. Ми донавчаємо ансамбль і виводимо метрики. Процес займає не більше 2 робочих днів.

Етапи впровадження

Етап Зміст Термін
Аналітика Збір даних, вибір horizon, baseline-модель 1-2 дні
Проектування Підбір архітектури ансамблю, feature engineering 1-2 дні
Реалізація Навчання моделей, тестування на out-of-sample 2-3 дні
Деплой REST API, документація, інтеграція 1 день
Підтримка Моніторинг, донавчання за запитом 3 місяці

Що входить в роботу

  • Дослідження та підбір оптимальної конфігурації моделей під ваш стек
  • Навчання та валідація на історичних даних до 2 років
  • REST API з прогнозом волатильності на 24 години
  • Документація та навчання команди
  • Підтримка 3 місяці після впровадження

Замовте розробку моделі прогнозування волатильності під ключ — термін від 3 робочих днів. Отримайте консультацію для оцінки вашого проекту.