Розроблення системи контролю максимальної просадки
Максимальна просадка (Maximum Drawdown, MDD) — найбільше зниження від піку до дна портфеля за період. Це ключова метрика ризику: трейдер може пережити багато поганих періодів, але катастрофічна просадка психологічно та фінансово руйнівна.
Розрахунок просадки
import numpy as np
def calculate_max_drawdown(equity_curve):
equity = np.array(equity_curve)
peak = np.maximum.accumulate(equity)
drawdown = (equity - peak) / peak
max_drawdown = drawdown.min()
# Знайти період максимальної просадки
end_idx = drawdown.argmin()
start_idx = equity[:end_idx].argmax()
return {
'max_drawdown': max_drawdown,
'start_date_idx': start_idx,
'end_date_idx': end_idx,
'drawdown_duration': end_idx - start_idx
}
def calculate_current_drawdown(equity_history):
peak = max(equity_history)
current = equity_history[-1]
return (current - peak) / peak
Рівні реакції системи
Система працює за принципом світлофора:
Зелений (просадка < 50% ліміту): нормальна торгівля.
Жовтий (50–75% ліміту): попередження. Зменшити розмір позиції на 25%.
Помаранчевий (75–90% ліміту): серйозне попередження. Зменшити розмір на 50%. Тільки високоякісні сигнали.
Червоний (> 90% ліміту): майже досягнув ліміту. Закрити половину відкритих позицій.
Стоп (= 100% ліміту): автоматичне закриття всіх позицій. Повна зупинка торгівлі до ручного підтвердження.
class DrawdownController:
LEVELS = [
(0.50, 'yellow', 0.75), # при 50% від ліміту: торгуйте на 75% розміру
(0.75, 'orange', 0.50),
(0.90, 'red', 0.25),
(1.00, 'halt', 0.00)
]
def __init__(self, max_drawdown_limit=0.15):
self.limit = max_drawdown_limit
self.peak_equity = None
def update_and_check(self, current_equity):
if self.peak_equity is None or current_equity > self.peak_equity:
self.peak_equity = current_equity
current_dd = (self.peak_equity - current_equity) / self.peak_equity
dd_ratio = current_dd / self.limit # як частка від ліміту
for threshold, level, size_mult in reversed(self.LEVELS):
if dd_ratio >= threshold:
return {
'level': level,
'current_dd': current_dd,
'dd_ratio': dd_ratio,
'size_multiplier': size_mult,
'halt': level == 'halt'
}
return {'level': 'green', 'size_multiplier': 1.0, 'halt': False}
Відстеження відновлення просадки
Час відновлення: скільки часу знадобилося для відновлення після попередніх просадок. Допомагає оцінити якість стратегії.
Коефіцієнт відновлення: загальний прибуток / максимальна просадка. Показує, наскільки система «окупає» ризик.
Підводний графік: графік часу перебування портфеля у просадці. Важливий інструмент психологічної оцінки для трейдера.
Калібрування лімітів
Типові значення максимальної просадки за типом стратегії:
| Тип стратегії | Рекомендований ліміт MDD |
|---|---|
| Консервативна (trend following) | 15–20% |
| Помірна (mean reversion) | 10–15% |
| Агресивна (HFT, scalping) | 5–8% |
| Маркет-мейкинг | 3–5% |
Розробляємо систему контролю просадки з багаторівневою реакцією, автоматичним зменшенням позицій, автоматичним вимикачем-зупинком та звітністю за часом відновлення.







