Я получаю ошибку ValueError: формы (6,) и (1,6) не выровнены: 6 (dim 0)! = 1 (dim 0).Ошибка возникает, когда я выполняю задачу максимизации в строке 23. Знаете ли вы, что я могу изменить в этом коде, чтобы заставить вещи работать?
Я пытался изменить формы этих векторов и матрицы несколько раз, но япродолжайте получать эту ошибку или ошибка «невозможно вызвать матричный объект».
ETFs_mu - это вектор 6 на 1
cov_matrix - матрица 6 на 6
# Case 2: No borrowing
# The objective function maximizes the expected return of the portfolio
def objective_func(w,ETFs_mu,risk_free):
w = np.empty((6,1))
return -(np.dot(np.transpose(w),ETFs_mu) + (1-np.sum(w))*risk_free)
# Define constraint: sigma = .15
def constraint1(w):
pf_sigma = np.sqrt(np.dot(np.transpose(w), np.matmul(cov_matrix,w)))
return .15 - pf_sigma
# Define constraint: no access to risk-free
def constraint2(w):
return 1.0-np.sum(w) # Define constraint: all the weights + risk free sum up to one
# Load constraints into dictionary form
cons1 = {'type':'ineq','fun':constraint1}
cons2 = {'type':'eq','fun':constraint2}
cons = (cons1,cons2)
res3 = opt.minimize(objective_func, (.1,.1,.1,.1,.1,.1), args=(ETFs_mu,risk_free), constraints=cons)
res3
Эта задача предназначена для определения веса этого портфеля, состоящего из 6 активов.Мы не можем использовать безрисковую ставку, поэтому ее вес должен быть равен 0. Стандартное отклонение портфеля меньше или равно 15%.Выходными данными должен быть вектор желаемых весов, максимизирующий целевую функцию (ожидаемый доходный портфель) с учетом ограничений.