Recientemente he implementado MPT en Python, sin embargo, cuando permito pesos negativos (venta en corto), no suman uno. ¿No se supone que no debe ocurrir? Por otro lado, cuando no permito, suman uno como siempre.
Esto es lo que hice:
- Definido el retorno como de costumbre: $\vec{W}^{T} \vec{R}$ , donde $\vec{W}$ tienen todos los pesos y $\vec{R}$ es el vector aleatorio de los rendimientos;
- Calcula los rendimientos esperados y la matriz de covarianza, todo ello en forma de porcentajes;
- Se define el riesgo como la desviación estándar, que satisface: $\sigma^2(\vec{W}) = \vec{W}^{T} \Sigma \vec{W}$ ;
- Minimizado $\sigma^2(\vec{W})$ bajo i) $\vec{W}^{T} \vec{I}=1$ , donde $\vec{I} = [1\,\ 1 \cdots 1]^{T}$ y ii) $\vec{W}^{T} \mathbb{E}[\vec{R}] = \mu_0$ , donde $\mu_0$ se da;
- Establece el lagrangiano de la siguiente manera: $\mathcal{L}(\vec{W}, \lambda_1, \lambda_2) = \sigma^2(\vec{W}) + \lambda_1 (\vec{W}^{T} \vec{I} - 1) + \lambda_2 (\vec{W}^{T} \mathbb{E}[\vec{R}] - \mu_0)$
- Toma todas las derivadas parciales y termina en un sistema de ecuaciones como este:
\begin{equation} \begin{bmatrix} 2 \Sigma \,\,\, \vec{I} \,\,\, \mathbb{E}[\vec{R}] \\ \vec{I}^{T} \,\,\, 0 \,\,\, 0 \\ \mathbb{E}[\vec{R}]^{T} \,\,\, 0 \,\,\, 0 \end{bmatrix} \cdot \begin{bmatrix} \vec{W} \\ \lambda_1 \\ \lambda_2 \end{bmatrix} = \begin{bmatrix} \vec{0} \\ 1 \\ \mu_0 \end{bmatrix} \end{equation}
-
Al tratarse de un sistema de $A \vec{x} = \vec{b}(\mu_0)$ amable y $\vec{b}$ está parametrizado por $\mu_0$ Utilicé la factorización QR para resolverlo para cada $\mu_0$ ;
-
Una vez que tenga la solución $\vec{x}$ Tengo los pesos dados por $\vec{W}$ también. Por lo tanto, se ha resuelto.
¿Falta algo? ¿Sucede con frecuencia?
Gracias
EDITAR
Gracias chicos, he conseguido solucionar el problema. La función que creé para calcular todos los pesos era incorrecta (utilizaba la norma 1).