Современная теория портфеля

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

Jamsheed Shorish

Computational Economist

Компромисс между риском и доходностью

  • Факторы риска: источники неопределённости, влияющие на доходность
  • Интуитивно: бо́льшая неопределённость (больше риска) компенсируется бо́льшей доходностью
  • Гарантировать доходность нельзя: нужна оценка ожидаемой доходности
    • среднеисторическая доходность: приближение к ожидаемой будущей доходности
Количественное управление рисками на Python

Склонность инвестора к риску

  • Опрос инвесторов: минимальная доходность при заданном уровне риска?
  • Ответ формирует «точку данных» профиля риска (риск, доходность)
  • Варьируем уровень риска => множество точек (риск, доходность)
  • Склонность к риску инвестора: задаёт количественную зависимость между риском и доходностью
Количественное управление рисками на Python

Выбор весов портфеля

  • Варьируем веса портфеля для заданного портфеля => получаем множество пар (риск, доходность)
  • Изменение весов — начало управления рисками!
  • Цель: изменить веса, чтобы максимизировать ожидаемую доходность при заданном уровне риска
    • Эквивалентно: минимизировать риск при заданной ожидаемой доходности
  • Изменение весов = корректировка подверженности риску инвестора
Количественное управление рисками на Python

Современная теория портфеля

  • Эффективный портфель: портфель с весами, обеспечивающими максимальную ожидаемую доходность при заданном уровне риска
  • Современная теория портфеля (MPT), 1952
    • Г. М. Марковиц (лауреат Нобелевской премии 1990)
  • Вектор весов эффективного портфеля $w^\star$ является решением:

Уравнения задачи оптимизации для нахождения эффективного портфеля

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

Эффективная граница

  • Вычисляем множество эффективных портфелей для разных уровней риска
  • Эффективная граница: множество пар (риск, доходность), порождённых эффективными портфелями
  • Библиотека PyPortfolioOpt: оптимизированные инструменты для MPT
    • Класс EfficientFrontier: строит один оптимальный портфель за раз
    • Класс Constrained Line Algorithm (CLA): строит всю эффективную границу
      • Требует ковариационную матрицу доходностей
      • Требует приближение к ожидаемой доходности: среднеисторическая доходность
Количественное управление рисками на Python

Портфель инвестиционного банка, 2005–2010

  • Ожидаемая доходность: исторические данные
  • Ковариационная матрица: Covariance Shrinkage повышает точность оценки
  • Объект Constrained Line AlgorithmCLA
  • Портфель минимальной дисперсии: cla.min_volatility()
  • Эффективная граница: cla.efficient_frontier()

 

expected_returns = mean_historical_return(prices)

efficient_cov = CovarianceShrinkage(prices).ledoit_wolf()
cla = CLA(expected_returns, efficient_cov)
minimum_variance = cla.min_volatility()
(ret, vol, weights) = cla.efficient_frontier()
Количественное управление рисками на Python

Визуализация эффективной границы

  • Диаграмма рассеяния пар (волатильность, доходность)

График эффективной границы в виде набора точек (риск, доходность)

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

Визуализация эффективной границы

  • Диаграмма рассеяния пар (волатильность, доходность)
  • Портфель минимальной дисперсии: наименьшая волатильность среди всех возможных эффективных портфелей

Портфель минимальной дисперсии, выделенный на графике эффективной границы

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

Визуализация эффективной границы

  • Диаграмма рассеяния пар (волатильность, доходность)
  • Портфель минимальной дисперсии: наименьшая волатильность среди всех возможных эффективных портфелей
  • Рост склонности к риску: движение вдоль границы

Движение вдоль эффективной границы, показанное стрелкой в направлении большего риска и большей доходности

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

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

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

Preparing Video For Download...