Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 10

 

Gracias, he mirado las columnas, en principio ya lo he hecho también, deltas, min, max, tiempo, etc.

La forma de crear un modelo de comercio de divisas para mí sólo se complica, las formas simples no dan resultados estables. La forma en que lo veo ahora es la siguiente:

1) descargar los datos de MT5: ohlc, tiempo, indicadores. En este momento no voy a añadir deltas.

2) cargar los datos en R, añadirle un gran número de columnas nuevas sumando, restando, min, max, etc. de los datos iniciales. Es más fácil hacerlo en R que en mt5.

3) Seleccionar de alguna manera subconjuntos de datos de entrada (por columnas). Puedo seguir el ejemplo de Alexey usando GenSA o simplemente la optimización genética usando el paquete GA. Como sólo necesito un resultado binario por entrada (on/off), GA tiene una ventaja en mi opinión, tiene un modo de funcionamiento binario. Pero tengo que probar y comparar ambos paquetes.

4) Análisis de subconjuntos de entradas. Esto también está en el ejemplo de Alexei. Pero me arriesgaré a entrenar el modelo en un subconjunto de entradas de inmediato, y utilizaré el error de los datos de validación como resultado. Siempre que el tiempo de aprendizaje del modelo no sea superior a un par de segundos.

5) Vuelva al paso 2, añada nuevas entradas contadas, realice otros pasos, pase por esos ciclos hasta que el resultado deje de mejorar.

También he experimentado un poco con el artículo sobre el método de los componentes principales. Hay un matiz en el ejemplo del artículo que dice que el resultado se puede calcular exactamente a partir de los datos de entrada. En mi caso, cuando los datos de entrada son obviamente insuficientes, este método comienza a utilizar el ruido para el aprendizaje. Resulta que si este método puede alcanzar un resultado (r-cuadrado) de 0,95 con sólo un par de componentes, entonces lo más probable es que los predictores utilizados en el modelo sean correctos. Si incluso utilizando todos los componentes, la r-cuadrado sigue siendo inferior a 0,95, el modelo incluye ruido en sus cálculos. Sin embargo, cabe destacar que, a medida que se añaden predictores de ruido adicionales, la r-cuadrado disminuye poco a poco. Creo que de esta manera se pueden comparar subconjuntos de predictores entre sí: si el r-cuadrado es mayor, entonces el subconjunto es mejor.

 
Dr.Trader:


También he experimentado un poco más con el artículo sobre el método de componentes principales. En el ejemplo del artículo se matiza que el resultado puede calcularse con precisión a partir de los datos de entrada. En mi caso, cuando los datos de entrada son obviamente insuficientes, este método empieza a utilizar el ruido para el aprendizaje. Resulta que si este método puede alcanzar un resultado (r-cuadrado) de 0,95 con sólo un par de componentes, entonces lo más probable es que los predictores utilizados en el modelo sean correctos. Si incluso utilizando todos los componentes, la r-cuadrado sigue siendo inferior a 0,95, el modelo incluye ruido en sus cálculos. Sin embargo, cabe destacar que, a medida que se añaden predictores de ruido adicionales, la r-cuadrado disminuye poco a poco. Creo que es una forma de comparar subconjuntos de predictores entre sí: si el r-cuadrado es mayor, el subconjunto es mejor.

Hasta ahora, lo que parece que tenemos en términos de preselección de predictores que son "relevantes" para la variable objetivo: Alexey tiene algún conjunto de técnicas y yo también. No sería mala idea tener otro. La PCA es muy atractiva, ya que es ampliamente conocida, con mucha literatura .... No obstante, hay un gran número de algoritmos que calculan la "importancia" de los predictores, pero no he conseguido utilizarlos. Pero en combinación con mi algoritmo, casi cualquiera de estos algoritmos estándar da buenos resultados: el error se reduce en un 5-7%.

Y el número de predictores iniciales, creo, debería ser de unas pocas docenas con varios miles de observaciones. En estadística, si algo no es suficiente, entonces no hay estadística.

 
Dr.Trader:

Gracias, he mirado las columnas, en principio ya lo he hecho también, deltas, min, max, tiempo, etc.



De nada. También puedes practicar con mi equipo. Hay un diseño de calidad del experimento. Los datos son buenos. Y obtener un resultado positivo en la validación no es nada fácil.

1) Descargue los datos de MT5: ohlc, tiempo, indicadores. No voy a añadir deltas en esta etapa.

2) cargar los datos en R, añadirles un gran número de columnas nuevas sumando, restando, min, max, etc. las originales. Es más fácil hacerlo en R que en mt5.

3) Seleccionar de alguna manera subconjuntos de datos de entrada (por columnas). Puedo seguir el ejemplo de Alexey usando GenSA o simplemente la optimización genética usando el paquete GA. Como sólo necesito un resultado binario por entrada (on/off), GA tiene una ventaja en mi opinión, tiene un modo de funcionamiento binario. Pero hay que probar y comparar ambos paquetes.

Aquí aconsejaría mantener dos puntos: primero - las entradas deben ser todasvdosestacionarias con respecto a su media. Segundo - sobre el mecanismo de enumeración de columnas; sí, GA tiene modo binario. GenSA no lo hace, pero he simulado la selección binaria.

4) Análisis de subconjuntos de entradas. Esto también está en el ejemplo de Alexei. Pero me arriesgaré a entrenar el modelo en una submuestra de entradas de inmediato, y utilizaré el error de los datos de validación como resultado. Siempre que el tiempo de aprendizaje del modelo no sea superior a un par de segundos.

¡Buena idea! Pero hay que tener en cuenta que todo el proceso puede llevar mucho tiempo, ya que normalmente se necesitan miles de iteraciones. Esta función de aptitud es la más compleja, ya que calcula todo el modelo. Yo, en cambio, aplico la llamada función de fitness de filtrado, en la que no hay aprendizaje como tal, sino que hay una heurística que determina cuánto afectan las entradas a la salida en un sentido más amplio. El cálculo puede ser más rápido que dos segundos. Pero no por un orden de magnitud.

La forma de crear un modelo de comercio de divisas para mí sólo se complica, las formas simples no producen resultados consistentes. De momento lo veo así:

Hasta ahora he renunciado a añadir nuevos predictores y todo tipo de pequeñas mejoras en el diseño del experimento.

Tengo una idea que me ronda y que aún no he puesto en práctica. La cuestión es que nosotros, usted y todos los demás, solemos predecir una determinada condición de cierre de la operación, por ejemplo, con 3 horas de antelación o cuando el precio alcanza un nivel de toma o de parada.

Y se obtienen pésimos resultados. Y cuando introduzco varias condiciones concurrentes en MT4 para cerrar una operación, que se trabajan a través del operador OR, consigo obtener un OM positivo incluso fuera de la muestra.

Así que me preguntaba cómo podría simular en R la predicción del resultado de una operación basada en varias condiciones a la vez. Por ejemplo, si el precio alcanza el TP dentro de 3 horas, entonces ciérrelo. Pero el parámetro de las 3 horas no debe fijarse de forma rígida, ya que debe elegirse de forma óptima. Y si además añadimos una condición de que si el precio es positivo dentro de 3 horas, pero no ha alcanzado el TP, debemos dibujar el STOP al Breakeven.

En este caso, la máquina también predice la posición de entrada.

Esa es la tarea en mente.

 
Alexey Burnakov:

Así que me preguntaba cómo podría simular en R la predicción del resultado de una operación basada en varias condiciones a la vez. Por ejemplo, si el precio alcanza el TP dentro de 3 horas, entonces ciérrelo. Pero el parámetro de las 3 horas no debe fijarse de forma rígida, ya que debe elegirse de forma óptima. Y si además añadimos una condición de que si el precio está ganando dentro de 3 horas, pero no ha alcanzado el TP, tenemos que dibujar el STOP al Breakeven.

Por la experiencia de operar con EAs no me gustan los TP y SL. Si el sistema de trading está correctamente construido, entonces sus propias salidas de las operaciones serán más efectivas que las salidas basadas en TP y SL.

Los valores óptimos de SL y TP cambian con el tiempo, no hay un valor constante estable. Podemos encontrar algunos valores que mejoren la eficiencia del sistema de comercio en un determinado período, pero en este caso la eficiencia de la estrategia disminuirá más allá de este período. Es mejor no mover el SL, sino mantenerlo a la distancia de "algo salió mal" y dejar de operar por completo si el precio alcanza el SL, para el análisis de errores y la optimización de la estrategia de negociación.

Pero hay algunos EAs inteligentes de auto-optimización que utilizan TP. Entiendo que ya deberíamos introducir una constante TP en el conjunto de entrenamiento. Por ejemplo en mi caso el resultado de la formación de TP es 0/1 - el precio ha aumentado/disminuido en la siguiente barra. Pero si el precio ha aumentado y ha alcanzado el nivel de TP, entonces al final de la barra ha caído por debajo del nivel inicial - en el entrenamiento se establece el resultado "1", no "0" (porque la operación se cerrará con un beneficio en TP, y no habrá más operaciones hasta el final de la barra). El TP suele ser pequeño, menos de 50 puntos (5 pips en los cuatro dígitos). SL es decenas de veces más grande, por si acaso "todo saliera mal". El TP para el fronttest o el trade no puede ser optimizado, sólo el utilizado al crear una muestra de entrenamiento. He visto estrategias tan exitosas que creo que vale la pena indagar en esta dirección.

 
Dr.Trader:

Desde la experiencia de los expertos en trading no me gustan los TPs y SLs. Si el sistema de trading se construye correctamente, sus propias salidas de las operaciones serán más efectivas que las salidas basadas en TPs y SLs.


¿Y cómo se formulan sus propias salidas? ¿Sólo por el tiempo?

Si se dice que hay que cerrar en una hora, pero si dentro de una hora se rompe el TP, eso sería el resultado 1, entonces ya se están utilizando condiciones de cierre complejas.

Acerca de TP de 5 pts y SL de decenas de veces más - como una opción, pero tales TP se comerá el beneficio.

 

Estoy con vosotros esta semana y la anterior separados por zonas horarias, así que no tengo dialgo en directo. Estoy en California por trabajo, así que...

De todos modos, creo que yo (quizá tú también) ya puedo planificar bien el experimento, entrenar y validar los resultados. También se pueden reclutar predictores de forma redundante.

Creo que la pega es que predecir una operación basándose en un objetivo fijo, como el cierre en una hora, no es óptimo, y los resultados son débiles.

En el probador de MT optimizo en base al equilibrio y al factor de recuperación. En R optimizo la precisión de adivinar direcciones o predecir diferencias de precios. Son cosas diferentes, se mire como se mire.

Tal vez intente escribir su propia función de pérdida en R para el método de aprendizaje, donde se maximiza el beneficio, por ejemplo. Esta función puede ser sustituida en algunos métodos de aprendizaje.

 
Alexey Burnakov:

Estoy con vosotros esta semana y la anterior separados por zonas horarias, así que no tengo dialgo en directo. Estoy en California por trabajo, así que...

De todos modos, creo que yo (quizá tú también) ya puedo planificar bien el experimento, entrenar y validar los resultados. También se pueden reclutar predictores de forma redundante.

Creo que la pega es que predecir una operación basada en un objetivo fijo, como el cierre en una hora, no es óptimo, y los resultados son débiles.

En el probador de MT optimizo en base al equilibrio y al factor de recuperación. En R optimizo la precisión de adivinar direcciones o predecir diferencias de precios. Son cosas diferentes, se mire como se mire.

Tal vez intente escribir su propia función de pérdida en R para el método de aprendizaje, donde se maximiza el beneficio, por ejemplo. Esta función puede sustituirse en algunos métodos de aprendizaje.

Últimamente he puesto en práctica el siguiente plan.

Implementé mi antiguo EA basado en el indicador de tendencia. Es un sólido Asesor Experto que opera en una cuenta real.

Siguiente.

Busco sus inconvenientes y trato de mejorarlos utilizando R.

Por ejemplo.

Tomo la dirección general de la barra alta. Sin embargo, si me fijo bien en el tiempo, hay un retraso tremendo en cuanto a las barras inferiores, sobre todo en cuanto a las barras. Así que si es D1, y comercio en M5, resulta que tomo casi el día antes de los datos de ayer para la dirección. Incluso la predicción de un paso adelante para D1 con un 30% de error ha mejorado radicalmente la rentabilidad de EA y, lo que es más importante, ha aumentado la confianza en que no se agotará.

¿Qué tal de esta manera - prediciendo en R algunos elementos de un EA ya hecho, incluso malo, con el fin de actualizarlo?

¿Cómo se puede encontrar una idea así?

 

Recientemente escribí un artículo para smart-lab. Una comunidad débil, pero con algo útil:

http://smart-lab.ru/search/topics/?q=%D0%B4%D0%BB%D1%8F+%D0%BB%D1%8E%D0%B1%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9+fx

 
SanSanych Fomenko:

Últimamente he aplicado el siguiente plan.

Tomé mi viejo asesor de tendencias en los indicadores. Es un Asesor Experto completo que opera en una cuenta real.

Ahora estoy buscando sus inconvenientes y tratando de disminuirlos utilizando R.

Busco sus inconvenientes y trato de mejorarlos utilizando R.

Por ejemplo.

Tomo la dirección general de la barra alta. Sin embargo, si me fijo bien en el tiempo, hay un retraso tremendo en cuanto a las barras inferiores, sobre todo en cuanto a las barras. Así que si es D1, y comercio en M5, resulta que tomo casi el día antes de los datos de ayer para la dirección. Incluso predecir un paso adelante para el D1 con un 30% de error ha mejorado radicalmente la rentabilidad de EA, y lo que es más importante, ha aumentado la confianza en que no se agotará.

¿Qué tal de esta manera - prediciendo en R algunos elementos de un EA ya hecho, incluso malo, con el fin de actualizarlo?

¿Cómo se puede encontrar una idea así?

La idea es interesante, yo también tengo algunos EAs que funcionan. Tal vez piense en cómo actualizarlos. Pero no entiendo qué es lo que hay que mejorar exactamente. ¿Qué necesita aprender la máquina?

El Asesor Experto tiene una lógica rígida para abrir y cerrar posiciones. En el aprendizaje automático, la decisión se toma de forma ligeramente diferente.

Por lo tanto, no está muy claro qué es lo que va a hacer exactamente.

 
Alexey Burnakov:

Es una idea interesante, yo también tengo EAs trabajando. Tal vez piense en cómo actualizarlos. Pero no me queda claro qué es lo que hay que mejorar exactamente. ¿Qué hay que enseñar a la máquina?

El Asesor Experto tiene una lógica rígida para abrir y cerrar posiciones. En el aprendizaje automático, la decisión se toma de forma ligeramente diferente.

Por lo tanto, no está del todo claro qué es lo que va a hacer exactamente.

Lo que vas a hacer está claro. Lo que no está claro es por qué lo necesitamos. En primer lugar, si hay un sistema que analiza la corrección del otro sistema y/o controla los parámetros, entonces el sistema controlado se vuelve innecesario, porque si se usan juntos, la eficiencia total de ambos disminuirá a la vez y será menor que si se usan por separado. Por ejemplo, si hay un sistema que da un 70% de decisiones correctas, y hay un sistema que puede controlar uno o más parámetros con un 99% de precisión, entonces la eficiencia final será igual:

0,7*0,99=0,693

que es inferior a los sistemas por sí solos.

Amén. Es mejor intentar mejorar el sistema original sin "controladores".

Razón de la queja: