Базовые показатели портфеля

В предыдущей статье мы рассказали про базовые показатели отдельного актива, которые интересны сами по себе. Для решения задач портфельных инвестиций (в частности практической реализации теории Г.Марковица, о которой мы расскажем в следующих статьях) бо’льший интерес представляют портфели и их показатели, которые расчитываются на основе входящих в них активов. В этой статье мы рассмотрим базовые показатели портфеля.

Итак, строго говоря портфель – это множество, состоящее из пар: , где – это актив из предыдущей статьи, и – вес актива, и в общем случае, но из соображений статистики, о которых мы расскажем в следующих статьях, не превышает .

Каждый показатель портфеля аналогичен по смыслу соответствующему показателю актива. И каждый показатель портфеля вычисляется на основе составляющих его активов.

Для избежания путаницы в обозначениях, далее мы будем обозначать показатель с верхним индексом , относящийся к портфелю, а с верхним индексом – относящийся к активу. Например, и – доходность портфеля и актива соответственно.

Доходность

Все определения мы дали в предыдущей статье. Здесь и далее приведём только формулы для вычислений:

Доходность (Rate of Return):

Накопленная доходность (Accumulated Rate of Return):

Реальная доходность (Real Rate of Return):

Накопленная реальная доходность (Real Accumulated Rate of Return):

Каждое из значений в Python вычисляется так:

> ror_p = (np.array([asset.rate_of_return() for asset in assets]) * weights).sum()
> aror_p = (ror_p + 1.).cumprod() - 1.
> ror_p_real = (ror_p + 1.) / (inflation + 1.).cumprod() - 1.
> aror_p_real = (aror_p + 1.) / (inflation_accumulated + 1.).cumprod() - 1.

Идея вычисления ror_p словами выражается так: массив накопленных доходностей каждого актива поэлементно умножается на соответствующий вес массива весов weights, а далее вычисляется сумма значений, равная накопленной доходности портфеля. Остальные значения вычисляются способом, знакомым из предыдущей статьи.

Этот код правильно отработает в контексте, в котором заранее определены:

class PortfolioAsset:
  def rate_of_return(): pass

  def compound_annual_growth_rate(): pass

  def risk(): pass

Конкретные реализации тел методов можно подставить из предыдущей статьи.

Риск

Вычисление месячного риск и риска, приведённого к году, выполняется ровно также, как и для актива:

Вычисление в Python:

> risk_p_monthly = ror_p.std()
> ror_p_mean = (1. + ror_p).mean()
> risk_p_yearly = np.sqrt(risk_p_monthly**2 + ror_p_mean**2)**12 - ror_p_mean**24)

Среднегодовая доходность

Среднегодовая доходность (CAGR) портфеля вычисляется по формуле:

где – рациональное число равное количеству лет. Вычисляется в Python:

Реальная среднегодовая доходность (Real CAGR) портфеля вычисляется по формуле:

Что после простых преобразований эквивалентно формуле:

Вычисляется в Python:

> rors_a = np.array([a.rate_of_return() for a in assets])
> cagr_p = (rors_a * weights + 1.) ** years_total - 1.
> cagr_p_real = (cagr_p + 1.) / (inflation_accumulated[-1] + 1.) - 1.