Добро пожаловать!

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

Dr. Jamsheed Shorish

Computational Economist

Об авторе

  • Вычислительный экономист
  • Специализация:
    • ценообразование активов
    • финансовые технологии («FinTech»)
    • компьютерные приложения в экономике и финансах
  • Со-инструктор курса «Экономический анализ цифровой экономики» в ANU
  • Shorish Research (Бельгия): вычислительные бизнес-приложения
Количественное управление рисками на Python

Что такое количественное управление рисками?

  • Количественное управление рисками: изучение измеримой неопределённости
  • Неопределённость:
    • Будущие результаты неизвестны
    • Результаты влияют на плановые решения
  • Управление рисками: снижение последствий неблагоприятных исходов
  • Измеримая неопределённость: выявление факторов для оценки риска
    • Пример: страхование от пожара. Какие факторы повышают его вероятность?
  • Этот курс: акцент на рисках, связанных с финансовым портфелем
Количественное управление рисками на Python

Управление рисками и мировой финансовый кризис

  • Великая рецессия (2007–2010)
    • Глобальные потери роста — более $2 трлн
    • США: потери благосостояния домохозяйств — около $10 трлн
    • Фондовые рынки США потеряли около $8 трлн в стоимости
  • Мировой финансовый кризис (2007–2009)
    • Масштабные изменения фундаментальной стоимости активов
    • Высокая неопределённость относительно будущей доходности
    • Значительная волатильность доходности активов
    • Управление рисками — ключевой фактор успеха или провала
Количественное управление рисками на Python

Краткое повторение: финансовые портфели

  • Финансовый портфель
    • Набор активов с неопределённой будущей доходностью
    • Акции
    • Облигации
    • Валютные активы (форекс)
    • Опционы на акции
  • Задача: количественно оценить риск для управления неопределённостью
    • Принимать оптимальные инвестиционные решения
    • Максимизировать доходность портфеля с учётом склонности к риску
Количественное управление рисками на Python

Измерение доходности

  • Доходность портфеля: взвешенная сумма доходностей отдельных активов
    • Библиотека анализа данных Pandas
    • DataFrame prices
    • Метод .pct_change()
    • Метод .dot() объекта returns
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
Количественное управление рисками на Python

Измерение риска

  • Волатильность доходности портфеля = риск
  • Вычислить волатильность через матрицу ковариаций
  • Использовать метод .cov() DataFrame объекта returns и аннуализировать

 

 

covariance = returns.cov()*252

print(covariance)

Пример матрицы ковариаций для 4 активов

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

Измерение риска

  • Волатильность доходности портфеля = риск
  • Вычислить волатильность через матрицу ковариаций
  • Использовать метод .cov() DataFrame объекта returns и аннуализировать
  • Диагональ матрицы covariance — дисперсии отдельных активов  

   

covariance = returns.cov()*252

print(covariance)

Пример матрицы ковариаций с выделенными дисперсиями на диагонали

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

Измерение риска

  • Волатильность доходности портфеля = риск
  • Вычислить волатильность через матрицу ковариаций
  • Использовать метод .cov() DataFrame объекта returns и аннуализировать
  • Диагональ матрицы covariance — дисперсии отдельных активов
  • Внедиагональные элементы матрицы covariance — ковариации между активами
covariance = returns.cov()*252

print(covariance)

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

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

Риск портфеля

  • Зависит от weights (весов) активов в портфеле
  • Дисперсия портфеля $\sigma_p^2$: $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • Матричное умножение в Python выполняется с помощью оператора @
  • Обычно используется стандартное отклонение, а не дисперсия
weights = [0.25, 0.25, 0.25, 0.25] # Assumes four assets in portfolio

portfolio_variance = np.transpose(weights) @ covariance @ weights
portfolio_volatility = np.sqrt(portfolio_variance)
Количественное управление рисками на Python

Временной ряд волатильности

  • Можно также рассчитать волатильность портфеля во времени
  • Используйте «окно» для вычисления волатильности за фиксированный период (например, неделя, 30-дневный «месяц»)
  • Series.rolling() создаёт скользящее окно
  • Наблюдайте тренд волатильности и возможные экстремальные события
windowed = portfolio_returns.rolling(30)

volatility = windowed.std()*np.sqrt(252) volatility.plot() .set_ylabel("Standard Deviation...")

График 30-дневного скользящего окна аннуализированной волатильности доходности

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

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

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

Preparing Video For Download...