6 votos

El solucionador más rápido posible para la optimización de carteras

Estoy usando quadprog en MATLAB para una optimización muy simple de media-varianza, con menos de 100 activos.

Es bastante rápido pero si ejecuto una estrategia con reequilibrio diario, el tiempo de ejecución puede acumularse muy rápidamente.

¿Alguien conoce algún solver más rápido, particularmente en MATLAB?

0 votos

¿Cuánto tiempo se tarda ahora en optimizar? Para el rebalanceo diario de media-varianza, supongo que no necesitarías más que el optimizador estándar, incluso con 100 activos. En resumen, define mejor tu problema (el tamaño de tu conjunto de restricciones y el método de optimización que utilizas, ...), tal vez podamos ayudarte desde ahí ya.

0 votos

La optimización en sí misma es muy simple, simplemente una optimización estándar de media-varianza con restricciones estándar de no negatividad e inversión total. El único problema es que necesito hacer esto diariamente para, digamos, 30 carteras diferentes cada una con 100 activos. Por lo que podría llevar horas en total. He estado usando quadprog en Matlab con el algoritmo interior-point-convex. Es muy posible que no haya nada que pueda hacer para acelerar esto, pero pensé en probar suerte preguntando aquí.

1 votos

Entiendo que quieres hacer una prueba retrospectiva que revise los últimos n años utilizando 30 estrategias diferentes. Es posible que desees considerar el procesamiento en paralelo. Eso tiende a funcionar bien en este tipo de situaciones.

6voto

m0j0 Puntos 21

Creo que hay varias maneras de abordar tus problemas.

En primer lugar, mencionaste que realizas varias optimizaciones. Una solución que me viene a la mente en lugar de acelerar la optimización en sí es realizar las optimizaciones de forma paralela, por lo que podrías mirar la Caja de herramientas de Cómputo Paralelo de Mathworks.

En segundo lugar, proporcionar al optimizador una buena suposición inicial reduce el tiempo de ejecución, en qué medida depende del problema. En este caso, los pesos óptimos del día anterior pueden ser una buena suposición.

En tercer lugar, si deseas acelerar la optimización, básicamente tienes dos enfoques.

O bien puedes usar el mismo método pero con un paquete que esté implementado de una manera más óptima, y podrías mirar paquetes como el de NAG.

De lo contrario, crees que hay otro método que sería mejor para encontrar una solución. He visto que las personas utilizan la Optimización cónica para este tipo de problemas y sé que MOSEK tiene un paquete de MATLAB para ese método. También puedes mirar su documento técnico para más detalles sobre este enfoque.

Para más teoría sobre optimizaciones numéricas como la programación cuadrática, podrías echar un vistazo a Optimización Numérica de Nocedal y Wright.

2 votos

No estoy seguro si esto aplica en este escenario, pero otra idea es iniciar el solucionador con una buena suposición inicial. En este caso, una buena suposición podría obtenerse usando los pesos de la cartera del día anterior.

0 votos

@BobJansen oh sí, olvidé eso, aunque si es convexo, ¿no debería converger rápidamente, verdad?

1voto

Mike Stone Puntos 21293

Te sugiero que eches un vistazo a MOSEK, lo usé en mi última empresa (arbitraje estadístico de frecuencia media) y también sé que se usa en otro gran fondo de cobertura.

0voto

PJ. Puntos 997

Yo sugeriría Ipopt, es un solucionador cuadrático y no lineal muy robusto y tiene interfaz de matlab:

https://projects.coin-or.org/Ipopt/wiki/MatlabInterface

0 votos

He utilizado con éxito Ipopt para minimizar costos y error de seguimiento de una cesta de acciones replicando un índice para nuestras estrategias de arbitraje automatizadas y lo recomiendo altamente también.

0voto

Dan Puntos 4284

Tuve el problema de crear un portafolio a partir de 10000 series temporales. Así que utilicé el principio de optimización codiciosa. 1. selecciona la mejor serie temporal de índice de Sharpe 2. selecciona la próxima serie temporal que, en combinación, crea el mejor índice de Sharpe 3. añade una serie temporal más que crea el mejor índice de Sharpe del portafolio 4. continúa añadiendo una por una hasta llegar a 100 aproximadamente 5. divide los pesos por 100 y obtendrás los pesos que sumen 1

puedes añadir restricciones dentro del bucle principal - es decir, no añadas más del 10% del mismo tipo. los resultados son similares a quadprog pero mucho más rápidos.

-2voto

Jan Gorman Puntos 842

Pyalogtrade modulo local de optimización de pyalgotrade: http://gbeced.github.com/pyalgotrade/docs/v0.9/html/tutorial.html

La idea principal es aprovechar los servicios de computación en la nube de Google para optimizar tus estrategias, lo cual es especialmente útil cuando no tienes acceso a un grupo de computadoras para optimizar tus estrategias en paralelo.

Ten en cuenta que solo debes ejecutar un servidor y uno o más trabajadores en diferentes computadoras.

Soporte de Google App Engine http://gbeced.github.com/pyalgotrade/docs/v0.9/html/googleappengine.html

Descarga Pyalogtrade aquí: http://gbeced.github.com/pyalgotrade/downloads/index.html

Google App Engine SDK para Python https://developers.google.com/appengine/downloads

Tema relacionado: Cambiarse de Matlab a Python para Trading Cuantitativo e Investigació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