我尝试使用scipy的最小化函数(财务投资组合优化)调用的numpy.float64的TypeError

时间:2018-12-29 05:29:10

标签: python pandas numpy scipy

我正在构建一个程序,以找到投资组合中单个股票的最佳权重,以找到最高收益/ 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)

0 个答案:

没有答案