Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

4 votos

Problema de muestreo en la optimización de carteras

En resumen, estoy tratando de hacer lo siguiente

  1. Subconjunto de bonos 1 : Obtener la lista de bonos en USD --> Filtrar los bonos que tienen YTM > y% DUR > 10 Y etc Esto nos da los bonos que nos interesan. Así que al final tendremos un subconjunto de estos Bonos en la cartera final
  2. Subconjunto de bonos 2 : Lista de Bonos que seguramente necesitan incluir . A diferencia del subconjunto anterior, estos bonos deberían incluirse definitivamente en la cartera final
  3. Restricciones :
    a. Coincidir con la duración total y la duración del tipo clave: Dado el perfil DV01 del pasivo del cliente, la cartera resultante debe coincidir con este perfil con una desviación de +- X%. b. Aplicar restricciones sectoriales : Total en el sector financiero <= 0,25 del total, etc. c. Límites inferiores y superiores de inversión en un solo valor d. Número máximo de valores en la cartera resultante = N
  4. Objetivo : Lograr el rendimiento = Y % o maximizar el rendimiento

Así que he creado un conjunto de desigualdades para satisfacer estas restricciones y también tengo definida mi función objetivo. Para ello utilizo el programa fmincon de Matlab.

Problema fmincon intenta incluir todos los bonos en la optimización y el resultado es tal que no se satisfacen las restricciones. Necesito poder elegir o eliminar selectivamente los enlaces del subconjunto 1. Lo que significa que necesito que el solucionador tenga número de variables . Para resolver este problema estoy buscando encontrar mejor manera de muestrear subconjuntos de Bonos 1 y ejecutar el solver en esto para que me quede una cartera que satisfaga las restricciones. ¿Alguien tiene alguna idea sobre este problema de muestreo en la optimización de carteras? (Por favor, no sugiera considerar todas las combinaciones de bonos posibles para encontrar subconjuntos para los que se satisfagan las restricciones y obtenga el máximo rendimiento, ya que el rendimiento del código es muy importante aquí y el número de valores es de alrededor de 1000)

4voto

scottishwildcat Puntos 146

Si te entiendo bien, entonces tienes un filtro definido para tu cartera que está definido por "1.".

A) Así que o bien filtras estos bonos antes de empezar cualquier cosa que tenga que ver con la optimización. Este debería ser el camino a seguir si usted está interesado en acelerar su programa.

B) Si quieres hacer todo en la optimización, entonces necesitas restricciones de la forma wi=0 if asset i does not pass the filter haciendo esto tienes todos los bonos en tu universo de optimización pero tienes innecesariamente muchas variables.

Por ejemplo, si su universo es 106 bonos y sólo 20% satisfacer el filtro, entonces usando A) sólo tienes 200 000 variables y usando B) tienes 106 variables y 800 000 con una restricción trivial.

Otra cuestión es que su problema es muy grande...

EDITAR Después de algunos comentarios por el OP: Lo que quieres hacer es una optimización con la restricción de cardinalidad. Estas restricciones son difíciles de manejar. Con ellas sales del ámbito de la optimización continua y entras en programas cuadráticos mixtos-integrales. O bien necesitas alguna heurística en la que creas o mejor buscas un solucionador comercial (la mayoría de las veces) que pueda manejar restricciones enteras.

Lo que se hace es introducir variables adicionales ki,i=1,,n y las restricciones ki{0,1}wikikiK para algún número entero K . La función objetivo no se modifica.

3voto

paul Puntos 416

Yo usaría un Metropolis Monte Carlo / recocido simulado enfoque para resolver su problema.

Comience con una cartera arbitraria totalmente invertida que satisfaga las restricciones (2), (3) y la restricción de cardinalidad NK . A continuación, elija uno de los siguientes movimientos de prueba:

  1. Seleccione dos bonos i,j al azar y realizar un cambio de peso aleatorio wiwi+δw , wjwjδw o
  2. Eliminar un bono al azar y reescalar las ponderaciones de la cartera a wi=1 o
  3. añadir un nuevo bono a la cartera y reescalar las ponderaciones

Después de cada uno de estos movimientos de prueba, comprueba si se satisfacen todas las restricciones y utiliza la condición de Metrópolis para aceptar la configuración de prueba con probabilidad min . o_{trial}, o_{old} es la función objetivo y T es una "temperatura" que se inicializa de forma que la exponencial de la condición de Metrópolis es de orden 1. T se reduce gradualmente hasta que la cartera se "congela" en una configuración óptima o casi óptima. De este modo se termina la optimización.

Observaciones: el movimiento de prueba 1 debería elegirse con mucha más frecuencia (quizás el 90%), y si la cartera es sólo de largo plazo, esto restringe los posibles movimientos de prueba en 1.

1voto

akmad Puntos 7059

Supongamos que en lugar de una posible cartera de 1000 bonos, la cartera sólo puede contener M bonos. El vector de entrada necesita entonces contener tanto las ponderaciones como la elección de los bonos, pero ¿cómo puede presentar la elección de los bonos como un vector de entrada?

Considere la posibilidad de clasificar los bonos candidatos según la duración de Macaulay. Dado un único valor de duración Macaulay, entonces, podría localizar los 2 bonos más cercanos a esa duración, y ponderar cada uno de ellos según la cercanía de la coincidencia de duración. Por ejemplo, quiero una duración de 2,75 años y tengo bonos con duraciones de 2 años y 3 años, así que los pondré en un 75% en 3 años y en un 25% en 2 años.

El vector de entrada es entonces un conjunto de valores de duración, y un conjunto de pesos, así:

dur   wt
1.0   0.25
2.75  0.5
5     0.15
25    0.1

Eso se convertiría en una cartera como esta (estoy poniendo números aproximados):

dur   wt
0.97  0.24
1.2   0.01
2.0   0.125
3.0   0.375
5.0   0.15
20    0.005
25.1  0.095

Si quiere minimizar el tamaño de la cartera, puede filtrar los valores por debajo de algún umbral cuando puntúe la cartera con su función objetivo.

He evitado elegir simplemente el bono más cercano a una duración determinada porque los minimizadores suelen funcionar mejor con funciones objetivo suaves; si el vector de prueba se desplaza ligeramente y se selecciona un bono diferente, el salto es repentino en lugar de suave y puede representar un máximo local. De este modo, hay una transición suave entre la selección del bono de 2 años y el de 2,5 años.

Se puede sustituir la duración de Macaulay por cualquier escala lineal que mida el conjunto de los bonos; el algoritmo de minimización la va a utilizar de forma bastante ciega como caja negra. La clave es tener una manera de mover un puntero suavemente a lo largo del espectro de bonos.

Una posibilidad interesante es incluir una penalización dependiente del número de bonos en uso; si se puede cuantificar el valor de tener de 5 bonos sobre 10, entonces se puede incluir eso. Una pequeña penalización permite que el minimizador se concentre inicialmente en llegar a la zona correcta del espacio de búsqueda, y que más tarde optimice las compensaciones que se adaptan al detalle más pequeño, por ejemplo, eliminando un bono de la cartera al aumentar los pesos de los valores que lo rodean. Una vez más, haga que la penalización sea suave; quizás el total de bonos más el peso más pequeño que no sea cero.

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