Scipy.optimize минимизирует «несовместимые ограничения неравенства» - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь минимизировать дисперсию в портфеле из 100 ценных бумаг.

def portvol(w, x):
    return np.dot(w.T, np.dot(x, w))*252

covmat = annreturn.cov()
w0 = np.ones(len(covmat)) * (1 / len(covmat)) #equal weighting initially
bounds = ((0,1),) * len(covmat)
constraints =  {'fun': lambda i: np.sum(i)-1.0, 'type': 'eq'}
optweights = minimize(portvol, w0, args = (covmat), method = 'SLSQP', bounds = bounds, constraints = 
      constraints)

annreturn.cov () - это фрейм данных размером 100x100. Выходные данные - те же .01, даже веса, с которых я начал, и это сообщение об ошибке:

message: 'Inequality constraints incompatible'
nfev: 102
 nit: 1
njev: 1

статус: 4 успеха: False

1 Ответ

0 голосов
/ 14 апреля 2020

Вот как я рассчитал годовой доход ...

annreturn = data.pct_change() #again, assuming percentage change 
annreturn = annreturn.iloc[1:]
annreturn = (annreturn+1)**252-1

Если вы ничего не заметили, это нормально. Мне потребовалось 2 дня, чтобы понять, что я не разделил результат PCT_CHANGE () на 100. Время потрачено не зря. Я получал корреляции с силами вроде 15+. Вот как должна выглядеть последняя строка, и функция минимизации из исходного вопроса работает отлично.

annreturn = (annreturn/100+1)**252-1

Извините, если кто-то потратил время на это без вышеприведенного фрагмента!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...