Альтернативна оптимізація портфеля

Вступ до Portfolio Analysis у Python

Charlotte Werger

Data Scientist

Очікуваний ризик і дохідність на основі історичних даних

$$

  • Середні історичні доходності та історична дисперсія портфеля — неідеальні оцінки mu та Sigma
  • Тому ваги з оптимізації портфеля не гарантовано працюватимуть добре на майбутніх даних

$$ Жарт про «історія повторюється»

Вступ до Portfolio Analysis у Python

Історичні дані

Часові ряди змінюються з часом

Вступ до Portfolio Analysis у Python

Експоненційно зважені дохідності

$$

  • Потрібні кращі міри ризику й дохідності
  • Експоненційно зважені ризик і дохідність надають більше ваги найсвіжішим даним
  • Експоненційне ковзне середнє на графіку: найбільша вага спостереженню t-1

Ваги в розрахунку експоненційно зваженої дохідності

Вступ до Portfolio Analysis у Python

Експоненційно зважена коваріація

$$

  • Експоненційна коваріаційна матриця: надає більше ваги нещодавнім даним
  • На графіку: експоненційно зважена волатильність (чорна) краще відстежує реальну, ніж стандартна (синя)

$$ Порівняння експоненційно зваженої та звичайної коваріації з фактичною

1 Source: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Вступ до Portfolio Analysis у Python

Експоненційно зважені дохідності

from pypfopt import expected_returns
# Exponentially weighted moving average
mu_ema = expected_returns.ema_historical_return(df, 
                         span=252, frequency=252)
print(mu_ema)
symbol
XOM     0.103030
BBY     0.394629
PFE     0.186058
Вступ до Portfolio Analysis у Python

Експоненційно зважена коваріація

from pypfopt import risk_models
# Exponentially weighted covariance
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Вступ до Portfolio Analysis у Python

Використання ризику зниження в оптимізації

$ $

  • Згадайте коефіцієнт Сортіно: він використовує лише дисперсію від'ємних дохідностей
  • PyPortfolioOpt дозволяє використовувати семиковаріацію в оптимізації — це міра ризику зниження:

$ $ Розрахунок ризику зниження

Вступ до Portfolio Analysis у Python

Семиковаріація в PyPortfolioOpt

Sigma_semi = risk_models.semicovariance(df,     
                        benchmark=0, frequency=252)

print(Sigma_semi)
         XOM         BBY          MA         PFE
XOM     0.018939    0.008505    0.006568    0.004058
BBY     0.008505    0.016797    0.009133    0.004404
MA      0.006568    0.009133    0.018711    0.005373
PFE     0.004058    0.004404    0.005373    0.008349
Вступ до Portfolio Analysis у Python

Давайте потренуємось!

Вступ до Portfolio Analysis у Python

Preparing Video For Download...