@Error: установка элемента массива с последовательностью
Я пытаюсь свести к минимуму риск ухудшения ситуации.
У меня есть двумерный массив формы доходности (1000, 10), а портфель начинается со 100 долларов. Соедините это 10 раз с каждым возвратом подряд. Сделайте это для всех строк. Сравните значение последней ячейки для каждой строки со средним из значений последнего столбца. Сохраните значение, если оно меньше среднего или равно нулю. Итак, у нас будет массив (1000, 1). В конце концов, я нахожу это стандартное отклонение.
Цель - минимизировать стандартное отклонение. Ограничения: вес должен быть меньше 1
ожидаемый доход т.е. wt * ret должно быть равно 7%. Я должен сделать это для пары значений, например 7%, 8% или 10%.
wt = np.array([0.4, 0.3, 0.3])
cov = array([[0.00026566, 0.00016167, 0.00011949],
[0.00016167, 0.00065866, 0.00021662],
[0.00011949, 0.00021662, 0.00043748]])
ret =[.098, 0.0620,.0720]
iterations = 10000
return_sim = np.random.multivariate_normal(ret, cov, iterations)
def simulations(wt):
downside =[]
fund_ret =np.zeros((1000,10))
prt_ret = np.dot(return_sim , wt)
re_ret = np.array(prt_ret).reshape(1000, 10) #10 years
for m in range(len(re_ret)):
fund_ret[m][0] = 100 * (1 + re_ret[m][0]) #start with $100
for n in range(9):
fund_ret[m][n+1] = fund_ret[m][n]* (1 + re_ret[m][n+1])
mean = np.mean(fund_ret[:,-1]) #just need the last column and all rows
for i in range(1000):
downside.append(np.maximum((mean - fund_ret[i,-1]), 0))
return np.std(downside)
b = GEKKO()
w = b.Array(b.Var,3,value=0.33,lb=1e-5, ub=1)
b.Equation(b.sum(w)<=1)
b.Equation(np.dot(w,ret) == .07)
b.Minimize(simulations(w))
b.solve(disp=False)
#simulations(wt)
Если вы закомментируете раздел gekko и вызовете функцию моделирования внизу, все будет нормально