[英]Portfolio Variance of a Portfolio of N Assets in Python
Portfolio variance is calculated as: 投资组合差异计算如下:
port_var = W'_p * S * W_p
for a portfolio with N assest where 对于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
I have the following numpy matrixes. 我有以下numpy矩阵。
Array (vector) of weights of stocks in the portfolio (there are 10 stocks): 投资组合中股票权重的数组(向量)(有10只股票):
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. 结果是一个与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? 有没有人有这方面的经验可能有帮助?
np.dot(weights.T,np.dot(covar,weights))
# array([[ 0.00064654]])
For 2D numpy arrays, np.dot
is equivalent to matrix multiplication. 对于2D numpy数组, np.dot
等效于矩阵乘法。
For a 2D array np.dotted with a 1D array, np.dot
is equivalent to matrix-vector multiplication. 对于使用1D数组编写的2D数组, np.dot
等效于矩阵向量乘法。
For 1D arrays, np.dot
is equivalent to the inner product. 对于1D数组, np.dot
相当于内部产品。
For numpy arrays, the *
performs element-wise multiplication (with broadcasting if necessary). 对于numpy数组, *
执行逐元素乘法(如果需要,可以进行广播 )。
weights.T*np.matrix(covar)*weights
#matrix([[ 0.00064654]])
Alternatively, if you convert covar
to a np.matrix
, then *
is equivalent to matrix multiplication. 另外,如果你转换covar
到np.matrix
,那么*
相当于矩阵乘法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.