1 votos

Desarrollo del algoritmo genético - estructura cromosómica basada en la compra/venta

La creación de un algoritmo de AG para el comercio intradiario (por ejemplo, futuros ES, NQ) es más difícil que los ejemplos de libros de texto para la minimización/maximización de funciones de AG. Inicialmente, supuse que los parámetros de compra y venta podrían colocarse dentro de cada cromosoma, pero ahora estoy pensando que cada cromosoma sólo puede representar una compra o una venta, donde un único parámetro de compra/venta (gen) $x$ en el cromosoma resultaría en una compra si $x>0.5$ y vender si $x \leq 0.5$ rango de parámetros dado [0,1].

Otro reto al que me enfrento es que muchas de mis reglas son discretas (verdadero/falso) en lugar de niveles de escala continua de indicadores como el nivel RSI, el nivel ADX, etc. Por ejemplo, tengo docenas de reglas binarias (0-no,1-sí) de tipo cross-over y cross-below que son verdadero/falso. Para estas reglas (genes), estoy asumiendo una lógica booleana como buy=true si $x>0.5$ .

El último reto es que, con muchas reglas de cruce y cruce-descenso, la probabilidad de que la mayoría de ellas sean verdaderas para una barra determinada es improbable, por lo que el problema se convierte en encontrar la mejor combinación de reglas que, por ejemplo, maximice el ratio Sharpe(Sortino). A la luz de lo anterior, ¿sería necesario quizás inicializar cada cromosoma de tal manera que sólo un gen se establezca en $x=0.75$ y todas las demás reglas establecidas en $x=0.25$ ¿para que inicialmente el valor de aptitud (Sharpe) se base en las compras/ventas si una sola regla es verdadera?

Ciertamente, tiene que haber un "truco" al utilizar los AG cuando se consideran muchas reglas para cada cromosoma, y las probabilidades de que, por ejemplo, 10 reglas sean verdaderas son escasas, ya que sólo unas pocas barras por cada 10.000 barras tendrían 10 reglas verdaderas.

Una cosa es cierta en cualquier AG: el valor de cada gen en un cromosoma debe reflejarse en la aptitud, es decir, no se pueden tener genes que desencadenen acciones que no afecten a la aptitud. Por lo tanto, si la aptitud es como la altura de una persona (función objetivo), no se pueden tener genes que codifiquen el color de los ojos o del pelo, ya que éstos no ayudarán a minimizar/maximizar la altura.

¿Existe algún documento (capítulo) clásico que describa la configuración de los cromosomas para muchas reglas de negociación binarias (sí/no)?

2voto

zdd Puntos 523

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

Si no, primero la(s) última(s) pregunta(s):

El último reto es que con muchas reglas de cruce y cruce-baja, las probabilidades de que la mayoría de ellas sean verdaderas para un bar determinado son improbables, por lo que el problema se convierte en encontrar la mejor combinación de reglas que por ejemplo, maximice el ratio Sharpe(Sortino). Teniendo en cuenta lo anterior, ¿sería necesario sería necesario tal vez inicializar cada cromosoma de manera que sólo un gen se fije en x=0,75 y todas las demás reglas en x=0,25, de modo que inicialmente el valor de fitness (Sharpe) se basará en la compra/venta si una ¿una sola regla es verdadera?

Esta es una cuestión de estrategia más que de AG. Para simplificar, suponiendo que tiene 10 criterios que está considerando; usted decide, inicialmente, sólo el comercio si los 10 criterios se cumplen. Su población resultante sería probablemente bastante pequeña dependiendo del activo, las reglas de negociación y el período de tiempo. Esto podría ser algo que usted podría ajustar para obtener una población razonable para las pruebas (es decir, establecer r =número de criterios satisfechos igual a n tal que su población > 100, etc). También podría permitir que su AG tomara la decisión por usted (es decir, sería lógico que el AG "eligiera" una estrategia con el Sharpe más alto en ausencia de restricciones adicionales).

Una cosa es segura con cualquier AG: el valor de cada gen en un cromosoma debe reflejarse en la aptitud, en otras palabras, no se puede tener genes que desencadenen acciones que no afecten a la aptitud. Así que si la aptitud es como la altura de una persona (función objetivo), no se puede tener genes que codifiquen el color de los ojos o del pelo, ya que éstos no ayudarán a a minimizar/maximizar la altura.

Sí, pero ¿cómo se sabe a priori qué genes afectan a la aptitud? Por ejemplo, dadas las señales a las que te refieres, ¿cómo sabes si el RSI afectará al Sharpe de la cartera más o menos que el ADX? Ese es también el objetivo de los AG... dejar que el algoritmo te diga cuáles tienen un impacto.

Sin embargo, en general, no hay ningún "truco". Parte de la utilización de un AG en la forma en que se ha referido es simplemente la configuración de su estrategia de tal manera que se presta a GA. Más allá de eso, organizar tus entradas y salidas de manera que el AG pueda utilizarlas y tú puedas darles sentido.

Además, en la opinión de un tipo (aunque un tipo que aplicó GA a la negociación técnica en los mercados de divisas como parte de mi tesis de maestría), el uso de GA para elegir un conjunto de reglas para el comercio en el futuro es realmente sólo elaborado datamining / overfitting. Su criterio de idoneidad refleja el conjunto de reglas que mejor funcionaron en el activo(s) en cuestión durante el período histórico. No tienes ni idea de lo que significa ni de si debería o será aplicable en el futuro. Si estás haciendo esto como un ejercicio de aprendizaje, por todos los medios; si estás esperando extraer la verdad y ganar dinero, probablemente procedería con precaución.

0 votos

En algún momento planeo realizar pruebas fuera de la bolsa en segmentos de barras con ventanas no incluidas en el entrenamiento, al menos para intentar reducir el sobreajuste.

2voto

El enfoque requerido cuando se utiliza un AG para determinar el óptimo combinación de las señales de los indicadores para una regla de negociación es intercalar declaraciones lógicas Y u O colocadas al azar entre los resultados booleanos (verdadero,falso) de los indicadores, que se inicializan al azar utilizando, por ejemplo

$\text{if } (x>0.5) \rightarrow \text{ AND}$

$\text{if } (x \leq 0.5) \rightarrow \text{ OR}$

donde la gama de genes $x$ es [0,1]. De esta manera, durante el entrenamiento la combinación de AND y OR puede cambiar a mejor. Utilizando el mismo criterio para los genes con rango [0,1] para todas las secciones lógicas AND u OR de un cromosoma, el AG modificará los valores reales de cualquier $x$ y recompensar preferentemente la mejor elección de (AND, OR) que maximice la aptitud. Una vez hecho esto, aprenderá que, por ejemplo, sólo se necesitan 2 de los 5 indicadores para la entrada de operaciones (véase más abajo) y 3 para la salida de operaciones.

Pero primero, un poco de terminología. Cada cromosoma se denomina "estrategia" y consta de dos segmentos de genes, un segmento de entrada en la operación (varios genes) y un segmento de salida de la operación (varios genes). Por lo tanto, un cromosoma puede representar el ir en largo y salir en largo, o ir en corto y salir en corto. En cualquier caso, los genes de un solo cromosoma codifican cómo entrar y salir del mercado, y todo el cromosoma representa una operación larga o corta con su salida.

La optimización de la combinación de indicadores utilizados para la entrada(salida) de una operación se realiza mediante el uso de declaraciones lógicas Y y O colocadas al azar entre los resultados booleanos de los indicadores (verdadero,falso). Así, por ejemplo, si los indicadores utilizados para la entrada en largo son SMACrossAbove, RSI, LinRegSlope, el lado izquierdo de un cromosoma sería (con AND y OR colocados al azar):

SMACrossAbove | AND | RSI<30 | OR | LinRegSlope>0.1

y el lado derecho podría ser

SMACrossBelow | OR | RSI>70 | AND | LinRegSlope<-0.2

por lo que cuando se hace todo el cromosoma es

SMACrossAbove | AND | RSI<30 | OR LinRegSlope>0.1 | SMACrossBelow | OR | RSI>70 | AND | LinRegSlope<0.2

Una cosa es cierta, si la lógica de entrada en largo es verdadera debes ir en largo, y si la lógica de salida es verdadera debes salir en largo. No se puede mezclar enter long con .e.g. exit short (cover), o mezclar enter long con enter short.

Toda una configuración de cromosomas para el cortocircuito podría ser exactamente lo contrario como

SMACrossBelow | AND | RSI>70 | OR | LinRegSlope<-0.02 | SMACrossAbove | OR | RSI<30 | AND | LinRegSlope>0.1

También puede tener (añadir) genes en el cromosoma que codifican para los valores de los indicadores como las longitudes de los períodos cortos y largos para el cruce de la SMA, el nivel del RSI y los valores de la pendiente de la LinReg. (la intención aquí es optimizar los parámetros de los indicadores de la misma manera que se suele hacer a través de la búsqueda exhaustiva histórica, la optimización del enjambre de partículas, la red neuronal, etc.)

Hay artículos que sugieren realizar el cruce y la mutación por separado para los cromosomas de entrada largos, y los cromosomas de entrada cortos, pero creo que no es necesario.

Para una barra dada, una vez que determine si las señales del indicador 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 la cadena de entrada, por ejemplo, es verdadera mediante el uso de una DataTable(), como en

string mylogic = "true and false or true or false and true and true";
System.Data.DataTable table = new System.Data.DataTable();
bool result = (bool)table.Compute(mylogic, "");

donde se puede utilizar "no" y paréntesis.

Para la aptitud, se puede utilizar el cuadrado de la ratio Sterling además de la ratio Sharpe o Sortino. El porcentaje de operaciones ganadoras también puede utilizarse para la aptitud, definida como aptitud = #operaciones_ganadoras / #operaciones. Aunque a veces me gusta utilizar el beneficio medio, que sería la suma (rendimiento 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