1 votos

Optimización de la cartera/subcartera

Tengo una cantidad finita de 26 activos, la cantidad total de estos activos necesita ser asignada a 9 carteras. Cada cartera tiene su propia rentabilidad requerida que debe cumplirse, utilizando un enfoque de minivarianza.

Este es el problema de optimización, sujeto a:
- Cada activo debe estar asignado al 100%
- Los activos 1 y 2 se mantienen constantes (las subcarteras ya tienen alguna cantidad de estos 26 activos)
- El activo 3 no debe pesar más del 20% en cada cartera
- El activo 4 no debe pesar más del 25% en cada cartera
- Cada cartera tiene un AuM determinado que la nueva asignación debe igualar
- Ningún activo puede tener una ponderación negativa (long-only)

Tengo un conjunto de datos que contiene los 26 activos, los rendimientos esperados y una matriz de covarianza.

Soy capaz de optimizar una sola cartera, el truco es cuando quiero optimizar a través de las 9 carteras.
He estado buscando en la programación cuadrática como un medio para este problema, si alguien es capaz de señalarme en la dirección correcta, tal vez algunos enlaces útiles o algo. Estoy codificando en Python, por lo que las soluciones de Python es un plus, pero también tengo acceso a R y MatLab.

2voto

dotnetcoder Puntos 1262

Identificar sus variables:

Necesitará una ponderación para cada uno de los 26 activos de cada una de las 9 carteras. Supongamos que toma cada cartera por turno y crea un vector apilado:

$\mathbf{w} = [w_{1,1} \; .. \;w_{1,26} \; w_{2,1} \; .. \; w_{2,26} \; .. \;w_{9,26}]$

Restricciones de igualdad:

  • Cada peso de una sección transversal de activos tiene que sumar a la participación, $W_j$ :

$$ \sum_{i=1}^9 w_{i,j} = W_j \quad \forall \quad \text{assets }j $$

Esto también se expresa fácilmente en notación matricial-vectorial, por ejemplo, para una cartera de 2 x 3 activos:

$$ \begin{bmatrix} 1 & 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 & 1 \end{bmatrix} \mathbf{w}= \begin{bmatrix} W_1 \\ W_2 \\ W_3 \end{bmatrix} $$

  • Cada cartera tiene un AuM determinado:

$$ \begin{bmatrix} 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 1 & 1 \end{bmatrix} \mathbf{w}= \begin{bmatrix} AUM_1 \\ AUM_2\end{bmatrix} $$

Tenga en cuenta que estas dos restricciones suponen: $ \sum_{asset} W_{asset} = \sum_{portfolio} AUM_{portfolio} $

  • Algunas carteras tienen rendimientos requeridos (alcanzables), por ejemplo, la cartera 2:

    $$ \begin{bmatrix} 0 & 0 & 0 & u_1 & u_2 & u_3 \\ \end{bmatrix} \mathbf{w} =U_2 $$

Restricciones a la desigualdad:

  • Sólo largo:

    $$ -\mathbf{I} \mathbf{w} \leq \mathbf{0} $$

  • El activo 4 no puede pesar más del 25% en la cartera 2:

$$ w_{2,2} \leq 0.25 \left ( w_{2,1} + w_{2,2} + w_{2,3} \right ) $$

$$ \begin{bmatrix} 0 & 0 & 0 & -0.25 & (1-0.25) & -0.25 \\ \end{bmatrix} \mathbf{w} \leq 0 $$

Función objetiva

Supongo que ahora está haciendo la tradicional optimización de la varianza-rendimiento

$$ f(w) = \frac{1}{2}\mathbf{w^T 2\Sigma_p w} - \lambda \mathbf{u^T_p} \mathbf{w} $$

donde $$ \mathbf{\Sigma_p} = \begin{bmatrix} \Sigma & 0 & ... & 0 \\ 0 & \Sigma & .. & 0 \\ ... \\ 0 & 0 & .. & \Sigma \end{bmatrix} $$

y $$ \mathbf{u^T_p} = [ \mathbf{u^T u^T .. u^T ]} $$

También se puede ajustar el $\lambda$ para influir en las carteras individuales en lugar de ser un parámetro global de aversión al riesgo.

Aplicación

Puede utilizar la biblioteca cvxopt ( https://cvxopt.org/userguide/coneprog.html#quadratic-programming ) en python para resolver esto y las formulaciones anteriores están organizadas para ser directamente compatibles con el formato.

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