Я бы хотел настроить оптимизацию scipy, которая минимизирует дисперсию портфеля акций путем изменения весов акций, с учетом ограничения, что сумма весов равна единице.У меня возникают проблемы с размышлениями о том, как настроить параметры для оптимизации, поскольку количество параметров (весов) зависит от количества акций, введенных пользователем.
Моя наивная идея заключалась в том, что мне может понадобиться динамически создавать весовые переменные из списка, созданного пользователем, но, похоже, многим это проблематично.
Это приводит к получению желаемых значений изНеоптимизированный портфель с равным весом.
weightlist = []
for stock in stocksymbols:
weight = (1/len(stocksymbols))
weightlist.append(weight)
weightdict = {'Ticker': stocksymbols}
dfweight = pd.DataFrame(weightdict)
dfweight['Weight'] = weightlist
portfolioreturns = (dfbig2["Returns"] * dfweight["Weight"])
print("Portfolio Return: ", sum(portfolioreturns))
correlationmatrix = correlationmatrix.drop(columns='Ticker')
weightlistlist = []
for x in weightlist:
weightlistlist.append([x])
weightarray = (np.array(weightlistlist).T)
standdevarray = (np.array([standdevlist]).T)
weightedstd = np.dot(weightarray, standdevarray)
portfoliovariance = np.dot((weightarray),(np.dot(correlationmatrix, weightarray.T)))
print("Portfolio variance: ", portfoliovariance)
Печатная доходность портфеля и дисперсия минимизированного портфеля отклонений