Розробка системи управління ризиками (risk management)

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка системи управління ризиками (risk management)
Складний
від 2 тижнів до 3 місяців
Часті запитання

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

Етапи блокчейн-розробки

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

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

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

Управління ризиком — це не набір інструментів, а архітектура, яка пронизує всю торгову систему. Один неконтрольований ризик може знищити місяці прибуткової торгівлі. Система управління ризиками визначає, коли торгувати, скільки торгувати та коли повністю зупинитися.

Ієрархія ризиків

Ринковий ризик — збитки від несприятливого руху ціни. Керується через розміру позиції, стоп-лосс, диверсифікацію.

Ризик виконання — відхилення ціни виконання від очікуваної (ковзання). Особливо критично при високочастотній торгівлі та великих ордерах.

Ризик ліквідності — неможливість закрити позицію за розумною ціною. Актуально для позицій в малоліквідних активах.

Контрагентський ризик — ризик біржі (хак, банкрутство, нормативне заморозження). Вирішується диверсифікацією між кількома біржами та виведенням більшості коштів з бірж.

Операційний ризик — технічні збої, втрата з'єднання, помилки в коді. Вирішується надійною інфраструктурою, автоматичними вимикачами та моніторингом.

Ризик концентрації — надмірна залежність від одного активу або стратегії.

Рівні контролю ризику

Рівень угоди — контроль кожної окремої угоди:

class TradeRiskCheck:
    def __init__(self, max_position_size_pct=0.10, max_risk_per_trade_pct=0.02):
        self.max_position_pct = max_position_size_pct
        self.max_risk_pct = max_risk_per_trade_pct
    
    def validate(self, trade, portfolio_value, current_positions):
        # Перевірка 1: максимальний розмір позиції
        position_value = trade.qty * trade.price
        if position_value / portfolio_value > self.max_position_pct:
            return False, "Position size exceeds limit"
        
        # Перевірка 2: ризик на угоду
        trade_risk = abs(trade.price - trade.stop_loss) * trade.qty
        if trade_risk / portfolio_value > self.max_risk_pct:
            return False, "Risk per trade exceeds limit"
        
        # Перевірка 3: кореляція з поточним портфелем
        portfolio_corr = self.calculate_portfolio_correlation(
            trade.symbol, current_positions
        )
        if portfolio_corr > 0.8:
            return False, "Too correlated with existing positions"
        
        return True, "OK"

Рівень портфеля — контроль сукупного портфеля:

  • Максимальна кількість відкритих позицій (наприклад, 10)
  • Максимальна сукупна експозиція (наприклад, 80% капіталу)
  • Максимальна Net Delta (сума всіх дельт позицій)
  • Концентрація сектора: не більше 30% в одному секторі (DeFi, Layer-1 тощо)

Рівень сеансу — денні/тижневі обмеження:

  • Максимальне денне втрат: 3% депозиту → автоматична зупинка торгівлі
  • Максимальна тижнева просадка: 8% → потребує ручного втручання
  • Максимум угод на день: 20 → захист від перетрадування

Реалізація монітора ризику портфеля

from dataclasses import dataclass
from typing import List, Dict
import numpy as np

@dataclass
class Position:
    symbol: str
    qty: float
    avg_price: float
    stop_loss: float
    current_price: float
    
    @property
    def unrealized_pnl(self):
        return (self.current_price - self.avg_price) * self.qty
    
    @property
    def position_value(self):
        return self.current_price * self.qty
    
    @property
    def risk_amount(self):
        return abs(self.current_price - self.stop_loss) * self.qty

class PortfolioRiskMonitor:
    def __init__(self, initial_capital: float, config: dict):
        self.initial_capital = initial_capital
        self.peak_capital = initial_capital
        self.config = config
        self.positions: List[Position] = []
        self.daily_pnl = 0
        self.session_start_capital = initial_capital
    
    def update_capital(self, current_capital: float):
        self.peak_capital = max(self.peak_capital, current_capital)
        self.daily_pnl = current_capital - self.session_start_capital
    
    def get_current_drawdown(self, current_capital: float) -> float:
        return (self.peak_capital - current_capital) / self.peak_capital
    
    def check_circuit_breakers(self, current_capital: float) -> dict:
        alerts = {}
        
        # Перевірка просадки
        dd = self.get_current_drawdown(current_capital)
        if dd > self.config['max_drawdown']:
            alerts['max_drawdown'] = f"CRITICAL: Drawdown {dd:.1%} exceeded limit"
        
        # Перевірка щоденних втрат
        daily_loss_pct = -self.daily_pnl / self.session_start_capital
        if daily_loss_pct > self.config['max_daily_loss']:
            alerts['daily_loss'] = f"HALT: Daily loss {daily_loss_pct:.1%} exceeded"
        
        # Сукупна експозиція ризику
        total_risk = sum(p.risk_amount for p in self.positions)
        risk_pct = total_risk / current_capital
        if risk_pct > self.config['max_portfolio_risk']:
            alerts['portfolio_risk'] = f"WARNING: Total risk {risk_pct:.1%}"
        
        return alerts
    
    def get_correlation_matrix(self, price_data: Dict[str, list]) -> np.ndarray:
        symbols = list(price_data.keys())
        returns = {s: np.diff(np.log(price_data[s])) for s in symbols}
        return np.corrcoef([returns[s] for s in symbols])

Стрес-тестування та аналіз сценаріїв

Історичні сценарії: як би портфель поводився під час:

  • Краху в березні 2020 року (BTC -60% за тиждень)
  • Краху в травні 2021 року (BTC -50% за місяц)
  • Краху Terra/LUNA (>99% за 48 годин)
  • Банкрутства FTX (паніка на ринку -25%)

Гіпотетичні сценарії:

  • Усі активи коррелюють 0.9 (як під час кризи)
  • Ліквідність зникає (bid-ask spread ×10)
  • Одночасне спрацьовування всіх стопів
def stress_test_portfolio(positions, scenarios):
    results = {}
    for scenario_name, price_shocks in scenarios.items():
        total_pnl = 0
        for position in positions:
            shock = price_shocks.get(position.symbol, price_shocks.get('DEFAULT', 0))
            pnl = position.qty * position.current_price * shock
            total_pnl += pnl
        results[scenario_name] = total_pnl
    return results

Інтеграція VaR (Value at Risk)

Історичний VaR: при поточному портфелю з ймовірністю 95% максимальний однодневний збиток не перевищить X USD. Рраховується на основі історичних повернень портфеля за останні 252 дні.

Моніторинг у реальному часі

Панель приладів (Grafana + Prometheus):

  • Поточний P&L та просадка
  • Усі відкриті позиції з ризиком кожної
  • Сукупний ризик портфеля
  • Статус автоматичного вимикача
  • Прогрес-бар щоденних втрат

Сигналізація (Telegram Bot з рівнями пріоритету):

  • Жовтий: просадка > 50% від ліміту
  • Помаранчевий: просадка > 75% від ліміту
  • Червоний: автоматичний вимикач спрацював, торгівля зупинена

Журнал аудиту: кожне рішення ризик-системи (блокування ордера, спрацьовування автоматичного вимикача) фіксується з часовою міткою та причиною.

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

Risk Management System — це незалежний компонент, вбудований перед виконанням будь-якого ордера. Усі торгові боти та стратегії відправляють ордери через єдиний шлюз ризику:

Trading Strategy → Risk Gateway → Exchange API

Risk Gateway перевіряє всі ліміти, оновлює внутрішній стан, логує. При блокуванні повертає помилку з причиною.

Розробляємо повноцінну систему управління ризиками: перевірки на рівні угоди, моніторинг портфеля, автоматичні вимикачі, модуль стрес-тестування, панель приладів у реальному часі та сигналізація Telegram.