1 votos

Optimización de cartera con restricción de pesos en python

Estoy tratando de optimizar una cartera utilizando cvxpy. Mi construcción original es la siguiente:

w = Variable(n)
ret = mu.T * w
risk = quad_form(w, Sigma)
prob = Problem(Maximize(ret), [risk <= .01])

que es simplemente maximizar el rendimiento bajo cierta limitación de riesgo. Sin embargo, me gustaría también tener una limitación de pesos/apalancamiento, como la siguiente:

prob = Problem(Maximize(ret), [risk <= .01, sum(abs(w)) <= 1.0])

Sin embargo, cuando agrego esta limitación, muchos de mis pesos se van a cero y la cartera óptima se concentra solo en 2-3 activos. Esto es diferente al caso sin esta limitación que resulta en una cartera mucho más diversificada. Estoy un poco confundido sobre por qué la limitación de pesos causa esto. ¿Alguien tiene alguna idea?

3voto

aspitzer Puntos 860

Esto es un poco más complejo que agregar restricciones adicionales. Este es un problema bien conocido en la optimización de Markowitz: si no trata su matriz de covarianza y vector de retorno esperado con mucho cuidado, Markowitz a menudo rociará sus pesos contra los bordes y resultará en una cartera muy no diversificada.

Sugiero estudiar a fondo la literatura, aquí es un buen lugar para empezar:

http://www.ledoit.net/honey.pdf

"Estimar la matriz de covarianza de los rendimientos de acciones siempre ha sido uno de los puntos más difíciles. El método estadístico estándar consiste en recopilar un historial de los rendimientos pasados de acciones y calcular su matriz de covarianza muestral. Desafortunadamente, esto crea problemas que están bien documentados (Jobson y Korkie, 1980). Para decirlo de la manera más sencilla posible, cuando el número de acciones bajo consideración es grande, especialmente en comparación con el número de observaciones históricas de retorno disponibles (que es lo usual), la matriz de covarianza muestral se estima con mucho error. Esto implica que los coeficientes más extremos en la matriz estimada tienden a tomar valores extremos no porque esto sea "la verdad", sino porque contienen una cantidad extrema de error.

Invariablemente, el software de optimización de varianza cogerá esto y apostará sus mayores apuestas en aquellos coeficientes que son los más extremadamente poco confiables"

1 votos

De hecho, imponer restricciones adicionales y reducir la matriz de covarianza están relacionadas pdfs.semanticscholar.org/7573/…

0voto

MFABIEN2 Puntos 1

Tuve los mismos problemas en MATLAB. Supongo que necesitas establecer algunos límites como restricciones:

cons = ({'type':'eq', 'fun': lambda x:sum(x)-1})
Bounds = [(0.1 , 0.5) for i in range(0,nb_assets)]
Optim = scipy.optimize.minimize(funcion,
       SolucionInicial, method='SLSQP', bounds=Bounds, constraints=cons)

De esta manera le estás indicando a la herramienta de optimización que encuentre una solución más diversificada.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X