
Experimentos con redes neuronales (Parte 3): Uso práctico
Introducción
Hola a todos, queridos usuarios de la comunidad MQL5. En los anteriores artículos Experimentos con redes neuronales (Parte 1): Recordando la geometría y Experimentos con redes neuronales (Parte 2): Optimización inteligente de una red neuronal,compartimos algunas observaciones y experimentos con redes neuronales. Principalmente, realizamos la optimización de los asesores expertos resultantes y explicamos su funcionamiento. Sin embargo, apenas hemos tocado la aplicación práctica de los resultados obtenidos. El objetivo principal de este artículo será enmendar tan desafortunado malentendido.
Así, hoy aplicaremos los resultados obtenidos en la práctica y también nos familiarizaremos con un nuevo algoritmo que nos permitirá ampliar las capacidades de nuestros asesores expertos, para, por así decirlo, montar la cadena completa y finalmente analizar las pruebas forward. Como siempre, usaremos solo las herramientas de MetaTrader 5 sin utilizar software de terceros. Lo más probable es que este artículo resulte similar a unas instrucciones paso a paso. Por nuestra parte, trataremos de explicar todo de la forma más clara y sencilla posible.
1. Idea de aplicación
Optimizando los dos sistemas anteriores, hemos obtenido ciertos resultados con las mejores lecturas del factor de beneficio o el criterio complejo, además de un conjunto de pesos para nuestros perceptrones y redes neuronales. Tras probar los resultados obtenidos, hemos logrado lecturas bastante tolerables. La idea principal de esta mejora consiste en combinar todos los resultados de optimización en un asesor experto y hacerlos funcionar simultáneamente. Estará de acuerdo con que no resulta muy cómodo mantener 10 gráficos abiertos con diez asesores expertos. Además, esto nos permitirá ver los resultados de forma ampliada (integral), utilizando, por ejemplo, 10-20 parámetros al mismo tiempo.
2. Pareja de divisas Rango de optimización y pruebas forward. Ajustes
Aquí ofreceremos todos los parámetros de optimización y prueba para no repetirnos en el texto:- Mercado Fórex;
- Pareja de divisas EURUSD;
- Periodo H1;
- Indicadores: 2 indicadores TEMA con periodos 1 y 24. Hemos tenido que renunciar a MA, ya que el indicador TEMA ha resultado mejor en numerosas pruebas.
- StopLoss y TakeProfit para las modificaciones correspondientes de 600 y 60;
- Optimización y modo de prueba "Solo precios de apertura" y "Máximo del criterio complejo". Es muy importante usar el modo "Máximo del criterio complejo", ya que ha mostrado resultados más estables y rentables en comparación con "Rentabilidad Máxima";
- Rango de optimización 3 años. Del 09.12.2018 al 09.12.2021. 3 años no es ningún criterio. Podrá realizar más o menos pruebas por su cuenta;
- Rango de prueba forward de 1 año. Del 2021.12.09 al 2022.12.09;
- En todas las pruebas forward, hemos usado 20 resultados de optimización simultáneamente;
- Optimización de asesores expertos con perceptrón «Rápida (algoritmo genético)»;
- Optimización de asesores expertos en la biblioteca DeepNeuralNetwork.mqh "Lenta (iteración completa de parámetros)";
- Depósito inicial 10000;
- Apalancamiento 1:500.
3. Asesores en el perceptrón
Tras numerosas observaciones, resulta que una profundidad de pesos de 200 no es necesaria en los asesores expertos con perceptrón. Será suficiente 20. Por eso, hemos modificado el propio código del perceptrón y los parámetros de optimización. Ahora optimizaremos los pesos desde 0 en incrementos de 1 a 20.
Asimismo, hemos introducido un nuevo parámetro, "Param", que se encarga de la profundidad de la retirada hacia el lado positivo o negativo del perceptrón. Este parámetro ha influido en el número de transacciones y su precisión. Ahora tenemos menos transacciones, pero su precisión ha aumentado.
Cada uno de los sistemas usa 2 asesores: el primero para optimización y el segundo para el trabajo directo. Hemos decidido organizar la división de las órdenes usando los comentarios a las mismas, por ser la forma más fácil y cómoda. El número de orden único será su número de serie en la propia muestra. La muestra es un archivo con los resultados de optimización obtenidos. Para limitar el número de procesos simultáneos, hemos usado el parámetro «MaxSeries»
for(int i=0; i<=(ArraySize(EURUSD)/6)-1; i++){ comm=IntegerToString(i); x1=(int)StringToInteger(EURUSD[i][0]); x2=(int)StringToInteger(EURUSD[i][1]); x3=(int)StringToInteger(EURUSD[i][2]); x4=(int)StringToInteger(EURUSD[i][3]); Param=(int)StringToInteger(EURUSD[i][4]); //SELL++++++++++++++++++++++++++++++++++++++++++++++++ if (CalculateSeries(Magic)<MaxSeries && (perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment+" En_"+comm); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if (CalculateSeries(Magic)<MaxSeries && (perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment+" En_"+comm); } }
Nuevo código del perceptrón:
1 perceptron 4 angle SL TP y 1 perceptron 4 angle
double perceptron1() { double w1 = x1 - 10.0; double w2 = x2 - 10.0; double w3 = x3 - 10.0; double w4 = x4 - 10.0; double a1 = (((ind_In1[1]-ind_In1[6])/Point())/6); double a2 = (((ind_In1[1]-ind_In1[11])/Point())/11); double a3 = (((ind_In2[1]-ind_In2[6])/Point())/6); double a4 = (((ind_In2[1]-ind_In2[11])/Point())/11); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); }
1 perceptron 8 angle SL TP y 1 perceptron 8 angle
double perceptron1() { double w1 = x1 - 10.0; double w2 = x2 - 10.0; double w3 = x3 - 10.0; double w4 = x4 - 10.0; double v1 = y1 - 10.0; double v2 = y2 - 10.0; double v3 = y3 - 10.0; double v4 = y4 - 10.0; double a1 = (((ind_In1[1]-ind_In1[6])/Point())/6); double a2 = (((ind_In1[1]-ind_In1[11])/Point())/11); double a3 = (((ind_In2[1]-ind_In2[6])/Point())/6); double a4 = (((ind_In2[1]-ind_In2[11])/Point())/11); double b1 = (((ind_In1[1]-ind_In1[11])/Point())/11); double b2 = (((ind_In2[1]-ind_In1[11])/Point())/11); double b3 = (((ind_In1[1]-ind_In2[11])/Point())/11); double b4 = (((ind_In2[1]-ind_In2[11])/Point())/11); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 + v1 * b1 + v2 * b2 + v3 * b3 + v4 * b4); }
2 perceptronа 4 angle SL TP y 2 perceptronа 4 angle
double perceptron1() { double w1 = x1 - 10.0; double w2 = x2 - 10.0; double w3 = x3 - 10.0; double w4 = x4 - 10.0; double a1 = (((ind_In1[1]-ind_In1[6])/Point())/6); double a2 = (((ind_In1[1]-ind_In1[11])/Point())/11); double a3 = (((ind_In2[1]-ind_In2[6])/Point())/6); double a4 = (((ind_In2[1]-ind_In2[11])/Point())/11); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); } double perceptron2() { double v1 = y1 - 10.0; double v2 = y2 - 10.0; double v3 = y3 - 10.0; double v4 = y4 - 10.0; double b1 = (((ind_In1[1]-ind_In1[11])/Point())/11); double b2 = (((ind_In2[1]-ind_In1[11])/Point())/11); double b3 = (((ind_In1[1]-ind_In2[11])/Point())/11); double b4 = (((ind_In2[1]-ind_In2[11])/Point())/11); return (v1 * b1 + v2 * b2 + v3 * b3 + v4 * b4); }
Código de activación de la entrada:
1 perceptron 4 angle SL TP y 1 perceptron 4 angle
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment); }
1 perceptron 8 angle SL TP y 1 perceptron 8 angle
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment); }
2 perceptronа 4 angle SL TP y 2 perceptronа 4 angle
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (perceptron2()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (perceptron2()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment); }
Configuración de la optimización:
1 perceptron 4 angle SL TP y 1 perceptron 4 angle
1 perceptron 8 angle SL TP y 1 perceptron 8 angle
2 perceptronа 4 angle SL TP y 2 perceptronа 4 angle
3.1 Asesor 1 perceptron 4 angle SL TP
Esta modificación del asesor usa para salir Stop Loss y Take Profit. Estrategia 1 perceptrón y 4 ángulos de inclinación de los indicadores TEMA. Realizamos la optimización 10 veces. Los esquemas de los ángulos de inclinación y los principios de optimización se pueden encontrar en el primer artículo, no nos repetiremos aquí.
Resultado de la optimización:
El resultado del criterio complejo se sitúa en el nivel del 99.99. El factor de beneficio en un alto nivel de 4-8.
A continuación, exportaremos el resultado a Excel Dejaremos los primeros 100 mejores resultados y borraremos todo lo demás. Luego eliminaremos todas las columnas excepto x1, x2, x3, x4 y Param. Guardamos el archivo en CSV (separadores - comas). Hemos nombrado el archivo EURUSD para mayor claridad. Podemos cargar este formato en el código del asesor como una matriz de texto. Debería quedar como se muestra en la imagen de abajo.
A continuación, insertaremos nuestro archivo en el código a través del menú del MetaEditor.
Obtendremos un array de texto con resultados de optimización listos para usar.
string EURUSD[][6]= { {"19","1","3","6","1100"}, {"20","1","4","6","1000"}, {"20","0","4","4","1200"}, {"19","0","6","4","1100"}, {"19","1","5","4","1100"}, {"17","0","7","4","1100"}, {"19","1","3","8","1000"}, {"20","0","4","3","1300"}, {"17","0","7","0","1400"} };
Luego copilaremos y realizaremos pruebas forward.
Los resultados son buenos. Vemos un ascenso constante durante todo el año.
3.2 Asesor 1 perceptron 4 angle
Esta modificación del asesor no utilizará Stop Loss y Take Profit. Se utilizará el cierre por llamada inversa del perceptrón.
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, 0, 0, EAComment); } if ((perceptron1()>0) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)>0)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, 0, 0, EAComment); } if ((perceptron1()<0) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)>0)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY); }
Resultado de la optimización:
El resultado del criterio complejo es algo menor que en el caso anterior. El factor de beneficio está en el nivel de 2-2.5.
Resultado de la prueba forward:
La línea de balance repite el resultado anterior con reducciones más profundas.
3.3 Asesor 1 perceptron 8 angle SL TP
Esta modificación del asesor usa para salir Stop Loss y Take Profit. Estrategia 1 perceptrón y 8 ángulos de inclinación de indicadores TEMA.
Para este asesor, deberemos preparar un archivo Excel como se muestra en la siguiente figura. Aquí optimizaremos 9 parámetros x1, x2, x3, x4, y1, y2, y3, y4 y Param.
Resultado de la optimización:
El resultado del criterio complejo es alto. El factor de beneficio se encuentra en el nivel de 2.5-3.
Resultado de la prueba forward:
La línea de balance no es muy estable. Se dan grandes reducciones, pero el resultado es positivo.
3.4 Asesor 1 perceptron 8 angle
No utilizamos Stop Loss ni Take Profit . El cierre se realiza con la señal inversa del perceptrón. Estrategia 1 perceptrón y 8 ángulos de inclinación de los indicadores TEMA.
Resultado de la optimización:
El resultado del criterio complejo es alto. El factor de beneficio se encuentra en el nivel de 2.5-3.
Resultado de la prueba forward:
La línea de balance es estable. Podemos ver un buen aumento en el depósito durante todo el año. Las reducciones no son tan profundas.
3.5 Asesor 2 perceptron 8 angle SL TP
Se utilizan StopLoss y TakeProfit. Estrategia 2 perceptrones, 4 ángulos de inclinación en el primero y 4 ángulos de inclinación en el segundo, que son diferentes.
Resultado de la optimización:
El resultado del criterio complejo se encuentra en el nivel de 99.99. El factor de beneficio de los resultados es casi el mismo, 4.3.
Resultado de la prueba forward:
Línea de balance en forma de sierra. Beneficio durante todo el año.
3.6 Asesor 2 perceptron 8 angle
Sin StopLoss y TakeProfit. Estrategia 2 perceptrones, 4 ángulos de inclinación en el primero y 4 ángulos de inclinación en el segundo, que son diferentes. Cierre según la señal inversa del perceptrón.
Resultado de la optimización:
El resultado del criterio complejo se encuentra en el nivel de 99.8. El factor de beneficio de los resultados se encuentra en el rango de 2.8-3.2.
Resultado de la prueba forward:
Línea de balance en forma de línea de sierra. Beneficio durante todo el año. Hay grandes reducciones al final del año.
4. Asesores expertos basados en la biblioteca DeepNeuralNetwork.mqh
Hoy, participan en nuestros experimentos 4 asesores expertos basados en la biblioteca DeepNeuralNetwork.mqh , Angle 4-4-3 SL TP y Angle 8-4-3 SL TP, en los que se utilizará StopLoss y TakeProfit para el cierre. Además de Angle 4-4-3 y Angle 8-4-3, en los que la señal de cierre procederá de la red neuronal. En todos se utilizan como estrategia los ángulos de inclinación. Las cifras presentadas en la segunda parte de nuestros experimentos no se usarán hoy.
Código con StopLoss y TakeProfit:
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm1)==0) && (yValues[1]>LL) && (SpreadS1<=MaxSpread)){ if(CalculateSeries(Magic)<MaxSeries){ OpenSell(symbolS1.Name(), LotsXSell, TP, SL, EAComment+" En_"+comm1); } } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm1)==0) && (yValues[0]>LL) && (SpreadS1<=MaxSpread)){ if(CalculateSeries(Magic)<MaxSeries){ OpenBuy(symbolS1.Name(), LotsXBuy, TP, SL, EAComment+" En_"+comm1); } }
Código de cierre desde la red neuronal:
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm1)==0) && (yValues[1]>LL) && (SpreadS1<=MaxSpread)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm1); if(CalculateSeries(Magic)<MaxSeries){ OpenSell(symbolS1.Name(), LotsXSell, TP, SL, EAComment+" En_"+comm1); } } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm1)==0) && (yValues[0]>LL) && (SpreadS1<=MaxSpread)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm1); if(CalculateSeries(Magic)<MaxSeries){ OpenBuy(symbolS1.Name(), LotsXBuy, TP, SL, EAComment+" En_"+comm1); } } //CLOSE ALL++++++++++++++++++++++++++++++++++++++++++ if (yValues[2]>LL){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm1); ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm1); }
Ahora aplicaremos un esquema más complejo. Tenemos 3 asesores expertos en cada conjunto, el primero es para realizar la optimización, mientras que el segundo se usa para convertir los resultados obtenidos en un array de texto. El tercero sirve para probar y trabajar con el array resultante.
Como recordará, al realizar la optimización, nuestro asesor crea un archivo CSV con un conjunto de pesos optimizados a lo largo de la ruta "C:\Users\your username\AppData\Roaming\MetaQuotes\Terminal\Common\Files". Luego copiaremos el archivo del informe de optimización en formato CSV en esta carpeta,
e instalaremos el asesor experto con el nombre "Angle EA 4-4-3 convert" en el gráfico de la pareja de divisas.
Parámetros del asesor para la conversión:
- Param – parámetro (valor) del criterio complejo por debajo del cual los resultados no se copiarán en el array. Hemos usado 80;
- OptimizationFileName1 – archivo del informe de optimización en formato CSV;
- OptimizationFileName2 – archivo creado por el asesor experto durante la optimización en formato CSV. Contendrá los pesos de la red neuronal;
- OptimizationFileName3 – archivo del array que se insertará en el asesor experto en funcionamiento. Se creará automáticamente.
Podremos ver el proceso en el diario de registro.
Después insertaremos el archivo obtenido en el código del asesor "Angle EA 4-4-3 trade":
string Result[][37]= { {"17293","0.8","-0.1","-0.2","1.0","0.9","0.6","0.4","1.0","0.6","-0.4","0.9","-0.5","0.1","-0.5","-0.5","0.9","-0.1","-0.8","0.4","0.0","-0.1","0.1","0.2","-0.4","-0.7","-0.6","-0.9","-0.8","-0.9","-0.7","-0.5","0.4","0.4","0.8","-0.6"}, {"18030","0.6","0.2","-0.4","0.9","-1.0","-0.9","-0.9","0.4","-0.9","-0.8","0.4","0.9","0.2","-0.8","0.9","-0.1","-0.6","0.3","0.5","-0.4","0.7","0.6","-0.4","-0.1","0.4","-0.8","0.4","0.9","-0.2","0.0","0.4","-0.6","-0.4","-0.7","0.7"}, {"13128","0.7","-0.3","0.5","-0.5","-0.5","-0.1","0.8","0.0","0.6","0.9","-0.2","0.8","1.0","0.7","-0.7","-0.2","0.5","0.5","-0.6","0.5","-0.9","-0.5","-0.5","0.5","-0.3","0.5","0.8","0.2","-0.5","-0.2","0.1","-0.1","-0.4","-0.7","0.1"}, {"10688","0.3","0.0","0.2","-0.1","0.6","0.1","0.1","-0.2","-1.0","0.3","0.2","0.5","-0.8","0.7","0.4","-0.5","-0.4","-0.3","-0.3","-0.9","-0.2","0.0","0.1","0.9","0.3","-0.9","-0.2","-0.2","0.1","0.9","0.8","0.1","0.4","0.8","0.6"}, {"8356","0.8","0.8","0.7","0.2","0.0","-0.4","0.5","-0.8","0.0","0.9","0.2","-0.1","1.0","0.6","0.2","-0.8","-0.1","-0.5","-0.3","0.0","0.7","-0.5","-0.3","0.0","0.9","-1.0","-0.2","-0.6","-0.7","-0.5","-0.8","0.5","-0.3","-0.1","0.8"}, {"18542","-0.8","0.9","-0.1","0.5","-0.5","0.3","0.8","-0.4","0.7","0.9","0.4","0.0","-0.2","0.0","0.2","0.5","0.9","0.4","1.0","0.7","0.1","0.1","-0.4","0.0","0.9","0.2","0.0","-0.8","0.1","-0.5","0.1","-0.1","0.1","-0.1","0.6"}, {"18381","0.7","-1.0","-0.8","0.8","-0.8","-0.4","0.9","0.7","1.0","0.7","0.8","0.5","0.1","-0.3","-0.7","-0.9","-0.2","-0.4","0.8","-0.8","0.0","0.8","-0.5","-0.3","0.2","-0.3","-0.1","0.5","-0.1","0.3","0.0","-0.7","-0.2","-0.3","0.8"}, {"13795","0.2","0.9","0.4","0.4","0.1","-0.6","-0.6","-0.3","0.7","0.9","0.7","0.0","-0.2","-0.9","-0.8","-0.6","-0.1","-0.4","-1.0","0.7","-0.7","-0.3","0.0","-0.3","-1.0","0.8","-0.9","-0.9","0.1","-0.5","-0.3","-0.7","-0.2","-0.7","-0.8"}, {"4376","0.9","0.7","-0.6","-0.9","1.0","0.8","0.1","-0.8","0.7","-0.8","0.2","0.1","-0.9","0.8","0.9","-0.4","0.8","0.3","0.0","-0.3","-0.4","0.7","-0.2","0.4","-0.8","-0.2","0.9","0.9","0.2","0.0","0.1","0.5","-0.8","-0.1","0.6"}, {"14503","0.1","-0.4","-0.7","0.1","-0.1","0.5","-0.7","-0.2","-0.9","0.0","0.2","-0.7","0.3","0.7","-0.7","0.1","0.4","0.3","0.3","-0.5","-0.8","-0.8","-0.7","0.2","-0.7","-0.1","-0.8","0.0","-0.4","0.0","0.1","0.5","-0.3","0.5","0.8"}, {"12887","0.6","-0.1","0.4","0.6","-0.9","-0.3","0.7","0.2","-0.6","-1.0","0.0","-0.6","0.5","0.3","0.8","0.0","-0.5","-1.0","-0.6","0.6","-0.6","-0.9","-0.3","0.6","0.2","-0.5","0.6","0.2","-0.5","0.3","0.3","-0.9","-0.7","-0.8","0.8"}, {"16285","0.3","0.3","-0.9","-0.7","-0.1","0.7","-0.7","-0.7","-0.2","-0.5","-0.8","-1.0","-0.1","-0.4","-0.6","1.0","0.3","-0.8","-0.6","1.0","-0.1","0.7","-0.1","0.5","-0.6","0.9","-0.5","0.6","0.2","0.5","-0.4","0.3","-0.6","-0.7","0.7"}, {"13692","0.8","-0.9","0.6","0.3","-0.2","-0.8","-0.4","0.3","-0.6","0.7","0.7","-0.8","0.5","0.1","-0.2","0.7","-0.7","-0.2","0.7","-0.5","0.9","0.7","0.6","0.8","-0.1","-1.0","-0.8","-0.5","-0.1","-0.9","-0.5","0.2","-0.4","0.8","0.2"}, {"1184","-0.1","0.1","0.6","-0.2","-0.3","0.0","-0.7","0.1","-0.5","0.1","-0.6","0.0","-0.9","-0.8","0.1","0.5","0.3","-1.0","0.1","-0.8","-0.6","0.0","-0.4","-0.1","-0.7","-0.8","0.6","0.5","0.0","0.9","-0.5","0.2","0.7","0.3","0.9"}, {"9946","0.4","-0.5","0.9","-1.0","-0.4","-0.7","0.9","0.0","-0.2","0.7","0.7","0.1","0.7","0.4","-0.9","0.1","-0.6","-0.5","0.9","0.8","0.2","-0.9","0.0","0.1","0.9","0.7","0.3","0.6","-0.4","0.8","-0.1","0.2","-0.2","-0.4","0.7"}, {"6104","0.5","-0.9","-0.1","0.7","-0.7","0.0","0.4","0.3","0.8","-0.7","-0.1","0.1","-0.1","-0.5","-0.5","1.0","-0.1","-0.5","0.5","0.7","-0.8","-0.7","-0.7","0.8","-0.2","-0.5","0.2","-0.6","-0.2","-0.1","-0.4","-0.9","-0.6","-0.1","0.9"}, {"995","0.9","0.6","0.7","0.1","-0.8","0.3","-0.2","0.3","0.9","-0.1","0.2","0.5","0.9","-0.7","-0.7","-0.7","0.2","0.2","0.4","-0.7","-0.4","-0.2","0.0","-0.2","0.0","0.6","-0.3","-0.6","-0.9","0.8","-0.6","-0.2","0.2","0.5","0.9"}, {"6922","0.5","0.9","0.1","-0.8","-1.0","-0.1","0.9","0.9","-0.2","0.8","0.8","0.5","-0.3","0.8","-0.2","0.9","-0.6","0.0","0.7","-0.9","0.4","0.7","0.6","-0.1","-0.4","0.5","-0.6","-0.2","-0.5","-0.9","-0.7","-0.6","0.5","-0.6","0.7"}, {"3676","-0.9","-0.8","-0.5","0.8","0.4","-0.8","-0.4","0.6","0.9","0.9","-0.7","0.6","0.8","-0.9","0.3","0.7","-0.7","0.5","0.8","0.9","0.1","0.5","0.8","0.1","0.9","0.9","0.4","0.3","-0.1","0.4","-0.4","0.4","-0.3","-0.6","0.9"}, {"6245","-0.1","-0.4","-0.6","0.7","0.6","-0.6","-0.2","0.2","0.0","-0.4","0.0","0.9","-0.3","0.5","-0.2","0.7","0.4","1.0","0.7","-0.1","-0.3","-0.9","-0.5","0.9","0.8","-0.1","-0.5","-1.0","0.3","0.9","-0.4","-0.2","-0.4","-0.3","0.9"}, {"1039","-0.4","-0.3","-0.6","-0.7","-0.6","0.5","-0.2","-0.9","0.7","0.9","-0.2","-0.6","-0.2","-0.3","0.6","0.1","-0.9","-0.8","0.9","0.3","0.6","0.8","-0.8","0.8","0.6","0.1","-0.2","-0.7","0.6","-0.2","-0.6","0.4","-0.1","-0.2","0.1"}, {"6615","-0.4","-0.1","-0.7","0.5","-0.9","0.4","-0.9","0.4","-0.4","-0.1","0.7","-0.4","0.4","0.4","-0.8","-0.2","-0.6","-0.1","-0.5","-0.7","0.6","0.0","1.0","0.9","-0.3","0.8","0.8","-0.1","-0.2","0.9","-0.2","0.9","-0.8","-0.6","0.5"}, {"410","-0.3","0.2","-0.2","-0.2","0.2","-0.5","0.8","0.3","-0.9","-0.9","-0.4","0.3","-0.8","-0.8","0.0","0.9","-0.2","0.0","-0.2","-0.4","-0.1","0.1","-0.4","0.7","1.0","0.1","0.5","0.3","0.1","0.7","0.4","0.0","-0.2","-1.0","-0.1"}, {"15027","-0.3","-0.4","-0.6","0.3","-0.5","-0.6","0.9","0.5","-0.2","0.0","-0.7","0.7","0.1","0.5","-0.4","-0.4","0.4","0.7","-0.1","0.9","-0.1","0.6","0.5","-0.3","0.6","0.8","0.4","0.1","0.9","-0.5","0.7","0.6","-0.8","-0.1","0.0"}, {"14157","0.6","-0.7","0.7","0.5","0.8","-0.1","0.9","0.8","0.8","0.7","0.6","-0.3","-0.7","-0.5","-0.2","0.2","0.0","-0.8","0.6","0.9","-0.4","0.1","0.1","0.9","0.7","-0.8","-0.6","-0.5","-0.7","0.1","-0.3","0.9","0.5","0.8","-0.7"}, {"11367","0.2","-1.0","-0.4","-0.4","-0.3","-0.2","0.2","-0.1","-0.4","0.7","-1.0","-0.5","-0.9","-0.7","-0.4","-0.8","-0.4","0.0","0.2","0.7","-0.2","0.4","0.1","0.0","-0.1","-0.9","0.2","-0.5","-0.6","-0.6","-0.7","-0.2","-0.3","-0.1","0.9"}, {"3892","-0.7","-0.3","0.8","0.2","-0.3","0.4","0.0","0.3","-0.2","0.7","0.6","0.6","0.7","-0.4","-0.7","0.4","-0.3","-0.8","-0.2","0.0","0.9","0.9","0.3","0.0","0.7","0.1","-0.1","0.1","-0.8","-0.4","-0.5","0.9","-0.7","-0.6","0.2"} };
4.1 Asesor Angle 4-4-3 SL TP
El asesor usa para la salida Stop Loss y Take Profit. Estrategia de 4 ángulos de inclinación de los indicadores TEMA.
Resultado de la optimización:
Como podemos ver, hay muchos buenos resultados. El factor de beneficio se encuentra dentro de 1.6-5. Hay 27 valores de criterios complejos que superan el 80.
Resultado de la prueba forward:
Desafortunadamente, el asesor ha fallado en la prueba forward. Los resultados son negativos e inestables.
4.2 Asesor Angle 4-4-3
El EA utiliza una red neuronal para la salida. Estrategia de 4 ángulos de inclinación de los indicadores TEMA.
Resultado de la optimización:
Como podemos ver, solo se han obtenido 6 buenos resultados para un criterio de complejidad superior al 80. El factor de beneficio se encuentra dentro de 1.6-1.9.
Resultado de la prueba forward:
Con el cierre de la red neuronal, el asesor ha mostrado beneficios durante todo el año. El resultado resulta más estable que usar Stop Loss y Take Profit.
4.3 Asesor Angle 8-4-3 SL TP
El asesor usa para salir Stop Loss y Take Profit. Estrategia de 8 ángulos de inclinación de los indicadores TEMA.
Resultado de la optimización:
El factor de beneficio de los resultados es menor, si lo comparamos con la red neuronal. 4-4-3. Los resultados del criterio complejo superiores a 80 son 13.
Resultado de la prueba forward:
El resultado esperado resulta similar al anterior usando StopLoss y TakeProfit. No se ha superado la prueba forward.
4.4 Asesor Angle 8-4-3
El asesor utiliza una red neuronal para la salida. Estrategia de 8 ángulos de inclinación de los indicadores TEMA.
Resultado de la optimización:
Los resultados del criterio complejo superiores a 80 son solo 3. El factor de beneficio se encuentra en un nivel bajo en comparación con los resultados anteriores.
Resultado de la prueba forward:
El resultado de la prueba forward no es satisfactorio. Supone una suave pérdida de depósito.
Conclusión
Como podemos ver por los resultados de las pruebas forward, ninguno de los asesores expertos basados en perceptrones ha quedado en negativo durante el año, aunque existe una cierta disminución de la rentabilidad después de 6 meses de funcionamiento. De esto deducimos que la optimización será necesaria al menos una vez cada 6 meses.
En cuanto a los asesores expertos basados en la biblioteca DeepNeuralNetwork.mqh, no todo es tan simple. Los resultados no son tan buenos como esperábamos. Quizás la propia estrategia influya y sea necesario trasladar algo más a la red neuronal.
En la mayoría de los casos, la rentabilidad se puede monitorear según el factor de beneficio de la serie optimizada. Esto nos proporciona un campo adicional para la reflexión.
Para el futuro, nos gustaría destacar 2 tareas Comprobar los mejores resultados obtenidos con otras parejas de divisas y otros marcos temporales.
No hay tantas transacciones como nos gustaría, pero nadie nos prohíbe usar otras parejas de divisas y crear un portafolio basado en estos sistemas, lo cual conlleva un uso excesivo de recursos para su optimización. Pero quien no trabaja, no come.
Para cualquier pregunta, puede contactar con el autor en el foro o por mensajes privados. Siempre estaré feliz de ayudarle.
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/11949





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso