Python 中 N 项资产的投资组合的投资组合方差

发布于 2024-12-04 16:47:55 字数 1958 浏览 0 评论 0原文

投资组合方差计算如下:

port_var = W'_p * S * W_p

对于具有 N 资产的投资组合,其中

W'_p = transpose of vector of weights of stocks in portfolios
S = sample covariance matrix
W_p = vector of weights of stocks in portfolios

我有以下 numpy 矩阵。

投资组合中股票权重的数组(向量)(有10只股票):

weights = np.array(
     [[ 0.09],
      [ 0.05],
      [ 0.15],
      [ 0.10],
      [ 0.15],
      [ 0.15],
      [ 0.08],
      [ 0.08],
      [ 0.1 ],
      [ 0.05]])

股票收益的协方差矩阵:

covar = np.array([[ 0.00154474  0.00079555  0.00099691  0.00052596  0.0005363   0.00062005
0.00064031  0.00037494  0.00018826  0.00132809],
[ 0.00079555  0.00287429  0.00058536  0.00091774  0.00046885  0.00110434
0.00137141  0.00046724  0.00030414  0.0016615 ],
[ 0.00099691  0.00058536  0.00155757  0.00056336  0.00052395  0.00060104
0.00057223  0.00021365  0.00017057  0.00130247],
[ 0.00052596  0.00091774  0.00056336  0.00126312  0.00031941  0.00088137
0.00024493  0.00025136  0.00011519  0.00135475],
[ 0.0005363   0.00046885  0.00052395  0.00031941  0.00054093  0.00045649
0.00042927  0.00021928  0.00016835  0.00093471],
[ 0.00062005  0.00110434  0.00060104  0.00088137  0.00045649  0.00133081
0.00060353  0.0003967   0.00024983  0.00168281],
[ 0.00064031  0.00137141  0.00057223  0.00024493  0.00042927  0.00060353
0.00468731  0.00059557  0.00020384  0.00078669],
[ 0.00037494  0.00046724  0.00021365  0.00025136  0.00021928  0.0003967
0.00059557  0.00082333  0.00017191  0.00066816],
[ 0.00018826  0.00030414  0.00017057  0.00011519  0.00016835  0.00024983
0.00020384  0.00017191  0.00036348  0.0004505 ],
[ 0.00132809  0.0016615   0.00130247  0.00135475  0.00093471  0.00168281
0.00078669  0.00066816  0.0004505   0.00530036]])

当我计算时,

weights.T * covar * weights

结果是一个与covar大小相同的数组。我是投资组合理论的新手,但我认为投资组合的方差应该是标量(单个值)。

有没有人有这方面的经验可能会有所帮助?

Portfolio variance is calculated as:

port_var = W'_p * S * W_p

for a portfolio with N assest where

W'_p = transpose of vector of weights of stocks in portfolios
S = sample covariance matrix
W_p = vector of weights of stocks in portfolios

I have the following numpy matrixes.

Array (vector) of weights of stocks in the portfolio (there are 10 stocks):

weights = np.array(
     [[ 0.09],
      [ 0.05],
      [ 0.15],
      [ 0.10],
      [ 0.15],
      [ 0.15],
      [ 0.08],
      [ 0.08],
      [ 0.1 ],
      [ 0.05]])

Covariance matrix of stock returns:

covar = np.array([[ 0.00154474  0.00079555  0.00099691  0.00052596  0.0005363   0.00062005
0.00064031  0.00037494  0.00018826  0.00132809],
[ 0.00079555  0.00287429  0.00058536  0.00091774  0.00046885  0.00110434
0.00137141  0.00046724  0.00030414  0.0016615 ],
[ 0.00099691  0.00058536  0.00155757  0.00056336  0.00052395  0.00060104
0.00057223  0.00021365  0.00017057  0.00130247],
[ 0.00052596  0.00091774  0.00056336  0.00126312  0.00031941  0.00088137
0.00024493  0.00025136  0.00011519  0.00135475],
[ 0.0005363   0.00046885  0.00052395  0.00031941  0.00054093  0.00045649
0.00042927  0.00021928  0.00016835  0.00093471],
[ 0.00062005  0.00110434  0.00060104  0.00088137  0.00045649  0.00133081
0.00060353  0.0003967   0.00024983  0.00168281],
[ 0.00064031  0.00137141  0.00057223  0.00024493  0.00042927  0.00060353
0.00468731  0.00059557  0.00020384  0.00078669],
[ 0.00037494  0.00046724  0.00021365  0.00025136  0.00021928  0.0003967
0.00059557  0.00082333  0.00017191  0.00066816],
[ 0.00018826  0.00030414  0.00017057  0.00011519  0.00016835  0.00024983
0.00020384  0.00017191  0.00036348  0.0004505 ],
[ 0.00132809  0.0016615   0.00130247  0.00135475  0.00093471  0.00168281
0.00078669  0.00066816  0.0004505   0.00530036]])

When I compute

weights.T * covar * weights

The result is an array the same size as covar. I am new to portfolio theory but I would imagine that the variance of the portfolio should be a scalar (single value).

Does anyone have experience with this that might help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梓梦 2024-12-11 16:47:55
np.dot(weights.T,np.dot(covar,weights))
# array([[ 0.00064654]])

对于 2D numpy 数组,np.dot 相当于矩阵乘法。

对于 2D 数组 np.dotted 和 1D 数组,np.dot 相当于矩阵向量乘法。

对于一维数组,np.dot 相当于内积。

对于 numpy 数组,* 执行逐元素乘法(如有必要,使用 广播 )。


weights.T*np.matrix(covar)*weights
#matrix([[ 0.00064654]])

或者,如果将 covar 转换为 np.matrix,则 * 相当于矩阵乘法。

np.dot(weights.T,np.dot(covar,weights))
# array([[ 0.00064654]])

For 2D numpy arrays, np.dot is equivalent to matrix multiplication.

For a 2D array np.dotted with a 1D array, np.dot is equivalent to matrix-vector multiplication.

For 1D arrays, np.dot is equivalent to the inner product.

For numpy arrays, the * performs element-wise multiplication (with broadcasting if necessary).


weights.T*np.matrix(covar)*weights
#matrix([[ 0.00064654]])

Alternatively, if you convert covar to a np.matrix, then * is equivalent to matrix multiplication.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文