1 votos

Desarrollo de algoritmo genético - estructura de cromosomas basada en compras y ventas

Crear un algoritmo genético para el trading intradía (por ejemplo, futuros ES, NQ) es más difícil que los ejemplos de libro de texto para la minimización/maximización de funciones de algoritmos genéticos. Inicialmente, asumí que los parámetros de compra y venta podrían colocarse dentro de cada cromosoma, pero ahora estoy pensando que cada cromosoma solo puede representar una compra o una venta, donde un solo parámetro de compra/venta (gen) $x$ en el cromosoma resultaría en una compra si $x>0.5$ y una venta si $x \leq 0.5$ dado el rango de parámetros [0,1].

Otro desafío al que me enfrento es que muchas de mis reglas son discretas (verdadero/falso) en lugar de niveles continuamente escalados de indicadores como el nivel de RSI, nivel de ADX, etc. Por ejemplo, tengo docenas de reglas de tipo cruzamiento y cruzamiento por debajo binarias (0-no,1-sí) que son verdaderas/falsas. Para estas reglas (genes), estoy asumiendo lógica booleana como compra=verdadero si $x>0.5$.

El último desafío es que con muchas reglas de cruzamiento y cruzamiento por debajo, es improbable que la mayoría de ellas sean verdaderas para una barra dada, por lo que el problema se convierte en encontrar la mejor combinación de reglas que, por ejemplo, maximice la proporción de Sharpe (Sortino). A la luz de lo anterior, ¿sería necesario tal vez inicializar cada cromosoma de manera que solo un gen esté configurado en $x=0.75$ y todas las demás reglas estén configuradas en $x=0.25$, para que inicialmente el valor de la aptitud (Sharpe) se base en compras/ventas si una regla única es verdadera?

Ciertamente, tiene que haber un "truco" al usar algoritmos genéticos cuando se consideran muchas reglas para cada cromosoma, y las probabilidades de que por ejemplo 10 reglas sean verdaderas son escasas, ya que solo unas pocas barras de cada 10,000 barras tendrían 10 reglas verdaderas.

Una cosa es cierta con cualquier algoritmo genético: el valor de cada gen en un cromosoma debe reflejarse en la aptitud, en otras palabras, no puedes tener genes que desencadenen acciones que no afecten la aptitud. Entonces, si la aptitud es como la altura de una persona (función objetivo), no puedes tener genes que codifiquen el color de ojos o cabello, ya que eso no ayudará a minimizar/maximizar la altura.

¿Existen documentos clásicos (capítulos) que describan la configuración de cromosomas para muchas reglas de trading binarias (sí/no)?

2voto

zdd Puntos 523

Según tu terminología, parece que estás utilizando GEP (programación de expresión génica), un subtipo de GA. ¿Hay alguna razón por la que no usarías GA puro para esto? No tengo mucha experiencia con GEP, pero generalmente parece más complicado sin agregar mucho más en este contexto.

De lo contrario, primero la(s) última(s) pregunta(s):

El último desafío es que con muchas reglas de cruce y cruce por debajo, es poco probable que la mayoría de ellas sean verdaderas para una barra dada, por lo que el problema se convierte en encontrar la mejor combinación de reglas que por ejemplo, maximiza la proporción de Sharpe(Sortino). A la luz de lo anterior, sería necesario quizás inicializar cada cromosoma de modo que solo un gen esté establecido en x=0.75 y todas las demás reglas estén establecidas en x=0.25, de modo que inicialmente el valor de aptitud (Sharpe) se basará en compras/ventas si una sola regla es verdadera?

Esta es más una pregunta de estrategia que una pregunta de GA. Para simplificar, asumiendo que estás considerando 10 criterios; decides, inicialmente, solo comerciar si se satisfacen los 10 criterios. La población resultante probablemente sería bastante pequeña dependiendo del activo, reglas de comercio y período de tiempo. Esto podría ser algo que podrías ajustar para obtener una población razonable para probar (es decir, establece r=número de criterios satisfechos igual a n de modo que tu población > 100, etc). También podrías permitir que tu GA tome la decisión por ti (es decir, tendría sentido que el GA 'elija' una estrategia con el Sharpe más alto sin restricciones adicionales).

Una cosa es segura con cualquier GA: el valor de cada gen en un cromosoma debe reflejarse en la aptitud, en otras palabras, no puedes tener genes que activan acciones que no afectan la aptitud. Entonces si la aptitud es como la altura de una persona (función objetivo), no puedes tener genes que codifiquen el color de ojos o cabello, ya que esos no ayudarán a minimizar/maximizar la altura.

Sí, pero ¿cómo sabes de antemano qué genes afectan la aptitud? Por ejemplo, dadas las señales que mencionaste, ¿cómo sabes si el RSI impactará más o menos en el Sharpe de la cartera que el ADX? Ese es también un poco el punto de GA... dejar que el algoritmo te diga cuáles tienen un impacto.

Generalmente, no hay ningún 'truco'. Parte de usar un GA de la manera que has mencionado es simplemente configurar tu estrategia de manera que se preste a un GA. Más allá de eso, organizar tus entradas y salidas de una forma que el GA pueda usarlas y puedas entenderlas.

También, la opinión de alguien (aunque de alguien que aplicó GA al comercio técnico en mercados de divisas como parte de mi tesis de maestría), usar GA para elegir un conjunto de reglas en las que comerciar en el futuro es simplemente una minería de datos/elaboración excesiva. Tu criterio de aptitud refleja el conjunto de reglas que resultaron ser las mejores para el(los) activo(s) en cuestión durante el período histórico. No tienes una idea real de lo que eso significa ni si debería o será aplicable en el futuro. Si estás haciendo esto como ejercicio de aprendizaje, adelante; si esperas extraer verdad y ganar dinero, probablemente procedería con precaución.

0 votos

Eventualmente planeo realizar pruebas fuera de la bolsa en segmentos de barra con ventana que no estén incluidos en el entrenamiento, al menos para intentar reducir el sobreajuste.

2voto

El enfoque requerido al utilizar un GA para determinar la combinación óptima de señales de indicadores para una regla de trading es intercalar aleatoriamente declaraciones lógicas AND u OR entre los resultados booleanos (verdadero, falso) de los indicadores, que son inicializados aleatoriamente usando por ejemplo.

$\text{si } (x>0.5) \rightarrow \text{ Y}$

$\text{si } (x \leq 0.5) \rightarrow \text{ O}$

donde el rango del gen $x$ es [0,1]. De esta manera, durante el entrenamiento la combinación de Y y O puede cambiar para mejorar. Al utilizar el mismo criterio para los genes con rango [0,1] para todas las secciones lógicas Y u O de un cromosoma, el GA modificará los valores reales de cualquier $x$ y premiará preferiblemente la mejor elección de (Y, O) que maximice la aptitud. Una vez hecho, aprenderá que por ejemplo solo se necesitan 2 de 5 indicadores para las entradas de operaciones (ver abajo) y se necesitan 3 para las salidas de operaciones.

Pero primero, un poco de terminología. Cada cromosoma se llama "estrategia" y consiste en dos segmentos de genes, un segmento de entrada a la operación (múltiples genes) y un segmento de salida de la operación (múltiples genes). Por lo tanto, un cromosoma puede representar tanto una posición larga como la salida de la posición larga, o ir en corto y salir en corto. De cualquier manera, los genes en un solo cromosoma codifican cómo entrar y salir del mercado, y el cromosoma completo representa una operación larga o corta con su salida.

La optimización de la combinación de indicadores utilizados para una entrada en la operación (salida) se logra mediante el uso de declaraciones lógicas Y u O colocadas aleatoriamente entre los resultados booleanos del indicador (verdadero, falso). Entonces, por ejemplo, si los indicadores utilizados para la entrada larga son SMACrossAbove, RSI, LinRegSlope, el lado izquierdo de un cromosoma podría ser (con declaraciones Y y O colocadas aleatoriamente):

SMACrossAbove | Y | RSI<30 | O | LinRegSlope>0.1

y el lado derecho podría ser

SMACrossBelow | O | RSI>70 | Y | LinRegSlope<-0.2

entonces cuando se complete el cromosoma entero es

SMACrossAbove | Y | RSI<30 | O | LinRegSlope>0.1 | SMACrossBelow | O | RSI>70 | Y | LinRegSlope<0.2

Una cosa es segura, si la lógica de entrada larga es verdadera, debe ir en largo, y si la lógica de salida es verdadera, debe salir del largo. No se puede mezclar entrar en largo con salir en corto, o mezclar entrar en largo con entrar en corto.

Un cromosoma completo para una posición corta podría ser el opuesto exacto como

SMACrossBelow | Y | RSI>70 | O | LinRegSlope<-0.02 | SMACrossAbove | O | RSI<30 | Y | LinRegSlope>0.1

También se pueden agregar genes en el cromosoma que codifiquen valores de indicadores como períodos cortos y largos para el cruce de SMA, el nivel de RSI, y los valores de pendiente de LinReg. (la intención aquí es optimizar los parámetros del indicador de la misma manera que generalmente se hace a través de una búsqueda exhaustiva histórica, optimización de enjambre de partículas, red neuronal, etc.)

Hay documentos que sugieren realizar cruces y mutaciones por separado para cromosomas de entrada larga y corta, pero creo que no es necesario.

Para una barra dada, una vez que determine si las señales de indicadores son verdaderas o falsas, si genera una cadena lógica para el segmento de entrada y una cadena para el segmento de salida, puede probar rápidamente (C#) si por ejemplo la cadena de entrada es verdadera mediante el uso de un DataTable(), como en:

string mylogic = "verdadero y falso o verdadero o falso y verdadero y verdadero";
System.Data.DataTable table = new System.Data.DataTable();
bool result = (bool)table.Compute(mylogic, "");

donde se pueden usar "not" y paréntesis.

Para la aptitud, se puede utilizar el cuadrado de la tasa de Sterling además de la tasa de Sharpe o de Sortino. También se pueden utilizar operaciones ganadoras porcentuales para la aptitud, definidas como aptitud = #operaciones_ganadoras / #operaciones. Aunque, a veces me gusta usar el beneficio promedio, que sería la suma(de la ganancia por operación)/#operaciones.

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