пятница, 12 июня 2020 г.

Доходности с отрицательными значениями чистых активов


Как рассчитывается доходность, когда стоимость чистых активов становится отрицательной?

В «сказке о двух типах доходностей» мы выделили сходства и различия между простыми логарифмическими доходностями.

Положительная оценка

Мы создаем (в R) пример стоимости чистых активов для четырех временных значений:


> nav1 <- c(1000, 900, 950, 1010)
> nav1
[1] 1000  900  950 1010

Теперь мы можем вычислить логарифмические (непрерывные) доходности:

> lret1 <- diff(log(nav1))
> lret1
[1] -0.10536052  0.05406722  0.06124363

Для логарифмических доходностей сумма доходностей за субпериоды равна доходности за весь период:

> sum(lret1)
[1] 0.009950331
> diff(log(nav1[c(1,4)]))
[1] 0.009950331

Мы также можем вычислить простые доходности:

> sret1 <- nav1[-1]/nav1[-4] - 1
> sret1
[1] -0.10000000  0.05555556  0.06315789

Для простых доходностей объединение доходностей субпериодов немного сложнее:

> prod(sret1 + 1) - 1
[1] 0.01
> nav1[4]/nav1[1] - 1
[1] 0.01

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

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

Отрицательная стоимость чистых активов

До сих пор считалось, что вы не можете потерять больше, чем имеете.

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

> nav2 <- c(1000, 400, -200, 300)
> nav2
[1] 1000  400 -200  300

Мы можем попытаться рассчитать логарифмические доходности:

> lret2 <- diff(log(nav2))
Warning message:
In log(nav2) : NaNs produced
> lret2
[1] -0.9162907        NaN        NaN

NaN обозначает Not-a-Number - то есть неопределенное значение.

Концепция, которую мы получаем из этого, состоит в том, что отрицательная чистая стоимость активов представляет собой черную дыру - когда мы пересекаем этот горизонт событий, возврата нет. Это может быть или не быть правдой.

Мы можем вычислить простые доходности:

> sret2 <- nav2[-1]/nav2[-4] - 1
> sret2
[1] -0.6 -1.5 -2.5

Вторая доходность, -1,5, является разумным ответом - за тот период мы потеряли в 1,5 раза больше того значения, с которого начали. Последняя доходность проблематична, хотя традиционное мышление говорит, что она должна быть положительной - это не так.

Работает ли агрегация времени для простых доходностей?

> prod(sret2 + 1) - 1
[1] -0.7
> nav2[4]/nav2[1] - 1
[1] -0.7

Да. Хотя мы сомневались, что-то идет хорошо.

Идем дальше

До сих пор в области с отрицательным значением у нас логарифмические доходности казались неприменимыми, а простые только немного со странностями.

Проблема с логарифмическими доходностями заключалась в том, что мы пытались взять логарифм отрицательного числа. Это можно сделать, если вы разрешите комплексные числа. Давай попробуем:

> lret2c <- diff(log(as.complex(nav2)))
> lret2c
[1] -0.9162907+0.000000i -0.6931472+3.141593i  
[3]  0.4054651-3.141593i

Теперь мы получаем что-то странное, но многообещающее:

> sum(lret2c)
[1] -1.203973+0i
> diff(log(nav2[c(1,4)]))
[1] -1.203973

Мнимая часть отслеживает, движемся ли мы от положительного к отрицательному, от отрицательного к положительному или никуда.

> nav3 <- c(1000, -200, -250, -100, 300)
> lret3c <- diff(log(as.complex(nav3)))
> lret3c
[1] -1.6094379+3.141593i  0.2231436+0.000000i
[3] -0.9162907+0.000000i  1.0986123-3.141593i
> nav4 <- c(1000, -200, -250, -400, 300)
> lret4c <- diff(log(as.complex(nav4)))
> lret4c
[1] -1.6094379+3.141593i  0.2231436+0.000000i
[3]  0.4700036+0.000000i -0.2876821-3.141593i

Знак действительной части логарифмической доходности определяется относительным размером абсолютных значений оценок.

Существует формула для переключения с логарифмических доходностей на простые. Что происходит, когда мы делаем это с нашими комплексными логарифмическими доходностями?

> sret2c <- exp(lret2c) - 1
> sret3c <- exp(lret3c) - 1
> sret4c <- exp(lret4c) - 1
> sret2c
[1] -0.6+0i -1.5+0i -2.5-0i
> sret3c
[1] -1.20+0i  0.25+0i -0.60+0i -4.00-0i
> sret4c
[1] -1.20+0i  0.25+0i  0.60+0i -1.75-0i
> nav3[-1]/nav3[-5] - 1
[1] -1.20  0.25 -0.60 -4.00
> nav4[-1]/nav4[-5] - 1
[1] -1.20  0.25  0.60 -1.75
> prod(sret2c + 1) - 1
[1] -0.7+0i
> prod(sret3c + 1) - 1
[1] -0.7-0i
> prod(sret4c + 1) - 1
[1] -0.7+0i

Это работает (по модулю странные знаки).

Однако точные нули проблематичны.

> nav5 <- c(1000, 200, 0, 300)
> diff(log(as.complex(nav5)))
[1] -1.609438+0i      -Inf+0i       Inf+0i
> sum(diff(log(as.complex(nav5))))
[1] NaN+0i
> nav5[-1]/nav5[-4] - 1
[1] -0.8 -1.0  Inf
> prod(nav5[-1]/nav5[-4]) - 1
[1] NaN

Красивое уравнение

Сложные значения логарифмических доходностей могут напомнить вам о том, что некоторые люди считают самым красивым уравнением в математике:

e + 1 = 0

известное как уравнение Эйлера.

Резюме

Лучше сохранять положительные значения активов.

Приложение R

Более общий способ вычисления простых доходностей (один из многих):

tail(nav1, -1)/head(nav1, -1) - 1

Эта форма работает не только с векторами, но и с матрицами, где строки соответствуют временам, а столбцы являются активами (или портфелями).

Комментариев нет:

Отправить комментарий