Ласкаво просимо!

Кількісне управління ризиками в Python

Dr. Jamsheed Shorish

Computational Economist

Про мене

  • Обчислювальний економіст
  • Спеціалізація:
    • оцінювання вартості активів
    • фінансові технології («FinTech»)
    • комп'ютерні застосунки в економіці та фінансах
  • Співвикладач курсу «Economic Analysis of the Digital Economy» в ANU
  • Shorish Research (Бельгія): обчислювальні бізнес-рішення
Кількісне управління ризиками в Python

Що таке кількісне управління ризиком?

  • Кількісне управління ризиком: вивчення вимірюваної невизначеності
  • Невизначеність:
    • Майбутні результати невідомі
    • Вони впливають на планування
  • Управління ризиком: зменшення наслідків небажаних подій
  • Вимірювана невизначеність: визначення чинників для вимірювання ризику
    • Приклад: страхування від пожежі. Які чинники підвищують імовірність пожежі?
  • Цей курс: зосереджено на ризику фінансового портфеля
Кількісне управління ризиками в Python

Управління ризиком і Глобальна фінансова криза

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

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

  • Фінансовий портфель
    • Набір активів із невизначеною майбутньою доходністю
    • Акції
    • Облігації
    • Валютні позиції («forex»)
    • Опціони на акції
  • Завдання: кількісно оцінити ризик, щоб керувати невизначеністю
    • Приймати оптимальні інвестиційні рішення
    • Максимізувати дохідність портфеля з урахуванням схильності до ризику
Кількісне управління ризиками в 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

Кількісна оцінка ризику

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

 

 

covariance = returns.cov()*252

print(covariance)

Приклад коваріаційної матриці між 4 активами

Кількісне управління ризиками в Python

Кількісна оцінка ризику

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

   

covariance = returns.cov()*252

print(covariance)

Приклад коваріаційної матриці з підсвіченими дисперсіями на діагоналі

Кількісне управління ризиками в Python

Кількісна оцінка ризику

  • Волатильність дохідності портфеля = ризик
  • Обчислюйте волатильність через коваріаційну матрицю
  • Використайте метод DataFrame .cov() для 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] # Припустимо, у портфелі чотири активи

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...