1 votos

programación cuadrática optimización de carteras

Estoy usando MATLAB para hacer una optimización. El problema de minimización de la QP se establece en la forma estándar que se muestra a continuación. La optimización se utiliza para calcular los pesos (vector x en la ecuación siguiente) de una cartera.

Min    0.5 (x'Fx) + c'x
 x 

st

x_low <= x <= x_up
b_low <= Ax <= b_up

where 

c is a n x 1 vector in the objective function
x is a n x 1 vector (weights of the stocks in the portfolio)
F is a n x n matrix in the objective function
A is the linear constraint matrix
b_low & up  are the lower and upper bounds for the linear constraints

Intento de seguir un ejemplo pero tengo dos problemas. En primer lugar, digamos que la cartera tiene 500 acciones, el vector x que se pasa al optimizador (x es nuestra suposición inicial) tendrá la dimensión de 1000 x 1. Los segundos 500 tendrán el signo opuesto a los primeros 500, no entiendo a qué se debe esto.

También la matriz F hace algo parecido. Digamos que tengo una matriz R que contiene algunos factores de riesgo, que es 500 x 500.

Entonces F se ajusta a lo siguiente (lo siento, no estoy seguro de cómo mostrar las matrices en este sitio correctamente)

 F =  R   -R
     -R    R

De nuevo, ¿por qué harías esto?

Actualización

El solucionador es en realidad Tomlab (la guía de usuario del solucionador está aquí enlace ).

Más información

Sólo estoy revisando el código.

x0 se pasa como un vector inicial de conjeturas 1000 x 1. Los primeros 500 pesos son los pesos anteriores. Los siguientes 500 pesos se ponen a cero.

x_up es obviamente también un vector de 1000 x 1 para. Mirando más allá en el código. Los primeros 500 pesos son los límites superiores de las compras, los siguientes 500 son los límites superiores de las ventas.

x_low es lo mismo pero para los límites inferiores. Los primeros 500 pesos son los límites inferiores de las compras y los siguientes 500 son los límites inferiores de las ventas.

1voto

Wim Coenen Puntos 225

OK una cosa que me viene a la mente es el truco estándar para reformular las restricciones como $|x_i|<=c$ (limitando la exposición de $x_i$ permitiendo aún los pesos negativos). Tenga en cuenta que $|x_i| \leq c$ no es una restricción lineal, por lo que el solucionador no funcionará en este caso. Un pequeño truco puede ayudar:

Se dividen las variables en partes positivas y negativas: $x_i=x_i^+ + x_i^-$ Ahora, por definición, $x_i^+ \geq 0$ y $x_i^-\leq 0$

ahora, fíjate que $|x_i|= x_i^+ - x_i^-$ y la restricción se convierte en lineal:

$$ x_i^+ - x_i^- \leq c, \quad x_i^+ \geq 0, \quad x_i^-\leq 0$$

Si tiene otras restricciones lineales para $x_i$ simplemente hay que introducir $x_i = x_i^+ + x_i^-$ .

Este método duplicará las dimensiones pero "linealizará" mágicamente las restricciones. En cambio, hay que reformular todo el funcional (por ejemplo $F = 1/2* (R,-R; -R,R)$ que casi corresponde a su observación)

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