Управление рисками с помощью VaR и CVaR

Количественное управление рисками на Python

Jamsheed Shorish

Computational Economist

Управление рисками с помощью современной теории портфеля

  • Эффективный портфель
    • Веса портфеля максимизируют доходность при заданном уровне риска
  • Эффективная граница: множество точек (риск, доходность), порождённых различными эффективными портфелями
    • Каждая точка = оптимизация весов портфеля
  • Построение эффективного портфеля/границы: Современная теория портфеля

График эффективной границы

Количественное управление рисками на Python

Включение Value at Risk в MPT

  • Современная теория портфеля (MPT): оптимизация «среднее–дисперсия»
    • Максимальная ожидаемая доходность
    • Уровень риска (волатильность) задан
    • Целевая функция: ожидаемая доходность
  • VaR/CVaR: измеряют риск по распределению убытков
  • Адаптация MPT: оптимизация по распределению убытков вместо ожидаемой доходности
Количественное управление рисками на Python

Новая цель: минимизация CVaR

  • Изменение целевой функции оптимизации портфеля
    • Цель «среднее–дисперсия»: максимизировать ожидаемую среднюю доходность
    • Цель CVaR: минимизировать ожидаемые условные потери при заданном уровне доверия
  • Пример: распределение убытков
    • VaR: максимальный убыток с вероятностью 95%
    • Оптимизация: веса портфеля, минимизирующие CVaR
    • CVaR: ожидаемый убыток при потерях не менее VaR (худшие 5% случаев)
  • Поиск минимального ожидаемого убытка в худших 100% − 95% = 5% возможных исходов
Количественное управление рисками на Python

Задача управления рисками

  • Определить оптимальные веса портфеля $w^\star$ как решение задачи

cvar_minimization

  • Напомним: $f(x)$ — функция плотности вероятности убытков портфеля

  • PyPortfolioOpt: выбрать минимизацию CVaR в качестве новой целевой функции

Количественное управление рисками на Python

Минимизация CVaR с помощью PyPortfolioOpt

  • Создать объект EfficientCVaR с доходностями активов returns
  • Вычислить оптимальные веса портфеля с помощью метода .min_cvar()

 

ec = pypfopt.efficient_frontier.EfficientCVaR(None, returns)

optimal_weights = ec.min_cvar()
Количественное управление рисками на Python

Управление рисками: «среднее–дисперсия» и CVaR

  • Портфель минимальной волатильности «среднее–дисперсия», активы инвестиционных банков 2005–2010 гг.
ef = EfficientFrontier(None, e_cov)

min_vol_weights = ef.min_volatility()
print(min_vol_weights)
{'Citibank': 0.0,
 'Morgan Stanley': 5.0784330940519306e-18,
 'Goldman Sachs': 0.6280157234640608,
 'J.P. Morgan': 0.3719842765359393}
Количественное управление рисками на Python

Управление рисками: «среднее–дисперсия» и CVaR

  • Портфель с минимальным CVaR, активы инвестиционных банков 2005–2010 гг.
ec = pypfopt.efficient_frontier.EfficientCVaR(None, returns)
min_cvar_weights = ec.min_cvar()

print(min_cvar_weights)

 

{'Citibank': 0.0,
 'Morgan Stanley': 0.0,
 'Goldman Sachs': 0.669324359403484,
 'J.P. Morgan': 0.3306756405965026}
Количественное управление рисками на Python

Давайте потренируемся!

Количественное управление рисками на Python

Preparing Video For Download...