我的目标是计算投资组合的标准差。
我生成了一个由 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
虽然这有效,但需要很长时间并且并不优雅。我希望有人能够提出一些更有效的建议。
提前致谢
最佳答案
我不是 100% 确定,但请尝试:
portfolio_vol = rand_port_wts.apply(lambda x: np.dot(x.T, np.dot(cm, x)), axis=1)
其中 cm 是协方差矩阵
关于python - 有没有办法在 python pandas 中向量化投资组合标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59462628/