首页 > 解决方案 > Python - 对风险的边际贡献

问题描述

有人可以帮助我解决以下问题,因为我已经挣扎了一段时间。

对风险的边际贡献= 要找到每种资产的边际贡献,请取权重向量和协方差矩阵的叉积除以投资组合标准差。

现在将每个资产的边际贡献乘以权重向量以获得总贡献。然后我们可以将资产贡献相加,并确保它等于总投资组合标准差。

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

投资组合的标准差只是其方差的平方根

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)

标签: pythonmatrixmultiplication

解决方案


如果您将 Relativeweights = Portweights 等同起来,那么乘法将得出您期望的答案。


推荐阅读