1 votos

Limitación de la rotación de la cartera

Tengo unos cuantos bonos y OAS y Duración para cada uno. Tenía un problema de tipo programación lineal en el que tenía que maximizar la OAS y mantener la duración <= restricción. Hay algunas otras restricciones. Podría modelarlas fácilmente usando linprog en MATLAB.

Por desgracia, la rotación de la cartera es demasiado alta. Quiero poner un límite a esta rotación. Algo así como el 10% del total de la cartera. Como ya no es un problema de programación lineal, estoy un poco atascado. Cualquier idea será de gran ayuda.

3voto

Kyle Cronin Puntos 554

En cada día de reequilibrio, usted maximizaba previamente

$$ \vec{w}^* \vec{r} -\lambda \vec{w}^* \Sigma \vec{w} $$

Ahora, debe combinar esto con una forma de expresar su restricción comercial de forma matemática. Digamos que sus ponderaciones anteriores eran $\vec{p}$ . Entonces su restricción del 10% se traduce en especificar que

$$ 0.1 \geq \sum |w_i-p_i| $$

Esto puede ser manejado por fmincon o quizás incluso por alguno de los optimizadores más sencillos de Matlab.

0voto

alex Puntos 131

Gracias a todos por la adivinación. He probado fmincon . Desgraciadamente no convergía a ninguna solución y no me hacía una idea de qué restricción la está rompiendo y en qué dirección debo modificar la restricción para llegar a una solución. Así que esto es lo que finalmente hice.

  • Seguir utilizando linprog para la optimización.
  • Calcular $w_b$ y $w_s$ y calcular la rotación de la cartera como $w_c = w_b+w_s$
  • si $w_c > 0.10*w_{total}$
  • Crear un vector de tasas de duración tal que $\delta_r \in [\frac{\delta_{rTot}}{10},\delta_{rTot}] $
  • Crear un vector de duración de propagación tal que $\delta_s \in [\frac{\delta_{sTot}}{10},\delta_{sTot}] $
  • Para cada $\delta(i)_r$ Dibujo los márgenes de $\delta(1)_s...\delta(10)_s$ y volver a ejecutar linprog . Guardo cada una de las soluciones exitosas $\delta(i)_s$ , $\delta_r(j)$ OEA y $w_c$ .

Por lo tanto, al final tengo todas las soluciones factibles y los límites de duración correspondientes. Ahora puedo sugerir algunas carteras óptimas con duraciones aceptables, OAS y costes de transacción. (Tengo una función que modela esto para mí basado en la cantidad pendiente, comprar / vender cantidades, etc) Es la fuerza bruta, pero funciona para mí. De este modo, no sólo conozco las posibilidades no viables, sino también todas las posibles bajo una estrategia de inversión, ya sea

  1. Aumentar el OAS y mantener el diferencial y la duración bajo un límite
  2. Mantener el OAS pero reducir la duración
  3. Una combinación de ambos con un bajo coste de transacción

Sólo quería que los demás lo supieran por si le sirve de ayuda a alguien.

EDITAR

Terminé codificando usando fmincon . He modelado el obtivo para aumentar el OAS y el bit de restricción no lineal como

function [c,ceq]=NonLiniearConstraints(~,x,w_i)
    churn = 0.10;
   res = sum(abs(x-w_i));
   c(1) = res - 2*churn; % Buy + Sell = Total churn 
   ceq = [];
end

He comprobado que produce los mismos resultados que el de isqlin que trata de minimizar el churn utilizando el método del mínimo cuadrado. Así que he marcado la respuesta de Brian como la correcta.

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