Errores, fallos, preguntas - página 221

 
vikulin:

este es el mismo resultado! los parámetros de entrada para estos puntos son los mismos!

Por favor, explique. No entiendo lo de "los parámetros de entrada de estos puntos son los mismos". Por lo que he entendido del funcionamiento del optimizador, cada pase corresponde a un único conjunto de parámetros de entrada. ¿O quiere decir que al utilizar el algoritmo genético puede haber situaciones en las que un único conjunto de parámetros de entrada puede ser procesado por el optimizador varias veces?

...Bueno, sí, eso es exactamente lo que estás diciendo. Entonces resulta que todos los puntos posteriores "de la caché" son sólo una ficción, distorsionando la percepción visual de los resultados de la optimización?

 
sultanm:

Extraño. Esta es la tercera vez. Hay dos puntos en el gráfico que están cerca en valor, pero sólo hay uno en los resultados.

Sugerencia: Por favor, ordene por el valor solicitado, y no olvide mostrar la barra de desplazamiento vertical de la tabla.

 

¿Se solucionará alguna vez este problema?

Es la tercera vez que hablo de ello y no hay reacción.


 
vikulin:


Por cierto, me parece que si se selecciona el modelado de las recotizaciones, no se debería utilizar esta caché. ¿qué opinan los desarrolladores al respecto?

y otro fallo: cuando mi algoritmo genético iba más allá de 10496, el gráfico empezaba a mostrarse de forma incorrecta - verticalmente se escalaba correctamente, se podía entender que se encontraban resultados más altos, pero horizontalmente no se actualizaba. los puntos como si se añadieran en algún lugar de la derecha, ya más allá del borde del gráfico.

Escriba a servicedesk. Y en el punto 2 se interesa por la información completa. EA, construcción del terminal, ajustes de optimización...
 
Código:
int symbols = SymbolsTotal(false);
for (int i=0; i<symbols; i++) {
   Print("Символ №"+i+" значение="+SymbolName(i,false));
}

En el terminal el resultado

2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №11 значение=GBPJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №10 значение=GBPCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №9 значение=EURJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №8 значение=EURCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №7 значение=EURAUD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №6 значение=EURGBP
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №5 значение=AUDUSD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №4 значение=USDCAD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №3 значение=USDJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №2 значение=USDCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №1 значение=GBPUSD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №0 значение=EURUSD

Resultado de la prueba:

2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №11 значение=USDJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №10 значение=USDCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №9 значение=USDCAD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №8 значение=GBPUSD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №7 значение=GBPJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №6 значение=GBPCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №5 значение=EURUSD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №4 значение=EURJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №3 значение=EURGBP
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №2 значение=EURCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №1 значение=EURAUD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №0 значение=AUDUSD

Toda la belleza de la función SymbolName(i) se pierde

 
vyv:

Una petición a los desarrolladores. Mientras el trabajo en MT5 está en ebullición y se siguen haciendo cambios, sería muy bueno ampliar el número de pases de optimización.

Por lo que he entendido la solución para tantas tareas se encuentra para unas 10 000 variantes puede ser un poco más o un poco menos. Unas pocas horas de búsqueda en un procesador y se han encontrado las mejores variantes.

La versatilidad de las pruebas de MQL5+OP+Multicore permite ver nuevos horizontes de tareas (por ejemplo, la búsqueda de patrones) que se pueden resolver con las herramientas de MT5.

Pero aquí está el problema:

El artículo publicado en su sitio tiene un ejemplo de algoritmo genético https://www.mql5.com/ru/articles/55 donde tomó 3^100 fuerza bruta hacia adelante para resolver un problema de búsqueda en 100 barras - bueno, eso es un poco más que LongInt :) mientras que la solución se encontró en 17 000 iteraciones. El algoritmo genético puede encontrar soluciones para muchas más variantes que LongInt. Y esta limitación es completamente infundada y obsoleta. Bueno, excepto que en esta etapa final de MT5 será difícil hacerlo.

Una petición muy grande a los desarrolladores, si no es muy difícil, por favor hagan el número de pases al menos 2^LongInt (2 a la potencia).

¿Puede alguien darme una respuesta?
 

Código:

//+------------------------------------------------------------------+
//|                                                      testInd.mq5 |
//|                                                                  |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   int handle1 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //
   int handle2 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //абсолютно идентичные параметры
   if(handle1 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle1 ="+handle1);
        }
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle2 ="+handle2);
        }
        
   IndicatorRelease(handle2);
   handle2 = INVALID_HANDLE; //добавил для "надежности"
   handle2 = iMA(NULL,0,33,0,MODE_LWMA, PRICE_CLOSE); //другой период
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Измененный? Handle2 ="+handle2); //все обращения к данным handle2 возвращают данные с handle1
        }
   
   
//---
   return(0);
  }

Registro:

2010.12.06 18:07:52:52 testInd (EURUSD,H1) ¿Modificado? Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10

Por lo tanto, todas las llamadas de datos a handle2 son equivalentes a las llamadas a handle1, a pesar del cambio de periodo.

Cuando el Asesor Experto está en funcionamiento, es posible crear indicadores con las mismas características y esa optimización para una manija es razonable, pero ese "pegado" de una manija a una variable es muy molesto.

P.D. He descubierto la razón. Este error es una consecuencia de la optimización a un número de mango.

IndicatorRelease(handle2); //уменьшает счетчик хендлов на единицу и в итоге следующий созданный хэндл(с любой переменной) - опять 10
 
Vigor:

Código:

Registro:

2010.12.06 18:07:52 testInd (EURUSD,H1) ¿Modificado? Mango2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10

Por lo tanto, todas las llamadas a Manipulador2 son iguales a las llamadas a Manipulador1, aunque el periodo esté cambiado.

Durante el funcionamiento de un EA, no podemos descartar la creación de indicadores con las mismas características, y tal optimización para un mango es razonable, pero tal "pegado" de un mango a una variable es muy molesto.

P.D. He descubierto la razón. Es un error - la consecuencia de la optimización a un número de mango.

¿Qué te hace pensar que es un error?

 
alexvd:

¿Qué te hace pensar que es un error?

Bien. Es una característica. Pero uno que debería conocer mejor.

Si un usuario introduce los valores del período para MA desde la interfaz, crea manijas para los indicadores y utiliza los valores de los búferes de los indicadores, entonces habiendo creado (por ejemplo, tengo la configuración por defecto en este formulario) 2 indicadores con las mismas características (sus manijas se almacenan en la envoltura del objeto), él / ella recibe el número de la manija del primer indicador, debido a esta característica.

La siguiente es una posible cadena de acontecimientos.

Situación 1. borra el primer indicador (y el programa realiza IndicatorRelease); como consecuencia, el segundo indicador no funciona automáticamente - error de copia del buffer.

Situación 2. Quita el segundo indicador (y el programa hace IndicatorRelease), el contador del volante disminuye. El primero va bien. Crea un tercer indicador con un periodo diferente. Recibe la cuenta de asas+1, es decir, el número de asas del indicador que acaba de ser eliminado. Al final, lo peor es que el tercer indicador con un periodo diferente, creado con éxito, da los valores del primer indicador, aún no borrado, al buffer.

La función de encolado de números, lleva a situaciones ambiguas cuando se borra uno de los dos encolados y se crea uno nuevo.

//+------------------------------------------------------------------+
//|                                                      testInd.mq5 |
//|                                                                  |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   int handle1 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //
   int handle2 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //абсолютно идентичные параметры
   if(handle1 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle1 ="+handle1);
        }
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle2 ="+handle2);
        }
        
   IndicatorRelease(handle2);

   handle3 = iMA(NULL,0,33,0,MODE_LWMA, PRICE_CLOSE); //другой период
        if(handle3 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Новый handle3 ="+handle3); //все обращения к данным handle3 возвращают данные с handle1
        }
   
   
//---
   return(0);
  }
 
vyv:
¿Puede alguien responder por mí?

Ya se ha hablado de ello aquí.https://www.mql5.com/ru/forum/1997/page6/#comment_31644

Tal vez sería mejor mover la pregunta allí - una sugerencia.

Оптимизация в Тестере стратегий
Оптимизация в Тестере стратегий
  • www.mql5.com
из которых ТОЛЬКО 546 ms было затрачено именно на тестирование эксперта.
Razón de la queja: