Redes neuronales y comercio. Implementación práctica

La moda comercial está experimentando altibajos junto con el tipo de cambio de Bitcoin. Ahora este tema está en un punto bajo después de un crecimiento increíble en 2018. Muchos durante este tiempo lograron familiarizarse con los intercambios de cifrado: profundizaron en el tema, estudiaron, intercambiaron, perdieron dinero e incluso a veces ganaron. Como resultado, la moda pasó, pero la experiencia permaneció, aunque negativa. Las palabras "largo", "corto", "extendido", "buzo" se pueden escuchar de aquellos de quienes ciertamente no espera esto. Pero no solo el comercio de "manos" atrajo la atención, también hay bots comerciales. ¿Qué tenemos en esta área, de qué está hablando la experiencia de los últimos 2-3 años?

Desafortunadamente, tampoco hay nada bueno en esta área. Existen muchas herramientas para escribir bots comerciales, pero no hay estrategias rentables estables. En el mejor de los casos, una solución de trabajo debe ser atendida constantemente por un par de configuraciones de cambio de comerciante-programador para el mercado actual. El resultado estándar después de conectar un bot totalmente autónomo al depósito es drenar el depósito.

La última esperanza permanece: las redes neuronales. Esto ciertamente debería suceder, porque la red neuronal aprende como persona y se adapta al mercado. ¿Cómo te va en esta área? Bueno ... lo adivinaste. Todo está mal, se habla mucho, pero no hay soluciones que funcionen. ¡Todo está muy mal! Un vívido ejemplo de esto es la tienda de aplicaciones de la comunidad MQL5. Detrás de la marca MQL5 hay una plataforma de negociación profesional: MetaTrader5 más una gran comunidad de comerciantes y programadores. Entonces, en esta tienda hay una sección para soluciones basadas en redes neuronales, hay muchos bots, pero ninguno real. Las reglas prohíben agregar un bot usando una red neuronal. Es difícil de creer, pero lo es. La prohibición de conectar una API externa excluye la posibilidad de usar redes neuronales, y las herramientas integradas en MQL5 no funcionan en la práctica. Discutí este problema con el soporte técnico de MQL5,No recibí una respuesta clara. Como resultado, no hay nada realmente fuera de la caja en el mercado, no se tienen en cuenta las soluciones de la serie "enseñar a ti mismo" presentada en el github.

Bien, estoy terminando con la introducción, me estoy poniendo manos a la obra. Logré entrenar una red neuronal, hay resultados dignos en el mercado real. Además, sin entrar en detalles, describiré cómo se hizo esto.

El primer y principal error de todos los que intentan enseñar a la red neuronal a comerciar es el pensamiento comercial sobre el mercado. Por lo general, un comerciante intenta implementar una solución basada en redes neuronales junto con un programador que previamente escribió bots. El algoritmo de bot comercial resuelve el problema de encontrar el punto de entrada correcto a la posición y determinar la "toma" y la "detención". Si tiene esta tarea en mente al diseñar una red neuronal, entonces nada funcionará. Puede clasificar infinitamente opciones ingeniosas para datos de entrada, dar o no indicadores, probar diferentes tipos de redes neuronales, sustituir muletas como entrenamiento solo en ciertas áreas o entrenar mostrando solo patrones conocidos. No trabajará.

Con una red neuronal, debe verse como un niño, mirar el mundo a través de sus ojos y comenzar con tareas simples. La pregunta más simple que se puede hacer es "¿a dónde irá el precio a través de X velas, arriba o abajo?". No importa cuánto cambie el precio y no importa que la respuesta no pueda convertirse en una estrategia comercial. Nos olvidamos del comercio, ahora la tarea principal es educar a la red al menos algo, solo obtener la respuesta correcta.

Tenía esta tarea inicial resuelta después de 100,500 selecciones de entrada. Se utilizó TensoFlow plus Keras, una red de densidades secuenciales. Conjunto de datos de entrada para 200-300 mil ejemplos, función de vector de entrada 250-350. La forma de la respuesta se deduce de la red planteada de la pregunta: la clasificación binaria "arriba" o "abajo". La entrada fue preparada por el bot en MQL5. Un bot que ejecuta una historia forma un archivo csv normal, cada línea es un vector. Al final de cada vector, la respuesta correcta es 1: 0 si está arriba, 0: 1 si está abajo.

Aquí hay algunas sugerencias para quienes lo intenten:

  1. Estudia bien dentro del pronóstico de 15 minutos a 60 minutos. En un período más corto, el caos del movimiento de precios crece, en un período más grande aumenta la influencia externa: noticias, etc., 15-60 minutos, la zona más "técnica".
  2. BTCUSD, EURUSD. — .
  3. « ? ?». , .
  4. , 50% . , .

Necesita comprender con qué material estamos tratando. El mercado es un 95% de caos. Cuando enviamos datos de entrenamiento a la red e indicamos la respuesta correcta, en realidad estamos alimentando el caos. Es como tratar de entrenar una red neuronal para distinguir a un gato de un perro, y al entrenar para mostrarle mariposas, estrellas y signos del zodiaco, no habrá resultado. Por lo tanto, está aquí, pero, afortunadamente, el mercado proporciona alrededor del 5% de los patrones realmente operativos que la red puede detectar y esto se reflejará en sus respuestas. Por lo tanto, preste atención al análisis de los resultados de la prueba.

Usando este enfoque, obtuve el siguiente resultado:
en aproximadamente el 2% de las respuestas, la red adivina el movimiento adicional en la proporción de 2 respuestas correctas a 1 incorrecta. Al realizar pruebas en el mercado real, esto es exactamente lo que sucede, pero surge otro problema. Después de todo, solo tenemos el 2% de las preguntas respondidas, ignoremos el resto. Aquellos. lanzamos un neuro en el mercado real en un plazo de 5 minutos y esperamos ... al 2%: ¡solo se responderán cada 50 velas, una respuesta en 4 horas! ¿Y qué hacer con eso? Bueno, si la respuesta fue "comprar / vender", entonces 6 transacciones al día es normal, y aquí el resumen "arriba / abajo" y luego inexacto, completa decepción.

Como resultado, resolví este problema con relativa facilidad: solo cada 5 minutos necesita entrevistar no a un modelo, sino a 20-30 modelos, como resultado de las respuestas habrá suficiente. Los modelos están entrenados en diferentes datos de entrada y, en consecuencia, están entrenados en diferentes patrones. En la práctica, resulta que las modelos tocan las bocinas de diferentes velas, se activan juntas solo en lugares obvios y predecibles y no se superponen entre sí.

Para resumir, ahora hay algo que se puede lanzar en el mercado real y tener señales de subida / bajada con la minería promedio. Ya es más divertido, pero el sentido práctico sigue siendo cero.

Algunas palabras sobre la implementación. Me funcionó en un montón de MQL5 más Keras. Un bot lanzado en MetaTrader5 en cada vela preparó datos para una red neuronal y pasó a través de un socket a un script de Python, que a su vez sondeó todos los modelos y, cuando pasó un umbral aceptable, envió una señal al canal de Telegram.

Entonces, el circuito funciona, pero no se puede aplicar. No fue posible agregar señales a alguna estrategia. El principal inconveniente es la discreción de las respuestas. La respuesta es un evento al que debe reaccionar de alguna manera: observe la situación del mercado, piense si la red es correcta o no, etc. En una vela, un modelo podría señalar hacia arriba y otro hacia abajo, ¿y cuál creer? Como resultado, la idea nació para abandonar el umbral para pasar la respuesta y comenzar a respetar cada respuesta de la red, aunque con un bajo grado de confianza. Si comienza a promediar todas las respuestas en una sola opinión común y considera esto como la respuesta de la red, entonces la respuesta se convierte en una calidad completamente diferente. En este caso, el conocimiento de todos los modelos comienza a tomar forma, y ​​esto es una gran cantidad de entrenamiento conjunto.

Cuánto tiempo, brevemente, pero después de todas las alteraciones, comencé a recibir respuestas individuales de la red neuronal para cada vela, expresadas como un porcentaje del tiempo de trabajo esperado de -100% a + 100%. El letrero refleja la dirección hacia arriba / hacia abajo esperada. Quedó claro que ahora hay un sentido en cada respuesta. ¡Funciona! Yo mismo tengo experiencia comercial y vi cómo el comportamiento de la red frente a mis ojos se volvió significativo. Algunas veces su lógica era comprensible, otras no, pero sus respuestas siempre sentían su propia visión del mercado, a menudo paradójica. Además de esto, resultó que cuanto mayor es la confianza de la red, más cercano es el desarrollo esperado al momento adecuado y viceversa. La baja confianza parecía decir "lo que sucederá en 15 minutos, no lo sé, pero la tendencia general ha subido".

Desde este lugar, me di cuenta de que tratar de formalizar todo esto en señales de compra / venta es como martillar clavos con un microscopio. Lo que se necesitaba era algún tipo de herramienta para visualizar las señales de la red neuronal: una visualización gráfica del nivel de "confianza" en cada vela. Una amplia gama de herramientas MQL5 hizo posible poner todo esto en Expert para MetaTrader5. "Experto" a través de la API recibe las respuestas de la red neuronal y solo se dedica a la representación. Aquí hay un ejemplo de su trabajo en BTCUSD M1: El

imagen

área coloreada en la parte superior es el pronóstico "abajo", el área debajo es el pronóstico "arriba", el grosor es el grado de confianza.

En esta etapa, la calidad del pronóstico no importa, es importante que la red neuronal demuestre una opinión bastante adecuada sobre la situación del mercado. Siempre puede actualizar la red aún más, ¡lo principal es que funciona!

Como resultado, hoy hay un experto para MetaTrader5 con dos tipos de pronósticos: a corto y largo plazo. Las estadísticas se están acumulando gradualmente, hay comentarios de los comerciantes. El resultado obtenido inspira más trabajo, ahora necesitamos llegar a los apreciados equipos de "compra / venta". Esto se puede hacer aumentando significativamente la calidad del pronóstico. Entonces veo esta ruta de desarrollo:

  1. Es necesario preparar una docena de pronósticos en el intervalo entre 15 y 60 minutos. Aquellos. comience a predecir "arriba / abajo" durante 20, 25, 30, 35 minutos y así sucesivamente hasta 60. Recuerdo que cada pronóstico se basa en las respuestas de aproximadamente 20 modelos.
  2. Con tal volumen de información en cada vela minuto, es posible y necesario analizarlo con otra red neuronal. La conexión entre pronósticos en diferentes intervalos de tiempo puede ser completamente no trivial, por lo tanto, una red neuronal aquí será apropiada.
  3. El conjunto de datos para esta red neuronal no será tan ruidoso como el de sus camaradas más jóvenes, por lo tanto, debe ser entrenado no en un "arriba / abajo" banal, sino en la predicción de la fuerza del movimiento de un activo, y esta es una salida directa a "comprar / vender".

Eso es todo lo que quería decirte hoy. El trabajo continúa, creo que habrá más artículos.

Por cierto, este Experto para MetaTrader5 se distribuye de forma gratuita, si desea ver el trabajo de una red neuronal en el mercado real, póngase en contacto.

All Articles