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

Введение в анализ портфеля на Python

Charlotte Werger

Data Scientist

Ожидаемый риск и доходность на основе исторических данных

$$

  • Средние исторические доходности и историческая дисперсия портфеля не являются точными оценками mu и Sigma
  • Веса, полученные при оптимизации портфеля, не гарантируют хороших результатов на будущих данных

$$ Шутка про то, что история повторяется

Введение в анализ портфеля на Python

Исторические данные

Временной ряд, изменяющийся со временем

Введение в анализ портфеля на Python

Экспоненциально взвешенная доходность

$$

  • Необходимы более точные меры риска и доходности
  • Экспоненциально взвешенные риск и доходность придают больший вес последним наблюдениям
  • На графике: экспоненциальная скользящая средняя — наибольший вес у наблюдения t-1

Веса при расчёте экспоненциально взвешенной доходности

Введение в анализ портфеля на Python

Экспоненциально взвешенная ковариация

$$

  • Экспоненциальная ковариационная матрица придаёт больший вес последним данным
  • На графике: экспоненциально взвешенная волатильность (чёрный) лучше отслеживает реальную волатильность, чем стандартная (синий)

$$ Сравнение экспоненциально взвешенной и обычной ковариации с фактической

1 Source: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Введение в анализ портфеля на 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
Введение в анализ портфеля на Python

Экспоненциально взвешенная ковариация

from pypfopt import risk_models
# Exponentially weighted covariance
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Введение в анализ портфеля на Python

Использование риска снижения стоимости в оптимизации

$ $

  • Вспомните коэффициент Сортино: он использует дисперсию только отрицательных доходностей
  • PyPortfolioOpt позволяет применять полуковариацию в оптимизации — меру риска снижения стоимости:

$ $ Расчёт риска снижения стоимости

Введение в анализ портфеля на 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
Введение в анализ портфеля на Python

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

Введение в анализ портфеля на Python

Preparing Video For Download...