我希望使用python来分析金融数据。我正在使用下面的函数,但是我继续遇到一个值错误,到目前为止,我很难解释为什么我会遇到这个问题。
这个函数的预期结果是df_1包含5000个可能的投资组合,然后下一个函数将优化这些结果,然后我将绘制出有效的边界。
这就是问题所在..。
#定义回报投资组合
def return_portfolios(expected_returns, cov_matrix):
port_returns = []
port_volatility = []
stock_weights = []
selected = (expected_returns.axes)[0]
num_assets = len(selected)
num_portfolios = 5000
for single_portfolio in range(num_portfolios):
weights = np.random.random(num_assets)
weights /= np.sum(weights)
returns = np.dot(weights, expected_returns)
volatility = np.sqrt(np.dot(weights.T,np.dot(cov_matrix, weights)))
port_returns.append(returns)
port_volatility.append(volatility)
stock_weights.append(weights)
portfolio = {'Returns': port_returns, 'Volatility': port_volatility}
for counter, symbol in enumerate(selected):
portfolio[symbol + 'Weight'] = [Weight [counter] for Weight in stock_weights]
df = pd.Dataframe(portfolio)
column_order = ['Returns', 'Volatility'] + [stock +' Weight' for stock in selected]
df = df[column_order]
return df*我继续得到这个值错误。我不知道为什么。*
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-9-f1e87857141b> in <module>
1 #Plot Efficient Frontier
----> 2 df_1 = return_portfolios(daily_ER, covariance)
3
4 weights, returns, risks = optimal_portfolio(daily_ER[1:])
5
<ipython-input-3-d248522d6f87> in return_portfolios(expected_returns, cov_matrix)
14 weights /= np.sum(weights)
15 returns = np.dot(weights, expected_returns)
---> 16 volatility = np.sqrt(np.dot(weights.T,np.dot(cov_matrix, weights)))
17 port_returns.append(returns)
18 port_volatility.append(volatility)
<__array_function__ internals> in dot(*args, **kwargs)
ValueError: shapes (11,11) and (254,) not aligned: 11 (dim 1) != 254 (dim 0)发布于 2020-07-01 01:18:18
看起来你试图在两个矩阵之间执行点积。然而,一个具有(11,11)的形状,另一个具有形状(254,)。您需要确保第一个矩阵的列数等于第二个矩阵的raws数。
https://stackoverflow.com/questions/62668228
复制相似问题