Uso de la programación genética para evolucionar las estrategias de negociación Un amigo y yo recientemente trabajamos juntos en una tarea de investigación en la que hemos utilizado con éxito la programación genética (GP) para evolucionar las soluciones a un problema de clasificación financiera del mundo real. Este problema, llamado análisis de seguridad, implica la determinación de los valores que deben ser comprados con el fin de lograr un buen retorno de la inversión en el futuro. Para encontrar una solución a este problema, utilizamos la Programación Genética para desarrollar una población de árboles de decisión que pudieran realizar análisis de seguridad en sesenta y dos de las acciones tecnológicas listadas en el SampP 500. Es decir, desarrollamos árboles de decisión capaces de clasificar esas poblaciones según Si deben ser comprados o vendidos a corto. Árboles de decisiones de análisis de seguridad Durante el estudio evolucionamos dos tipos de árboles de decisión de análisis de seguridad. El primero sólo utilizó indicadores del análisis fundamental y el segundo utilizó sólo los indicadores del análisis técnico. El análisis fundamental es un método de evaluación de una garantía para medir su valor intrínseco examinando factores económicos, financieros y cualitativos y cuantitativos relacionados. El análisis técnico es un método de evaluación de valores mediante el análisis de estadísticas generadas por la actividad del mercado. Una estrategia de análisis de seguridad, independientemente de si utiliza indicadores técnicos o fundamentales, consistirá en una serie de reglas para tomar decisiones de inversión. Esa estrategia puede representarse como un árbol de decisiones donde los nodos terminales representan decisiones de inversión y los nodos funcionales representan reglas basadas en indicadores técnicos o fundamentales. Debido a esto, muchas estrategias de inversión existentes están representadas en forma de árboles de decisión. En total se seleccionaron dos indicadores diferentes y se utilizaron tanto del análisis técnico como del análisis fundamental. Las estrategias evolucionadas fueron para un período fijo de tenencia de tres meses, seis meses, nueve meses o doce meses. Los árboles de decisión se probaron de nuevo utilizando datos de mercado de 2011 a 2013. Programación Genética La Programación Genética es una especialización de un Algoritmo Genético. Los algoritmos genéticos se basan en la población, lo que significa que operan dentro de una población compuesta por muchos individuos diferentes. Cada individuo está representado por un genotipo único (usualmente codificado como un vector). Los Algoritmos Genéticos modelan el proceso de evolución genética a través de una serie de operadores incluyendo el operador de selección que modela la supervivencia del más apto, el operador crossover que modela la reproducción sexual y el operador de mutación que modela las mutaciones genéticas que ocurren al azar a individuos en una población. Estos operadores, cuando se combinan, producen lo que los científicos informáticos se refieren como un Algoritmo Genético. Los tres operadores de un Algoritmo Genético que se aplica a una población de vectores (bloques) La diferencia entre un Algoritmo Genético y el Algoritmo de Programación Genética es la forma en que los genotipos individuales están representados. En los Algoritmos Genéticos los genotipos están representados como Cuerdas o como Vectores mientras que en la Programación Genética estos genotipos están representados usando estructuras de datos de árboles. La operación de crossover en estructuras de árbol puede ocurrir de varias maneras, o bien se cambia un sub-árbol, se elimina o cambia un nodo hoja o se ajustan los valores de algún nodo. Después de este estudio concluimos que la Programación Genética tiene un gran potencial para desarrollar nuevas estrategias de análisis de seguridad y administración de inversiones siempre que mejores funciones Para calcular la aptitud. A lo largo de nuestro estudio de investigación vimos que los árboles de decisión desarrollados utilizando la Programación Genética fueron capaces de producir clasificaciones de existencias que superaron el rendimiento promedio del mercado de manera consistente en los cuatro trimestres. Esto es cierto para los árboles de decisión que utilizan indicadores técnicos así como árboles de decisión que utilizan indicadores fundamentales. Se derivaron otras conclusiones de nuestra investigación, incluyendo los tamaños óptimos y el nivel de heterogeneidad de los árboles de decisión y el valor agregado por los diferentes indicadores y el desempeño de las estrategias entre sí. A continuación se incluyen algunos resultados. Conclusión Dos informes de investigación independientes fueron producidos por mí y mi amigo. Ambos informes incluyen muchos más detalles sobre nuestro estudio de investigación, el enfoque adoptado, nuestro diseño e implementación, las estrategias de prueba que usamos, nuestras conclusiones y recomendaciones para futuras investigaciones. También puede descargar una copia del código fuente creado durante la implementación. Para mis colegas más cuenta técnica del proyecto por favor haga clic aquí. Etiquetas Comentario copiado de LinkedIn Computational Finance Group Muy buen trabajo. El escribir es precioso. Sólo tuve la oportunidad de echar un vistazo al informe. Algunas estadísticas que sería bueno mirar: ¿cómo se compara su cartera de GA con carteras de los mismos activos. Vea dos carteras de comparación: una cartera de igual ponderación y una cartera de estilo SampP que está ponderada por la capitalización de mercado. Como resulta, puede ser sorprendentemente difícil de superar una cartera igualmente ponderada. Reequilibre las carteras trimestralmente, ya que algunas acciones suben y otras bajarán (por ejemplo, usted quiere mantener los pesos de la cartera iguales, a medida que cambian los precios). Si su algoritmo genético supera estos portafolios, entonces usted tiene alfa (exceso de retorno sobre el punto de referencia). Por supuesto alpha no lo es todo. Debe consultar la Pérdida esperada de la cola (ETL) (también conocida como CVaR, déficit esperado) tanto para la cartera de GA como para el índice de referencia. Si usted tiene menos riesgo para la misma vuelta entonces usted puede considerar que usted batió el punto de referencia. La medida ETL es una medida mejor que la relación de Sharpe cuando se trata de riesgo, ya que la relación de Sharpe mide la varianza, que es de dos caras. ETL sólo mide la pérdida. Una observación: un problema con GA y redes neuronales (NN) es que son cajas negras. Es difícil determinar por qué toman las decisiones que toman. Así que imagina que eres un administrador de carteras. Su GA o NN comienza a funcionar mal. ¿Qué medidas puede tomar para abordar este problema? El problema es que todo lo que realmente puede hacer es reciclar y no sabe si el reciclaje funcionará mejor. Por supuesto, con un árbol de decisión no es tan malo, ya que al menos usted sabe qué decisiones tomó. El problema es, si youre tweeking constantemente para tomar las decisiones correctas, entonces youve tiene un problema también. Estas cuestiones son razones por las que no ves estos algoritmos utilizados tanto (aunque se utilizan). Respuesta copiada de LinkedIn Computational Finance Group Gracias por las palabras complementarias Ian, le agradecemos que se interese por nuestra investigación y nos proporcione algunos comentarios perspicaces. En nuestro enfoque sólo comparamos el desempeño de las selecciones de valores hechas por nuestros árboles de decisión con una cartera igualmente ponderada. Ampliar nuestra investigación para incorporar diferentes carteras es una idea interesante que seguiremos durante la próxima fase de desarrollo. También estamos considerando implementar algunos de los enfoques bien conocidos para el análisis de seguridad que se utilizarán como puntos de referencia de rendimiento adicionales. Si usted o cualquier otra persona tiene sugerencias sobre qué enfoques pueden hacer buenos puntos de referencia, por favor hágamelo saber. Sus comentarios sobre el uso de otras medidas de rendimiento están a la orden. Definitivamente nos gustaría volver a mirar el marco de back-testing e investigar las maneras de hacerlo más riguroso y menos propenso a exceso de ajuste. También nos gustaría implementar funciones de aptitud adicionales que tomen en consideración medidas de riesgo de cartera, así como medidas de rendimiento excesivo (alfa). Examinaré las medidas que mencionó y veré cómo podemos incorporarlas a nuestro marco actual. También consideraremos cómo podría ser posible usar un framework de back-testing de código abierto como ZipLine, el marco de back-testing usado por quantopian. Sus observaciones acerca de la naturaleza y el uso de GAs y redes neuronales en finanzas es muy interesante. El desafío de hacer estos algoritmos más transparentes y, francamente, un poco menos aterrador, es uno que no debe tomarse a la ligera. Mi colega está trabajando actualmente en una tarea de investigación en la que intenta levantar el velo en algunas de las funciones internas de las Redes Neuronales. Si tiene éxito, entonces en vez de necesitar reciclar constantemente redes neuronales cuando algo sale mal, puede ser capaz de aislar la causa del problema en la red neuronal y adaptar su arquitectura en consecuencia. Está considerando usar una aplicación financiera del mundo real de redes neuronales en su investigación. Así que si usted tiene alguna idea sobre eso, por favor hágamelo saber Personalmente hablando, estoy trabajando actualmente en una tarea de investigación donde estoy tratando de construir un marco algorítmico para la selección y optimización de la cartera de carry trade. Hace uso de unos pocos algoritmos de Inteligencia Computacional y en adelante tendré en cuenta los problemas que ha mencionado. Trataré de identificar maneras de mitigar o eliminar esas preocupaciones en el marco. Gracias de nuevo por todos sus comentarios, agradecemos la retroalimentación. Si tiene más buenas ideas, póngase en contacto con nosotros. Comentario copiado de LinkedIn Computational Finance Group Creo que el enfoque más razonable para backtesting es comparar sus resultados con lo que sucede con el comercio al azar que aún obedece cualquier restricción que está imponiendo en la cartera. PyAlgoTrade es una biblioteca de intercambio algorítmico de Python centrada en backtesting y soporte para el comercio de papel y el comercio en tiempo real. Digamos que usted tiene una idea para una estrategia comercial y le gustaría evaluar con datos históricos y ver cómo se comporta. PyAlgoTrade le permite hacerlo con el mínimo esfuerzo. Características principales Totalmente documentado. Evento conducido . Soporta órdenes de Market, Limit, Stop y StopLimit. Soporta los archivos de Yahoo Finance, Google Finance y NinjaTrader CSV. Soporta cualquier tipo de datos de series de tiempo en formato CSV, por ejemplo Quandl. Bitcoin soporte comercial a través de Bitstamp. Indicadores técnicos y filtros como SMA, WMA, EMA, RSI, bandas de Bollinger, exponente de Hurst y otros. Métricas de rendimiento como Sharpe ratio y análisis de reducción. Manejo de eventos de Twitter en tiempo real. Profiler de eventos. Integración TA-Lib. Escalable Muy fácil de escalar horizontalmente, es decir, usar uno o más equipos para volver a probar una estrategia. Free PyAlgoTrade es libre, de código abierto, y está licenciado bajo la licencia Apache, versión 2.0. Este no es típicamente la forma en que los algoritmos genéticos están representados, y personalmente no creo que un algoritmo genético es el enfoque correcto para esto, pero no obstante Esto es ciertamente posible. Suponiendo que sólo desea interactuar con este conjunto específico de variables, tiene un pequeño conjunto de valores potenciales: esto significa que puede representar fácilmente estos como una lista plana: crossover es entonces sólo la mezcla de dos cromosomas en un punto de división específica: la mutación es entonces También relativamente trivial, simplemente cambiando un número al azar, cambiando el operador booleano, etc. Dejar que uno como un ejercicio para el lector sin embargo. Respondió Apr 7 14 at 17:09 Esto supone un flujo lineal de instrucciones en lugar de un árbol. Ndash Hugh Bothwell Apr 7 14 en 17:11 HughBothwell No lo hace. Esto es simplemente transmitir una estructura de árbol definida a una lista con un orden definido de aplicación a ese árbol para crossover. El diseño cromosómico aquí es independiente del árbol en sí, y OP no implica que querían realmente editar la estructura del árbol. Si lo hacen, cambiaré esta respuesta. Ndash Slater Tyranus Apr 7 14 en 17:14
No comments:
Post a Comment