Ярослав Суков – Стресс-тестирование портфелей: готовимся к кризисам (страница 8)
Tail-risk: философия и практика
Tail-risk — это не метрика, а целая философия управления рисками. Ее суть: мы не можем предсказать кризис, но мы можем застраховаться от него.
Инвестор, осознающий tail-risk:
- Покупает опционы вне денег (deep OTM puts) на индекс. Они дешевы, и в обычные дни сгорают. Но в день краха они приносят 1000-кратную прибыль, которая компенсирует потери портфеля.
- Держит кэш (10-20%) не как «неэффективный актив», а как «страховку от ликвидного шока».
- Избегает стратегий с «короткой волатильностью» (продажа опционов), которые имеют положительную доходность в обычные дни, но взрываются в кризис.
Пример из реальности: Фонд Universa Investments (советник — Талеб) построил стратегию на покупке дешевых опционов. В 2008 году, когда S&P упал на 38%, фонд Universa заработал 115% (да, плюс 115% в год краха). Они потеряли деньги в спокойные годы (опционы сгорали), но пережили кризис с огромной прибылью.
Как применить tail-risk в вашем портфеле:
- Выделите 1-3% портфеля на покупку очень дешевых опционов «put» на индекс (страйк на 20-30% ниже текущей цены, экспирация 6-12 месяцев).
- Считайте эти 1-3% не инвестицией, а страховой премией. Они могут обнулиться. Но если рынок упадет на 30%, эти опционы вырастут в 10-20 раз и спасут ваш портфель.
Монте-Карло симуляции
От подбрасывания монет к моделированию апокалипсиса
Название происходит от казино в Монако. Метод Монте-Карло — это численное моделирование случайных процессов. Вместо того чтобы решать сложные аналитические уравнения, вы просто тысячи раз разыгрываете случайные сценарии и смотрите на результат.
Базовый алгоритм:
1. Задайте вероятностные распределения для всех факторов (доходности активов, волатильность, корреляции).
2. Сгенерируйте один случайный сценарий (вытяните значения из распределений).
3. Рассчитайте стоимость портфеля в этом сценарии.
4. Повторите шаги 2-3 N раз (N = 10 000, 100 000, 1 млн).
5. Постройте гистограмму конечных стоимостей портфеля. Найдите квантили, средние, хвосты.
Пример кода на Python (упрощенный, но работающий)
python
import numpy as np
import pandas as pd
# Параметры портфеля: два актива
weights = np.array([0.6, 0.4]) # 60% акции, 40% облигации
expected_returns = np.array([0.08, 0.04]) # годовые ожидаемые доходности
volatilities = np.array([0.20, 0.08]) # годовые волатильности
correlation = 0.2 # корреляция между активами
cov_matrix = np.array([[0.20**2, 0.20*0.08*correlation],
[0.20*0.08*correlation, 0.08**2]])
# Параметры симуляции
n_simulations = 100000
horizon_days = 10
annual_trading_days = 252
mu_daily = expected_returns / annual_trading_days
cov_daily = cov_matrix / annual_trading_days
# Генерация случайных доходностей (многомерное нормальное)
returns_sim = np.random.multivariate_normal(mu_daily, cov_daily,
size=(n_simulations, horizon_days))
# Совокупная доходность за горизонт
cumulative_returns = np.exp(np.sum(returns_sim, axis=1)) - 1
portfolio_returns = cumulative_returns @ weights
# Метрики
VaR_95 = np.percentile(portfolio_returns, 5) # левый хвост 5%
ES_95 = portfolio_returns[portfolio_returns <= VaR_95].mean()
print(f"VaR 95% (10 дней): {VaR_95:.2%}")
print(f"Expected Shortfall 95%: {ES_95:.2%}")
Что делает этот код: Симулирует 100 000 различных 10-дневных путей для портфеля из акций и облигаций, учитывая корреляцию. Затем вычисляет VaR и ES.
Когда Монте-Карло незаменим
1. Нелинейные активы (опционы, конвертируемые облигации, structured products). Их цена нелинейно зависит от базового актива. Аналитических формул нет — только симуляция.
2. Сложные зависимости (не нормальные, копулы). Вы можете генерировать случайные величины из t-распределения или использовать копулы, чтобы смоделировать «хвостовую зависимость» (когда активы падают вместе сильнее, чем растут вместе).
3. Пути зависимости (path-dependence). Некоторые стратегии зависят от *последовательности* доходностей, а не только от конечной точки. Монте-Карло это позволяет.
4. Оценка хвостовых мер (CVaR, tail beta). Аналитически их трудно вычислить для сложных портфелей. Монте-Карло дает численную оценку.
Ограничения и подводные камни
- Garbage in, garbage out. Если вы задали неверные распределения (например, нормальные, а должны быть с толстыми хвостами), результат будет красивым, но ложным.
- Вычислительная сложность. Для оценки хвостов 99.9% нужно не 10 000 симуляций, а миллионы. Иначе в хвост просто не попадает достаточное количество точек.
- Проблема размерности. С ростом числа активов ковариационная матрица становится огромной и трудно оцениваемой.
- Стационарность. Монте-Карло предполагает, что распределения не меняются со временем. Но в кризис волатильность растет, корреляции скачут. Нужны режим-переключающие модели.
Продвинутая техника: Симуляция толстых хвостов через t-распределение
python
from scipy.stats import t
# Вместо многомерного нормального используем многомерное t
# с 3 степенями свободы (очень толстые хвосты)
df = 3
returns_sim_t = np.random.multivariate_normal(mu_daily, cov_daily,