我的目标是计算投资组合的标准差。
我已经生成了由23只股票组成的随机加权投资组合:
X = np.random.dirichlet(np.ones(23),size=1000)
rand_port_wts = pd.DataFrame(X, columns=data.columns)
矩阵为:(1000,23)
我已经生成了一个协方差表:
annual_sec_std_deviation = (daily_sec_return.std()) * np.sqrt(num_trade_dys_py)
矩阵为:(23,23)
由于矩阵的形状,可以理解,我得到一个值错误:
ValueError: shapes (23,23) and (1000,23) not aligned: 23 (dim 1) != 1000 (dim 0)
我能想到的解决问题的唯一方法是使用循环传递投资组合权重数据帧(rand_port_wts)的1行:
tbl = []
for i in range(1000):
tbl.append(np.sqrt(np.dot(rand_port_wts.loc[i].T, np.dot(annual_sec_covariance, rand_port_wts.loc[i]))))
tbl
虽然可行,但需要花费很长时间,而且不够优雅。我希望有人可以提出一些更有效率的建议。
预先感谢
答案 0 :(得分:2)
我不是100%肯定在这里,但是请尝试:
portfolio_vol = rand_port_wts.apply(lambda x: np.dot(x.T, np.dot(cm, x)), axis=1)
其中cm是协方差矩阵