algorithm - ejemplo de portafolio de proyectos de ti
¿Cómo genera el portfolio de software sus sugerencias de cartera tan rápidamente cuando las posibilidades son enormes? (2)
Espero que esto no se cierre porque está relacionado con algoritmos que no he podido descifrar (también es bastante largo porque estoy tan confundido acerca de cómo se hace). Básicamente, hace muchos años, solía trabajar en un fondo mutuo y utilizamos diferentes herramientas para seleccionar carteras de optimización, así como para cubrir las existentes. Tomaríamos estos resultados y haríamos nuestras propias modificaciones para luego venderlas a los clientes. Después de que mi empresa se redujo, decidí que quería intentarlo (para crear el software e incluir mis personalizaciones) pero no tengo idea de cómo se generan realmente las combinaciones para el software.
Después de 6 meses de intentarlo, estoy aceptando que mi enfoque es imposible. Intenté usar algoritmos de combinación como los del libro de Knuth, así como hacer combinaciones de bit
para tratar de encontrar todos los portafolios posibles (lo limité a 30 acciones) en la NYSE (más de 5,000 acciones). Pero según todos los que he hablado, me llevará miles de millones de millones de años obtener solo resultados de un día (para mí en una GPU lo detuve después de 2 días de procesamiento directo).
Entonces, ¿qué me estoy perdiendo? Entraríamos en nuestra tolerancia al riesgo y en la visión del mercado (expectativas de crecimiento del mercado de valores, expectativas de inflación, expectativas de fondos federales, etc.) y nos daría el portafolio ideal (en teoría ...) en unos pocos segundos / minutos. Con miles de posibilidades y cuatrillones de posibles combinaciones de pesos de acciones, ¿cómo pueden calcular los resultados tan rápido (o incluso nada)? Como administrador del sistema, sé que hemos descargado un archivo todos los días (menos de 100 mb y cargado en una base de datos mssql, probablemente solo datos de mercado ... así que no es como si tuviéramos todas las posibilidades. Utilizando mi enfoque anterior obtendría un 5 gig archivo en un min de hacer mi versión del algoritmo de combinación de Knuth) y las aplicaciones funcionaron fuera de línea (por lo que debe haber estado haciéndolo localmente en la computadora de escritorio / laptop no en un supercomputador masivo en algún lugar y tardó un minuto o dos en ejecutarse.15 minutos fue el más largo para un fondo global que incluye todas las acciones en el mundo). Es muy confuso porque su trabajo requería la correlación de todo el fondo (no creo que solo estuvieran enviando las mejores acciones que precalcularon porque todos obtuvieron resultados diferentes). Entonces, si quería un fondo de acciones de 30 que me ofreciera un 2% de beneficios y tuviera una correlación negativa con el mercado, y estaba cubierto en un 60%, ¿cómo podría el software generar ese portafolio entre miles de millones de posibilidades tan rápido? nota, no estoy preguntando sobre la parte de matemática o finanzas, estoy preguntando cómo fue capaz de generar 30 acciones de todo el mercado que dieron rendimientos del 2% cuando para hacer eso necesitaría conocer los rendimientos de todos los 30 portafolios de acciones (Eso solo lo haría funcionar durante miles de millones de años, ¿no? las otras restricciones lo hacen más complejo).
Entonces, ¿cómo se hace esto programáticamente? Estoy empezando a creer que no están usando el algoritmo de combinación de Knuth para generar todas las posibilidades, sin embargo, sus resultados no parecen seleccionados al azar y la selección individual de las existencias parece pasar por alto la parte de correlación. ¿Cómo pueden tantos softwares de inversión hacer cosas como esta?
La teoría de la cartera moderna es un tema en sí mismo, con libros como "Modern Portfolio Theory and Investment Analysis" y una introducción en http://en.wikipedia.org/wiki/Modern_portfolio_theory .
Una forma de obtener problemas que realmente puede resolver es tratarlo como un problema matemático de optimización. Si tiene un vector que le da la cantidad de cada acción que compra, entonces - bajo varias suposiciones - el retorno es una función lineal de este vector, y el riesgo es una función cuadrática de este vector. Maximizar el rendimiento por un riesgo dado, o minimizar el riesgo de un rendimiento dado, es un problema matemático bien entendido, incluso para un gran número de acciones: http://en.wikipedia.org/wiki/Quadratic_programming .
Un problema práctico con esto es que la respuesta que obtenga probablemente le dirá que compre una fracción de casi todas las acciones en el mercado. Supongo que los programas de la vida real usan alguna heurística de "salsa secreta" que no garantiza la respuesta perfecta, sujeta a una restricción sobre la cantidad de acciones que realmente está preparado para comprar, pero que funciona bastante bien en la práctica. Devolver la respuesta perfecta parece ser un problema difícil - ver, por ejemplo, http://arxiv.org/ftp/arxiv/papers/1105/1105.3594.pdf
Es casi seguro que tales algoritmos no generen todas las posibilidades, ya que, como bien observa, eso sería poco práctico.
Sin embargo, la selección de cartera es muy fácil de hacer con otras técnicas que le darán una muy buena respuesta. Los dos más probables son:
- Si realiza suposiciones simplificadoras sobre el riesgo / rendimiento, puede resolver matemáticamente una cartera óptima (consulte http://en.wikipedia.org/wiki/Capital_asset_pricing_model para algunas de las matemáticas)
- Un algoritmo genético que realice operaciones de mutación / cruce en carteras de muestras aleatorias encontrará una muy buena solución bastante rápido. Puede combinar esto con los enfoques de modelado de estilo Monte-Carlo para comprender el rango de posibles resultados.
Personalmente, probablemente sugeriría el enfoque del algoritmo genético, aunque no es matemáticamente puro, le dará buenas respuestas y debería ser capaz de manejar cualquier restricción que quiera lanzar con bastante facilidad (por ejemplo, el número máximo de acciones en una cartera)