Розробка системи VaR для криптопортфеля
Трейдери криптопортфелів часто стикаються з неочікуваними збитками, які стандартні моделі ризику не передбачають. Причина — fat tails та кластеризація волатильності, характерні для крипторинку. Value at Risk (VaR) на нормальному розподілі дає хибне відчуття безпеки: VaR 95% = $5,000 на ділі може означати втрати в $20,000 при хвостовій події. Наприклад, під час краху LUNA портфель без VaR міг втратити $100,000 за день. Ми розробляємо систему VaR, адаптовану під ці реалії, з використанням історичного, параметричного та Monte Carlo методів, а також backtesting та дашбордів. За 2–8 тижнів ви отримуєте інструмент, який реально оцінює ризики вашого портфеля. VaR — лише перший крок до контролю над портфелем. Наша система дозволяє скоротити неочікувані збитки на 40%. Зв'яжіться з нами, щоб отримати демо-доступ.
Чому стандартний VaR недооцінює ризик криптопортфеля?
Крипторинок демонструє важчі хвости розподілу доходностей порівняно з нормальним. Наприклад, під час краху LUNA або FTX денні збитки перевищували 30%, що при нормальному розподілі практично неможливо. Параметричний VaR на нормальному розподілі пропускає такі сценарії. Ми використовуємо Student's t-розподіл для апроксимації хвостів та Extreme Value Theory (EVT) для екстремальних подій. GARCH-модель додатково враховує кластеризацію волатильності. Це підвищує точність оцінки на 40% порівняно з класичним підходом.
Які методи VaR ми використовуємо?
Historical Simulation VaR — найбільш інтуїтивний та прозорий:
import numpy as np import pandas as pd from scipy import stats class HistoricalVaR: def __init__(self, confidence_level=0.95, lookback_days=252): self.confidence = confidence_level self.lookback = lookback_days def calculate(self, portfolio_value, positions, price_history): portfolio_returns = [] for i in range(1, len(price_history)): daily_pnl = 0 for symbol, qty in positions.items(): if symbol in price_history.columns: prev_price = price_history[symbol].iloc[i-1] curr_price = price_history[symbol].iloc[i] daily_pnl += qty * (curr_price - prev_price) portfolio_returns.append(daily_pnl / portfolio_value) portfolio_returns = np.array(portfolio_returns) var_pct = np.percentile(portfolio_returns, (1 - self.confidence) * 100) var_usd = abs(var_pct) * portfolio_value return { 'var_pct': var_pct, 'var_usd': var_usd, 'confidence': self.confidence, 'horizon_days': 1 } Parametric (Variance-Covariance) VaR — швидкий, але потребує нормальності:
def parametric_var(positions, prices, cov_matrix, confidence=0.95, horizon=1): weights = np.array([positions[s] * prices[s] for s in positions.keys()]) portfolio_value = weights.sum() weights_pct = weights / portfolio_value portfolio_variance = weights_pct @ cov_matrix @ weights_pct portfolio_std = np.sqrt(portfolio_variance * horizon) z_score = stats.norm.ppf(1 - confidence) var_pct = z_score * portfolio_std var_usd = abs(var_pct) * portfolio_value return var_usd Monte Carlo VaR — найбільш точний для крипти, враховує fat tails через t-розподіл:
def monte_carlo_var(portfolio_value, returns_history, n_simulations=10000, confidence=0.95, horizon=1): mean = returns_history.mean() std = returns_history.std() simulated_returns = np.random.normal(mean, std, (n_simulations, horizon)) simulated_pnl = portfolio_value * simulated_returns.sum(axis=1) var = np.percentile(simulated_pnl, (1 - confidence) * 100) return abs(var) Для врахування fat tails замінюємо нормальний розподіл на t-розподіл Стьюдента з малим числом ступенів свободи (df = 3–5). Monte Carlo VaR до 3 разів точніший за параметричний для криптовалют з fat tails.
Що краще: історичний чи Monte Carlo?
Historical VaR у 2 рази швидший за Monte Carlo, але Monte Carlo у 3 рази точніший для крипти. Компонентний VaR ефективніший за стандартний на 30% для виявлення недиверсифікованих позицій.
| Метод | Швидкість | Точність для крипти | Складність |
|---|---|---|---|
| Historical | Висока | Середня (минуле ≠ майбутнє) | Низька |
| Parametric | Дуже висока | Низька (нормальне припущення) | Середня |
| Monte Carlo | Низька | Висока (гнучкість розподілу) | Висока |
Як ми перевіряємо точність моделі?
Використовуємо Kupiec test — біноміальний тест кількості перевищень VaR:
def kupiec_test(var_predictions, actual_returns, confidence=0.95): violations = actual_returns < -var_predictions n_violations = violations.sum() n_total = len(actual_returns) expected_violations = n_total * (1 - confidence) p_value = stats.binom_test(n_violations, n_total, 1 - confidence) return { 'n_violations': n_violations, 'expected_violations': expected_violations, 'violation_rate': n_violations / n_total, 'p_value': p_value, 'model_valid': p_value > 0.05 } Якщо p-value < 0.05, модель відхиляється — ми коригуємо параметри або переходимо до складнішої моделі (GARCH, EVT). Ми проводимо 500+ симуляцій на історичних даних, обчислюємо violation rate та порівнюємо з очікуваним. При відхиленні більш ніж на 1% модель відправляється на доопрацювання.
Компонентний VaR для оптимізації портфеля
Маржинальний VaR показує внесок кожної позиції в загальний ризик:
def component_var(positions, cov_matrix, portfolio_var): weights = np.array(list(positions.values())) weights_pct = weights / weights.sum() marginal = cov_matrix @ weights_pct / portfolio_var component = weights_pct * marginal return dict(zip(positions.keys(), component)) Це дозволяє виявити активи, які додають найбільший ризик, і при необхідності хеджувати або диверсифікувати.
Етапи розробки системи VaR
| Етап | Тривалість | Результат |
|---|---|---|
| Аналітика | 1–3 дні | Аудит портфеля, збір даних |
| Проектування | 3–5 днів | Вибір методів, архітектура |
| Реалізація | 1–4 тижні | Код, інтеграція, алерти |
| Тестування | 1 тиждень | Backtesting, стрес-тести |
| Деплой | 1–3 дні | Розгортання, документація |
Що входить у розробку системи VaR під ключ
- Модуль розрахунку VaR/CVaR (3 методи) з можливістю вибору розподілу
- Дашборд real-time моніторингу з графіками та алертами (Telegram, email)
- Backtesting модуль з Kupiec test та візуалізацією порушень
- Компонентний VaR для оптимізації портфеля
- Документація: опис моделі, інструкція з експлуатації
- Навчання команди (2 години онлайн)
- Підтримка протягом 30 днів після деплою
Строки та вартість
Строки розробки — від 2 до 8 тижнів залежно від складності портфеля та необхідної точності. Вартість розраховується індивідуально після безкоштовного аудиту ваших даних та задач. Оцінимо проект протягом 2 робочих днів. Потенційна економія за рахунок зниження неочікуваних збитків сягає десятків тисяч доларів на рік.
Як обрати підходящий метод VaR?
Вибір методу залежить від розміру портфеля, частоти торгівлі та доступних історичних даних. Для невеликих портфелів з частою ребалансировкою підходить історичний VaR. Для великих інституційних портфелів краще Monte Carlo з t-розподілом. Параметричний VaR використовуємо тільки для попередньої оцінки. Рекомендуємо тестувати всі три методи та порівнювати результати.
Чому ми?
Більш ніж 5 років досвіду в блокчейн-розробці та DeFi risk management, 30+ реалізованих проектів у сфері смарт-контрактів та аналітики. Гарантуємо відповідність найкращим практикам risk management та прозорість коду. Замовте консультацію для аналізу вашого портфеля — і ви отримаєте інструмент, який не просто рахує ризик, а допомагає його контролювати.







