Я создаю программу для нахождения оптимального веса отдельных акций в портфеле, чтобы найти портфели с наибольшей доходностью / stdev и наименьшим взвешенным stdev, после использования вызова минимизации scipy, который возвращает Type Error.Использование 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)