Нахождение лучшего решения с scipy.optimize python спецификаций c портфолио - PullRequest
0 голосов
/ 15 апреля 2020

Я рассчитал веса, матрично изменяющие один параметр tau0, и мне нужно вычислить лучший портфель, изменяющий этот параметр tau0 с минимальным разбросом. У меня есть следующий код:

Исчисление весов

def PesosTauMatrices (tau0,alfa,meanReturns,covMatrix):
#calculando A, B y C
invcov=np.linalg.inv(covMatrix)
vector_e=np.array(np.repeat(1,len(meanReturns),axis=0))
z=st.norm.ppf(alfa)

A=np.dot(np.dot(invcov,vector_e),np.transpose(vector_e))

b1=np.dot(np.dot(invcov,meanReturns),np.transpose(vector_e))
b2=np.dot(np.dot(invcov,vector_e),np.transpose(meanReturns))
B=((2*tau0)+1)*(b1+b2)

c1=np.dot(np.dot(invcov,meanReturns),np.transpose(meanReturns))
C=((((2*tau0)+1)**2)*c1)-(z**2)

#Calculando lambdas como soluciones a la cuadratica
lambda1=(-B+np.sqrt((B**2)-(4*A*C)))/(2*A)
#lambda2=(-B-np.sqrt((B**2)-(4*A*C)))/(2*A)

#Calculando numerador para los pesos
numerador1=(np.dot(invcov,meanReturns))*((2*tau0)+1)
numerador2=lambda1*(np.dot(invcov,vector_e))
numeradort=numerador1+numerador2

#Calculando denominador para los pesos
denominadort=(b1*((2*tau0)+1))+(A*lambda1)

#Calculando pesos
W=numeradort/denominadort

return W

Это целевая функция

def ind_rp_varp(tau0,alfa,meanReturns,covMatrix):
weights=PesosTauMatrices(tau0,alfa,meanReturns, covMatrix)
p_ret, p_vol = calcPortfolioPerf(weights, meanReturns, covMatrix)
z=st.norm.ppf(alfa)

return (p_ret/(p_ret+(p_vol*z)))

Это функция доходности и волатильности портфеля ios

def calcPortfolioPerf(weights, meanReturns, covMatrix):    
#Calculate return and variance

portReturn = np.sum( meanReturns*weights )
portStdDev = np.sqrt(np.dot(np.transpose(weights),(np.dot(covMatrix,weights))))

return portReturn, portStdDev 

Спасибо за помощь

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