Redes neuronales y comercio. Parte 2: kit de bricolaje

En el último artículo, describí cómo logré obtener predicciones de tendencias de la red neuronal en el mercado real. El artículo despertó interés, pero resultó que la pregunta "¿Dónde está la evidencia?" Sin respuesta. De hecho, el tema de las redes neuronales en el comercio se discute mucho, hay publicaciones, las sucursales en foros profesionales están dedicadas a él. Pero no importa cuánto te sumerjas en el tema, no importa cuánto te comuniques con los especialistas, queda la impresión de que todo esto es una especie de ilusión elusiva. No hay nada que realmente funcione, nada que, ni siquiera remotamente, pueda conectar realmente la red neuronal y el pronóstico de movimiento de precios. De ahí la opinión bien fundamentada de la comunidad de que el movimiento de los precios no se puede predecir en principio, y toda esta charla no es sobre nada.



Propongo disipar estas dudas de una vez por todas y trasladar el discurso del área de “puedo predecir o no puedo” al área de “predice bien o mal”. Y lo haremos de forma sencilla, rápida y visual. Daré una herramienta lista para usar y todos pueden obtener el resultado en su computadora. El proyecto gratuito GoogleColaboratory nos ayudará con esto. Esta es una plataforma abierta para el desarrollo colaborativo, todos los cálculos se realizan en los servidores de Google, toda la interacción es a través del navegador, no es necesario registrarse.



El código de nuestro trabajo está abierto y ya cargado en GoogleColab. Los resultados de entrenar una red neuronal para cada uno serán individuales. Esto se debe a que los pesos iniciales se distribuyen al azar y los resultados son ligeramente diferentes. Además, tenga en cuenta que el historial de cotizaciones es un dato muy ruidoso, por lo que la calidad del entrenamiento es baja, pero suficiente para ver cómo va a predecir la red neuronal. El pronóstico debe estar aproximadamente al nivel de un buen indicador.



El único lugar donde abreviaremos nuestro camino es la recopilación de datos sobre el historial de un par comercial. La recopilación se realiza mediante una aplicación para MetaTrader5, el proceso no es complicado, pero requiere habilidades para trabajar con un tester en MetaTrader5. Las instrucciones detalladas conducirán a un artículo separado, por lo tanto, usamos datos preparados previamente para el par Euro / Dólar (para aquellos que usan MT5, el enlace a Expert se encuentra al final del artículo). Será posible asegurarse de que los datos preparados de antemano no se "adelanten" y no sugieran redes neuronales en la última etapa, cuando pasemos a probar con el mercado real.



Empecemos ...



GoogleColaboratory



Nuestro "portátil" en GoogleColab se puede encontrar en este enlace . No olvide iniciar sesión en su cuenta de Google (o Gmail) primero.



Copia la "computadora portátil" a ti mismo.



imagen



Ahora necesita ejecutar secuencialmente todos los bloques de arriba a abajo.



1. Instalación de bibliotecas



Este paso instalará TensorFlow y otras bibliotecas. El proceso terminará por sí solo, no es necesario hacer nada.



imagen



2. Carga y preparación de datos para entrenamiento



En esta etapa, se cargará el conjunto de datos, así como se prepararán conjuntos de datos separados para entrenamiento y pruebas. El conjunto de datos se recopiló para el par EURUSD para el período desde el comienzo de 2015 hasta el día de hoy, el paso de recopilación de datos es la vela M6. Últimas 2 semanas: sitio de prueba. Los datos del conjunto de datos son un conjunto de cientos de miles de líneas, cada una de las cuales es algo como esto



0.32,0.26,0.00,0.43 ... 0.66,0.25,0.24,0.05,0,1,1600144440,1.189240


Los predictores están separados por comas, los campos 3 y 4 desde el final; esta es la respuesta correcta donde fue la tendencia (0.1 - abajo; 1.0 - arriba). El segundo campo desde el final es la identificación de la vela. El último es el precio de apertura de la vela. Los dos últimos campos no se utilizan para entrenamiento.



3. Capacitación y prueba del modelo



Deje la configuración de red neuronal predeterminada en el primer lanzamiento. La formación se desarrollará en cinco pasadas hasta que se obtenga un resultado aceptable. En caso de un entrenamiento exitoso, aparecerá algo como esta tabla:



+------------+---------+----------+-------------+------------+
|   |  |  |  (%) |  (%) 
+------------+---------+----------+-------------+------------+
|     0      |   7174  |   7173   |      50     |   100.0    |
|     2      |   6956  |   6731   |      50     |    95.4    |
|     4      |   6430  |   6224   |      50     |    88.2    |
|     6      |   5867  |   5630   |      51     |    80.1    |
|     8      |   5250  |   5065   |      50     |    71.9    |
|     10     |   4636  |   4450   |      51     |    63.3    |
|     12     |   3964  |   3772   |      51     |    53.9    |
|     14     |   3330  |   3152   |      51     |    45.2    |
|     16     |   2758  |   2539   |      52     |    36.9    |
|     18     |   2198  |   2012   |      52     |    29.3    |
|     20     |   1700  |   1544   |      52     |    22.6    |
|     22     |   1298  |   1167   |      52     |    17.2    |
|     24     |   958   |   825    |      53     |    12.4    |
|     26     |   699   |   517    |      57     |    8.5     |
|     28     |   446   |   278    |      61     |    5.0     |
|     30     |   246   |   127    |      65     |    2.6     |
+------------+---------+----------+-------------+------------+


La respuesta de la red neuronal es una clasificación binaria donde [0 1] está "abajo" y [1 0] es "arriba". Pero la red neuronal nunca responde con un valor entero, su respuesta, dependiendo del grado de "confianza", puede ser del tipo [0,4 0,6]. En esta respuesta, la red neuronal cree que el precio bajará, pero no tiene mucha confianza, y en la respuesta [0,1 0,9] también baja, pero hay mucha más confianza. Así es como se ve la matriz de respuestas reales:



[[0.5084921  0.49150783]
 [0.3930727  0.6069273 ]
 [0.4930727  0.50692725]
 ...
 [0.5189831  0.48101687]
 [0.27955987 0.7204401 ]
 [0.476914   0.5230861 ]]


El campo de la tabla "Respuesta de red" es la diferencia dentro de esta respuesta binaria multiplicada por 100. Obviamente, esta diferencia caracteriza la "confianza" de la red en su pronóstico. Como resultado, después de multiplicar por 100, tenemos valores en el rango de 0 a 100. Ahora no puede tomar todas las respuestas, sino seleccionar solo aquellas en las que la red neuronal tiene una "confianza" significativa. Para comprender cuánto afecta la respuesta al resultado del pronóstico, se verifica la sección de prueba para verificar la exactitud del pronóstico en diferentes niveles de esta "confianza". Cada fila de la tabla es una verificación de un nuevo valor más alto para la Respuesta de la red. Cuanto más alto sea el filtro de Respuesta de red, menos respuestas, pero mejores. Esto se puede ver en los campos "Ganados" y "Perdidos". El proceso se detiene cuando las respuestas (señales) son menos del 1% de todos los datos de prueba.



Si la red no ha sido entrenada en una pasada, simplemente reinicie este bloque (no es necesario que vuelva a cargar los datos).



4. Resultados en el gráfico comercial



Ejecute este bloque. Todo es obvio aquí, en el gráfico del par comercial del conjunto de prueba, se dibujan las señales de la red neuronal, verde hacia arriba, rojo hacia abajo.



imagen



5. Pruebas en el mercado real



Durante esta verificación, se cargan los datos de la red neuronal, que se crea a medida que se agregan nuevas velas en tiempo real. Aquellos. la última parte de los datos recibidos se creó en la apertura de la vela, en nuestro caso, la vela cero M6. Estos datos, por supuesto, no contienen la respuesta correcta; se invita a la red a hacer un pronóstico real. Puede asegurarse de que los datos no se modifiquen a medida que pasan al historial descomentando la línea de impresión (datos) y comparando los valores de una línea en particular al ingresar y después de un tiempo.



def get_from_ennro(symbol, tfm, dim, lim):
    ...
    # print(data)
    ...


Puede que no haya señales en el mercado real. Esto sucede cuando la volatilidad es menor que en el área de prueba, en cuyo caso la red neuronal no ve puntos de entrada.



conclusiones



¡Si! La calidad del pronóstico no es adecuada para abrir posiciones. Pero no establecimos tal tarea, lo principal es que la red neuronal aprende y reconoce algo en el gráfico, adivina la tendencia, su pronóstico obviamente no es caótico. Tenga en cuenta que utilizamos la configuración de red neuronal más simple: Sequential Dense con 2 capas y solo 10 épocas para el entrenamiento. Hay espacio para un mayor desarrollo.



Ya existen soluciones que mejoran cualitativamente la previsión, pero sobre ellas en el próximo artículo.



PD Para aquellos que quieran recopilar y preparar datos para cualquier par en MetaTrader5 por su cuenta, lea aquí y use GoogleColab, que se proporciona aquí .



All Articles