Python - предельный вклад в риск - PullRequest
1 голос
/ 04 февраля 2020

Может ли кто-нибудь помочь с нижеследующим, поскольку я некоторое время боролся.

Предельный вклад в риск = Чтобы найти предельный вклад каждого актива, возьмите перекрестный продукт вектора весов и матрицы ковариации делится на стандартное отклонение портфеля.

Теперь умножьте предельный вклад каждого актива на вектор весов, чтобы получить общий вклад. Затем мы можем суммировать вклады активов и убедиться, что они равны общему стандартному отклонению портфеля.

Relativeweights = np.array([0.02, -0.025, -0.015, 0.0, 0.02,0,0,0])
cov_matrix_a= 8x8 matrix
Port_volatility= 0.05882615906289199

Итак, я попробовал следующий код:

MCTAR=(np.dot(Relativeweights,cov_matrix_a))/Port_volatility
TCTPR=MCTAR*Relativeweights
np.sum(TCTPR, axis=0)

Это не сумма волатильности портфеля, так что не знаете, что не так?

Любая помощь приветствуется. Спасибо


Полный код ниже;

Извлечение доходов из CSV-файла

import numpy as np
import ST as STPL
Assetreturns = STPL.get_Asset_returns()

Построение ковариационной матрицы для ежедневных доходностей портфеля с помощью .cov () метод

cov_matrix_Assetreturns = Assetreturns.cov()
cov_matrix_Assetreturns

Годовая дневная ковариационная матрица со стандартными 252 торговыми днями

cov_matrix_a = cov_matrix_Assetreturns * 252
cov_matrix_a

Назначение относительных весов

Relativeweights = np.array([0.02, -0.025, -0.015, 0.0, 0.02,0,0,0])
Relativeweights

Назначение весов портфеля

Portweights = np.array([0.49, 0.15, 0.125, 0.215, 0.02, 0, 0,0])
Portweights

Стандартное отклонение портфеля - это просто квадрат root его дисперсии

Port_volatility = np.sqrt(np.dot(Portweights.T, np.dot(cov_matrix_a, Portweights)))
Port_volatility

Предельный вклад каждого актива, возьмите перекрестный продукт вектора весов и ковариационной матрицы, деленный на стандартное отклонение портфеля.

MCTAR=(np.dot(Relativeweights,cov_matrix_a))/Port_volatility

Теперь умножьте предельный вклад каждого актива на вектор весов, чтобы получить общий вклад. Затем мы можем суммировать вклады активов и убедиться, что они равны общему стандартному отклонению портфеля.

TCTPR=MCTAR*Relativeweights

np.sum(TCTPR, axis=0)

1 Ответ

0 голосов
/ 04 февраля 2020

Если вы приравниваете Relativeweights = Portweights, то умножения сработают до ожидаемого вами ответа.

...