Aplicación práctica de las redes neuronales en el trading

22 septiembre 2020, 17:07
Andrey Dibrov
1
2 246

Introducción

En este artículo, vamos a hablar de la aplicación de las redes neuronales al crear robots comerciales. Esto en cuanto al tema concreto. En un aspecto más amplio, trataremos de responder a una serie de preguntas y analizar varios problemas:

  1. ¿Es posible construir un sistema rentable utilizando el aprendizaje de máquinas?
  2. ¿Qué pueden ofrecernos las redes neuronales?
  3. La base lógica del entrenamiento de las redes neuronales yace en la toma de decisiones.
  4. ¿Una red neuronal es algo complejo o simple?
  5. ¿Cómo integrar una red neuronal en un terminal comercial?
  6. ¿Cómo poner a prueba una red neuronal? Etapas de prueba.
  7. Sobre las muestras de entrenamiento.


1. ¿Es posible construir un sistema rentable utilizando el aprendizaje de máquinas?

Seguramente, cada principiante que llegue al mercado de divisas e intenta de verdad comerciar en él sin tener ningún sistema, tomará una hoja de papel para dibujar un recuadro con los indicadores que le gustan. A continuación, frente a cada uno de estos indicadores, pondrá signos de más y menos, o bien flechas, o quizá porcentajes de probabilidad para el movimiento de los precios, partiendo del gráfico del indicador en el terminal. Después, sacará conclusiones basándose en sus observaciones, y tomará una decisión determinada sobre la entrada en el mercado en una dirección determinada, y si avanza aún más lejos, también decidirá si entrar en general en el mercado o quedarse fuera del mismo.

Y aquí, llega el momento de pensar: ¿qué sucede en la red neuronal más perfecta, es decir, en nuestro cerebro?. Y resulta que todo es muy sencillo: tras observar estos indicadores, en nuestra cabeza se formará una imagen de un indicador general que nos mandará una señal, y sobre cuya base tomaremos una decisión. O, si el lector lo prefiere así, una cadena de señales se formará en el indicador. Y de nuevo tendremos que reflexionar: si estudiamos los indicadores en un determinado momento temporal y miramos al máximo pasado en varios periodos, ¿cómo podremos investigar simultáneamente estos indicadores durante varios años atrás y construir sobre esta investigación un indicador único que permita al usuario optimizarlo posteriormente?

Bien, ya hemos obtenido respuesta a la segunda pregunta: ¿qué puede ofrecernos una red neuronal como resultado de su entrenamiento? Resultaría incluso más conveniente reformular la pregunta: ¿qué queremos obtener de una red neuronal como resultado de su entrenamiento? Y, tras reflexionar de forma lógica, también podemos responder a la primera pregunta positivamente, dado que, desde un punto de vista técnico y programático, esto se puede hacer. Podrá ver cómo se implementa esto en la práctica en el siguiente vídeo del canal del autor https://youtu.be/5GwhRnSqT78, y también ver una lista de reproducción con el vídeo de la prueba online de los módulos de redes neuronales en el mismo canal https://youtu.be/3wEMQOXJJNk


2. La base lógica del entrenamiento de las redes neuronales yace en la toma de decisiones

Antes de proceder al desarrollo de cualquier sistema comercial, nos hacemos la pregunta: ¿sobre qué principios funcionará este sistema? Tenemos dos principios esenciales: el uso de los flats y la continuación de la tendencia. No vamos a analizar los derivados de los mismos con un perfil más concreto: el comercio intradía, con datos fundamentales, con noticias, sobre la apertura de mercados, etcétera. Nos hemos encontrado con la descripción de productos de redes neuronales donde los autores proponían en sus ejemplos de uso la pronosticación de algunos tipos de cambio, acciones, divisas, etcétera.

Gráfico de respuesta de una red neuronal al pronóstico de precio

1. Gráfico de respuesta de una red neuronal al pronóstico de precio

Tras analizar el gráfico de respuesta de una red neuronal entrenada para el pronóstico del precio, podemos ver que, aunque repite lo expuesto por el gráfico de precios, se queda un paso por detrás del mismo. Además, esto no depende de si estamos pronosticando datos de precio o datos derivados de ello. Partiendo de lo dicho, podemos postular la siguiente conclusión. Por ejemplo: “Lo que para nosotros es ayer, para una red neuronal es hoy”. El lector estará de acuerdo con que, en principio, no podemos hablar de utilidad alguna. No obstante, destacaremos que podemos utilizar esta variante, eso sí, con alguna mejora concreta.

Pero nosotros, claro está, querríamos valernos del postulado: “Lo que para la red neuronal es hoy, para nosotros será mañana”. Una máquina del tiempo, en cierto sentido. Sin embargo, entendemos que, a pesar de todo, la mejor red neuronal es nuestro cerebro, y también que podemos utilizar este postulado como máximo con un 50% de éxito (si hablamos de probabilidad, sí o no), o incluso peor. No obstante, existe una tercera opción: “Lo que para la red neuronal es ayer, para nosotros es hoy”. O bien: “Lo que para nosotros es hoy, para la red neuronal es ayer”.  Vamos a analizar qué significan para nosotros estos postulados en el trading:

  • según el primero: realizamos una transacción y mañana obtenemos una respuesta de la red neuronal sobre si se ha abierto en la dirección correcta o no. Aunque esto ya lo sabemos sin la red neuronal.
  • según el segundo: obtenemos información de la red neuronal, realizamos la transacción y vemos mañana si la recomendación ha sido acertada o no.
  • según el tercero: obtenemos de la red neuronal la información sobre cuándo necesitamos realizar esta u otra transacción, más concretamente, sobre si debemos realizar la transacción en el momento actual, y en qué dirección.

La primera variante, claro está, la descartamos de inmediato. La segunda y la tercera, por el contrario, son adecuadas para el comercio. No obstante, la segunda supone una especie de intento de ver el futuro. Siendo un poco exagerados, esta variante de comercio consiste en obtener una señal de la red neuronal en un momento determinado (por ejemplo, en el cierre del día), con el pronóstico sobre cómo se cerrará el día siguiente (y en este momento, no nos interesa el movimiento de precio hasta el cierre de la transacción). Implementarlo para el comercio puramente mecánico resulta complicado en esta etapa (para practicar un comercio rentable). El sentido de la tercera variante consiste en monitorear la respuesta de la red neuronal durante la sesión comercial y, o bien comprar o bien vender, interpretando esta. Aquí, debemos comprender lo esencial,

a saber, la variante que podremos implementar depende de la forma en que vamos a entrenar la red neuronal. Y, como el lector comprenderá, la tercera variante es la más sencilla de implementar. Mientras que en la segunda vamos a utilizar algún tipo de información con la intención de obtener algún resultado al día siguiente, su cierre (hemos elegido un día como ejemplo, pero puede ser cualquier otro periodo), en la tercera variante, utilizaremos la información que ha llegado un paso antes de tomar la decisión: hacia dónde se moverá el precio en este momento. En nuestros sistemas, seguimos la tercera variante.


3. ¿Una red neuronal es algo complejo o simple? 

Si hablamos sobre el desarrollo de un sistema comercial con la ayuda de redes neuronales, es lógico que nos surjan las preguntas: ¿de dónde podemos tomar la propia red neuronal, y cómo podemos entrenarla e integrarla en un terminal comercial? En esta etapa, nos limitaremos a usar redes neuronales preparadas de “NeuroSolutions” y Matlab. Estas plataformas nos permiten seleccionar una red neuronal adecuada, entrenarla y transformarla en un archivo ejecutable con la interfaz necesaria. Como resultado, la propia red neuronal puede tener el aspecto siguiente:

Módulo de una red neuronal creada en el entorno Matlab

2. Módulo de una red neuronal creada en el entorno Matlab

o este aspecto:

Módulo de una red neuronal desarrollada en el entorno Neuro Solutions

3. Módulo de una red neuronal desarrollada con la ayuda de Neuro Solutions

Tras analizar las posibilidades de aplicación de las redes neuronales a los mercados financieros, llegamos a la conclusión de que las redes, además de usarse como el principal suministrador de señales en la toma de decisiones, también deberían verse como una excelente oportunidad para descargar una parte del software del experto en los terminales comerciales. Imagine usted que decide escribir un asesor que utilizará una docena de indicadores, más los propios indicadores con diferentes parámetros, que además necesitarán ser analizados y comparados en alguna profundidad temporal, siendo utilizados para ello, asimismo, varios marcos temporales... Resultaría ser un asesor bastante sobrecargado para el comercio real y, lo que es más importante, sería difícil de poner a prueba.

Pero podemos proponer una función del terminal que se encargue de calcular los indicadores en una red neuronal, entrenándolos de una cierta forma. Y ya después entrenar la red neuronal con estos indicadores. Es decir, necesitaremos transmitir del experto al módulo de la red neuronal solo los datos de precio relativos que se utilizan en las fórmulas de los indicadores. Y, como consecuencia, recibiremos de la red neuronal solo “unos” y “ceros”, cuya comparación nos ayudará a tomar una decisión.

Vamos a usar el oscilador estocástico como ejemplo de análisis, a ver qué conseguimos. Utilizaremos estos datos de precio como entradas. Como ejemplo de entrenamiento, usaremos el propio indicador.

Datos de precio

4. Datos de precio

FileWrite(handle,
                   
                   iClose(NULL,0,i+4)-iLow(NULL,0,i+4),
                   iHigh(NULL,0,i+4)-iClose(NULL,0,i+4),
                   iHigh(NULL,0,i+4)-iLow(NULL,0,i+4),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+4))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+4)),
                   
                   iClose(NULL,0,i+3)-iLow(NULL,0,i+3),
                   iHigh(NULL,0,i+3)-iClose(NULL,0,i+3),
                   iHigh(NULL,0,i+3)-iLow(NULL,0,i+3),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+3))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+3)),
                   
                   iClose(NULL,0,i+2)-iLow(NULL,0,i+2),
                   iHigh(NULL,0,i+2)-iClose(NULL,0,i+2),
                   iHigh(NULL,0,i+2)-iLow(NULL,0,i+2),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+2))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+2)),
                   
                   iClose(NULL,0,i+1)-iLow(NULL,0,i+1),
                   iHigh(NULL,0,i+1)-iClose(NULL,0,i+1),
                   iHigh(NULL,0,i+1)-iLow(NULL,0,i+1),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+1))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+1)),
       
                   iClose(NULL,0,i)-iLow(NULL,0,i),
                   iHigh(NULL,0,i)-iClose(NULL,0,i),
                   iHigh(NULL,0,i)-iLow(NULL,0,i),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i)),
 
                   iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,i),
                   TimeToStr(iTime(NULL,60,i)));

Después de entrenar la red neuronal, esta nos dará el siguiente resultado.

Respuesta de la red neuronal

5. Respuesta de la red neuronal

Para realizar una mejor investigación visual, hemos trasladado estos datos en forma de indicador al terminal comercial.

Estocástico e indicador de la red neuronal

6. Estocástico e indicador de red neuronal

En la ventana superior, podemos observar el indicador construido por el terminal, y más abajo, el construido por la red neuronal. Incluso de forma visual, podemos comprender que el indicador construido por la red neuronal tiene todas las características de un indicador estándar: niveles, cruzamientos, virajes, divergencias, etcétera. Aunque no hemos utilizado ni una sola fórmula compleja para entrenar la red.

De esta forma, podemos dibujar un esquema de este tipo para el sistema comercial.

Esquema de bloques del sistema comercial

7. Esquema de bloques del sistema comercial

Los bloques “MT4” constituyen nuestro asesor experto. El archivo de precios es “Input_mat”. El archivo de la señal es “Open1,2,3”. En el siguiente apartado, presentamos ejemplos de estos archivos.

La parte principal del trabajo la realizaremos con los bloques “Net1” y “Net2”. A la hora de prepararlos, deberemos usar varios scripts y expertos para preparar los datos históricos y simular las señales de estos bloques con la ayuda de nuestro experto. Pero, en realidad, cuando nuestro sistema esté listo como complejo, la modificación de este, su desarrollo y la experimentación con el mismo no ocuparán mucho tiempo. Como ejemplo, usted podrá ver el vídeo https://youtu.be/k_OLEKJCxPE. Es decir, la preparación de los archivos, el entrenamiento de “Net1” y “Net2” y la primera etapa de la simulación con la que podemos optimizar nuestros sistema, ocuparán 10 minutos.


4. Integración de la red neuronal en el terminal comercial

Integración de la red neuronal y el terminal comercial no suponen especial problema. Hemos resuelto esta cuestión mediante la transmisión de información a través de los archivos creados por el terminal y la red neuronal programática. Si alguien afirmase que esto ralentiza las acciones del sistema en cuanto a la toma de decisiones, nosotros podríamos destacar en cambio las principales ventajas de dicho modo de transmisión de la información. En primer lugar, podemos mencionar que la información transmitida por el terminal es mínima, de apenas unas cuantas decenas de bytes. Eche un vistazo a la línea del archivo registrada por el terminal.

Archivo de precios normalizados

8. Archivo de precios normalizados

Aunque el propio modo de transmisión de la información de forma programática nos ofrece la posibilidad de abrir solo en el próximo tick tras la llegada de la señal de la red neuronal. Pero si el sistema no tiene un plazo demasiado corto de ejecución de trasnacciones, esto no resulta esencial. Adelantándonos un poco, destacaremos que, en el presente artículo, estamos analizando un sistema que funciona “según los precios de apertura”. Y, adelantándonos nuevamente un poco, y partiendo de lo ya mencionado, llegamos a la conclusión de que los sistemas con este modo de transmisión de la información requieren de pruebas que utilicen o bien los puntos de control, o bien todos los ticks. Las pruebas de los sistemas basados en redes neuronales con puntos de control y con todos los ticks son idénticas. Aunque, anteriormente, al desarrollar robots comerciales tradicionales, nos hemos encontrado con que los resultados de las transacciones al pasar al test con todos los ticks empeoraban significativamente. 

No obstante, la principal ventaja de este modo de transmisión de la información es la capacidad de controlar en cada etapa los datos transmitidos y recibidos. Y esto, en opinión del autor, constituye una de las bases del comercio exitoso con el uso de redes neuronales. Y, como resultado, la aparente laboriosidad de preparación del propio sistema de red neuronal, se convertirá en una ventaja durante el trabajo real, dado que reduciremos al mínimo la probabilidad de obtener un error programático o un error lógico del esquema estructural del sistema. Aun así, el propio sistema requiere de una prueba triple por etapas antes de ponerlo en práctica. Pero hablaremos de ello más tarde.

En la figura de abajo, podemos ver los archivos “Input_mat” y “Bar”. Estos archivos son generados por el terminal comercial. Los archivos “Open1,2,3” son generados por la red neuronal. El único pequeño inconveniente es que en el programa de la red neuronal, tenemos que indicar explícitamente las rutas a estos archivos partiendo del modo en que utilizamos el experto: en una simulación o en el comercio real.

Archivos generados por el módulo de la red neuronal y el experto

9. Archivos generados por el módulo de red neuronal y el experto

El archivo “Bar” es auxiliar, y se usa como contador.

Archivo Bar

En los archivos “Open1,2,3” recibimos directamente la respuesta de la red neuronal. La primera línea es la respuesta anterior. La segunda es la respuesta en tiempo real. Este formato es un caso particular. Dependiendo de las condiciones de las transacciones, puede diferenciarse, como el propio número de archivos de las respuestas. En este caso, se debe a que en el propio módulo de la red neuronal se usan tres redes entrenadas en diferentes segmentos temporales.

Respuesta del módulo de red neuronal en los archivos Open1,2,3

10. Respuesta de la red neuronal del módulo en los archivos Open 1,2,3


5. ¿Cómo poner a prueba una red neuronal? Etapas de prueba

Al preparar sistemas comerciales basados en redes neuronales, nosotros utilizamos tres etapas de prueba. La primera etapa se denomina simulación. Se trata de la etapa principal de preparación del sistema en cuanto a su rendimiento. En esta etapa, podemos optimizar el sistema, fase en la que no se invertirá mucho tiempo. Aquí, utilizaremos un script o experto para preparar el archivo de los datos históricos después de la “historia” con la que hemos entrenado la red neuronal y hasta el momento actual. A continuación, en función de estos datos, obtenemos las respuestas de la red con ayuda de un script del entorno Matlab, construyendo después el indicador según este. Precisamente con la ayuda de este indicador optimizamos nuestras redes neuronales en cuanto a la entrada en el mercado y la salida del mismo. En la figura de abajo, podemos ver un ejemplo de este indicador. El indicador es una interpretación de 52 derivaciones de 12 indicadores de usuario. No obstante, también pueden ser los indicadores estándar del terminal.

Indicador construido según las respuestas de la red neuronal

11. Indicador construido según las respuestas de la red neuronal

A continuación, podemos optimizar nuestra estrategia comercial.

Resultados de la simulación del indicador de las respuestas de las redes neuronales

12. Resultados de la simulación de las respuestas de la red neuronal

La segunda etapa de realización de las pruebas consiste en entrenar y registrar las redes neuronales en el entorno Matlab con la ayuda de Neural Network Toolbox.

Neural Fitting

13. Neural Fitting


Redes neuronales obtenidas

14. Redes neuronales obtenidas


Obtener respuestas de estas redes neuronales desde la ventana de comandos.

Obteniendo una respuesta de las redes neuronales

15. Obteniendo respuestas de las redes neuronales


De esta forma, obtendremos otro indicador, que, además, deberá ser idéntico al anterior, al igual que la prueba de la estrategia construida sobre su base.

Si todo nos sale bien, podremos continuar,

y poner a prueba estas redes neuronales con la ayuda del script del módulo de red neuronal que utilizaremos en el sistema. Simulando las redes neuronales en un algún intervalo temporal según los puntos de control. Si esta prueba coincide con el intervalo temporal idéntico de la prueba anterior del indicador, significará que nos movemos en la dirección correcta. Iniciamos este script en el entorno Matlab, y nuestro experto de trabajo en el terminal comercial, de manera simultánea.

Iniciamos el script en el entorno de trabajo Matlab

16. Iniciamos el script en el entorno de trabajo Matlab

Iniciamos el experto en el terminal

17. Iniciamos el experto en el terminal

Obtenemos aproximadamente el resultado que sigue.

Resultado de la simulación del script de Matlab y el experto de MT4

18. Resultado de la simulación del script de Matlab y el experto de MT4

A continuación, debemos formalizar la interfaz de usuario, compilar el módulo de la red neuronal y ponerlo a prueba de la forma anterior.


Poniendo a prueba el módulo compilado de la red neuronal

19. Poniendo a prueba el módulo de red neuronal compilado

Si obtenemos un resultado semejante al anterior, podremos comenzar a comerciar en condiciones reales según nuestro sistema de red neuronal.



5. Sobre las muestras de entrenamiento


Dependiendo de las muestras de entrenamiento que utilicemos para preparar la red neuronal, obtendremos distintos indicadores de la respuesta de la red. Y, por consiguiente, podremos construir diferentes estrategias comerciales. La combinación de las diferentes estrategias nos ofrecerá un resultado final más estable. Ya hemos expuesto una de las variantes en los anteriores apartados. En esta, creamos una muestra según los extremos del periodo comercial. Vamos a mostrar otro ejemplo.

Indicador de respuesta de la red neuronal entrenada con otra muestra

20. Indicador de las respuestas de la red neuronal entrenada con otra muestra

En este caso, hemos entrenado dos redes neuronales. Una de compra y otra de venta. El entrenamiento se ha realizado con muestras en las que el precio mínimo ha sido alcanzado, mientras que el máximo, no. Y al contrario. En los dos indicadores mostrados en la figura se han integrado doce indicadores de usuario. Los máximos de la línea roja muestran cuándo se ha alcanzado el precio mínimo. Los máximos de la línea gris, cuándo se ha alcanzado el precio máximo. Como podemos ver, ahora tenemos la posibilidad de optimizar estos indicadores, o bien por separado, o bien por parejas. Por ejemplo, según el cruzamiento de uno con otro, según la diferencia de precios, según el cruzamiento de determinados niveles, etcétera.

El lector estará de acuerdo con el autor en que resulta bastante más complicado optimizar doce indicadores.


Conclusión

Se han escrito muchos artículos sobre la utilización de redes neuronales en el trading. Pero resulta muy escasa la bibliografía que desarrolle por completo este tema en lo que respecta al perfeccionamiento de los sistemas basados en redes neuronales hasta una etapa de uso real. Además, muchas descripciones han sido pensadas básicamente para usuarios con conocimientos de programación especiales. Desarrollar este tema en un solo artículo, e incluso en varios, es bastante complicado. No obstante, hemos intentado conseguir dicho objetivo en un libro, sin exceso de material teórico y especializado: “Un sistema comercial de red neuronal. MetaTrader 4 + MATLAB. Desarrollo paso a paso. Segunda edición”.


Traducción del ruso hecha por MetaQuotes Software Corp.
Artículo original: https://www.mql5.com/ru/articles/7031

Yovanis Pineda
Yovanis Pineda | 24 sep. 2020 en 18:28

Hi!

Is there any community about this topic?

I want to take part in this project. 

Discretización de series temporales con generación aleatoria de "ruidos" Discretización de series temporales con generación aleatoria de "ruidos"

Nos hemos acostumbrado a analizar el mercado con la ayuda de barras o velas que "hacen cortes" en la serie temporal a intervalos regulares de tiempo. Pero, ¿cuánto deforma realmente este método de discretización la estructura real de los movimientos de mercado? Discretizar una señal sonora a intervalos temporales iguales resulta una solución aceptable, porque una función sonora supone una función que cambia con el tiempo. En sí misma, una señal es una amplitud que depende del tiempo, y esta propiedad en ella es fundamental.

Cliente Nativo de Twitter: Parte 2 Cliente Nativo de Twitter: Parte 2

Un cliente de Twitter implementado como clase MQL para permitirle a usted enviar tweets con fotos. Todo lo que necesita es agregar un solo archivo de inclusión autónomo y listo para tuitear todos sus maravillosos gráficos y señales.

Trabajando con las series temporales en la biblioteca DoEasy (Parte 44): Las clases de colección de los objetos de búferes de indicador Trabajando con las series temporales en la biblioteca DoEasy (Parte 44): Las clases de colección de los objetos de búferes de indicador

En el artículo, analizaremos la creación de la clase de colección de los objetos de búferes de indicador y pondremos a prueba la posibilidad de crear cualquier número de búferes para los programas-indicadores, así como la posibilidad de trabajar con estos (el número máximo de búferes que se pueden crear en los indicadores MQL es de 512).

Aplicación práctica de las redes neuronales en el trading. Pasamos a la práctica Aplicación práctica de las redes neuronales en el trading. Pasamos a la práctica

En el presente artículo, ofrecemos la descripción y las instrucciones del uso práctico de los módulos de red neuronal en la plataforma Matlab. Asimismo, comentaremos los aspectos principales de la construcción de un sistema comercial con uso de modelos de redes neuronales (RN). Para que resulte más fácil familiarizarse con el complejo de elementos comprimidos para el presente artículo, hemos tenido que modernizarlo de forma que se puedan compatibilizar varias funciones del modelo de RN.