我正在构建一个程序,以找到投资组合中单个股票的最佳权重,以找到最高收益/ stdev和最低stdev加权投资组合,这是在使用scipy的Minimum调用时返回类型错误。到目前为止,在程序中使用Python 3.3和numpy
最初我没有将'stdev'设置为一个函数,并且在查看其他stackoverflow问题时,确定为使最小化工作,必须在函数上调用它,因此我将stdev变量转换为可解决NoneType的函数错误,但由于我的权重以浮点格式存储在数组中,因此现在出现TypeError。
最初,我建立了一个蒙特卡洛模拟来创建随机的投资组合权重,但是我想切入正题,只想解决有效的边界问题,我需要做的就是权重最小化,权重最小。最高回报/差异
...
输入
returns = data.pct_change() # Convert Daily Stock Price into Daily Returns
mean_daily_returns = returns.mean() # Calc Mean and Covar of Daily Returns
cov_matrix = returns.cov()
results = np.zeros((4+len(stocks)-1,252)) # Set-up array to hold results
weights = np.array(np.random.random(len(stocks)))
weights /= np.sum(weights) # Select Random Portfolio Weights
def stdev(weights):
stdev = np.sqrt(np.dot(weights.T, np.dot(cov_matrix,weights))) *
np.sqrt(252)
return stdev
stdev(weights)
print(stdev(weights))
minimized = minimize(stdev(weights),0) # <---- error is occuring on this line
输出
There are 3 stocks in this portfolio
(3, 3)
Symbols AAPL GOOG MSFT
Symbols
AAPL 0.000229 0.000105 0.000114
GOOG 0.000105 0.000218 0.000138
MSFT 0.000114 0.000138 0.000213
(3,)
<class 'numpy.ndarray'>
[0.12400823 0.45597011 0.42002166]
0.2026925801003433
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-52-621996e19fcf> in <module>()
46 stdev()
47 print(stdev())
---> 48 minimized = minimize(stdev(),0)