Probador de Estrategias de MetaTrader 5: errores, fallos, sugerencias de mejora - página 62

 
fxsaber:

1. Descomprima el archivo en la carpeta vacía del Terminal.


2. Ejecute el script fxsaber\CreateSymbol.ex5.


En unos segundos aparecerá el gráfico del símbolo personalizado.


2. Abra el comprobador (CTRL+R) y seleccione el ajuste marcado.



3. Haga clic en Inicio en la ventana del Comprobador aparecida.



4. Cuando los primeros resultados de optimización estén disponibles, pulse Stop.


5. Cambie la fecha de inicio del intervalo a 2019.11.01 en la configuración del comprobador y pulse Inicio.


6. Los valores delirantes en los resultados de la optimización (de la fuente, se puede ver que no pueden diferir entre sí por más de 50).


Repite estos pasos varias veces. El 100% reprodujo el problema. Quien lo pruebe, que me avise.

Lo intentaré.

Tú a su vez prueba con las garrapatas con las que intenté reproducir. Servidor MetaQuotes-Demo

1. Creado desde el diálogo de la terminal un símbolo personalizado basado en el CHFJPY (sólo se ha cambiado el nombre)

2. exportar los ticks del CHFJPY de varios años a un archivo csv

3. importar estos ticks en CHFJPY.custom

4. Ejecute su Asesor Experto para la optimización genética. En diferentes combinaciones

 
Slava:

Tú a su vez prueba con las garrapatas con las que intenté reproducir. Servidor MetaQuotes-Demo

Reproducido. Con esta gama de entradas.


Los resultados no deben diferir en más de 50 entre sí.


Ordene en orden ascendente, y luego compare las líneas más altas y más bajas.


SZZ Repite los pasos 3-6 desde aquí. Con las mismas fechas.

 

Probé el CHFJPY original en MQ-Demo. ¡Lo he jugado!

  1. Establece el intervalo de tiempo y la GA iniciada.
  2. Cuando llegan los primeros resultados de todos los Agentes, pulso Stop.
  3. Si no obtengo ningún resultado, voy al paso 1, cambiando el marco temporal (sólo la fecha de inicio).
Tres intentos y este es el resultado.

2020.02.21 08:38:14.104 Core 5  genetic pass (0, 252) returned result 965118462.000000 in 0:00:01.114
2020.02.21 08:38:14.114 Core 2  genetic pass (0, 111) returned result 686545176.000000 in 0:00:00.999
2020.02.21 08:38:14.114 Core 2  genetic pass (0, 112) returned result 686545168.000000 in 0:00:01.011
2020.02.21 08:38:14.332 Core 4  genetic pass (0, 76) returned result 1953417341.000000 in 0:00:01.342
2020.02.21 08:38:14.332 Core 8  genetic pass (0, 181) returned result 2212155593.000000 in 0:00:01.419
2020.02.21 08:38:14.395 Core 3  genetic pass (0, 146) returned result 1326263652.000000 in 0:00:01.154
2020.02.21 08:38:14.871 Core 1  genetic pass (0, 2) returned result 1143628048.000000 in 0:00:01.324
 
fxsaber:

Probé el CHFJPY original en MQ-Demo. ¡Lo he jugado!

  1. Establece el intervalo de tiempo y la GA iniciada.
  2. Cuando llegan los primeros resultados de todos los Agentes, pulso Stop.
  3. Si no obtengo ningún resultado, voy al paso 1, cambiando el marco temporal (sólo la fecha de inicio).
Tres intentos y este es el resultado.

Haciendo lo mismo. No se reproduce.

¡Vamos a tener algunos registros de agentes probadores!

 
Slava:

Haciendo lo mismo. No está jugando.

¡Dame los registros de los agentes probadores!

Adjunto todos los registros.

Archivos adjuntos:
TesterLogs.zip  56 kb
 
fxsaber:

He adjuntado todos los registros.

Ha reproducido el problema en un forex CHFJPY normal, ni siquiera uno personalizado
 
Slava:
Ha reproducido el problema en un forex CHFJPY normal, ni siquiera uno personalizado

Sí, en uno normal. Me dio curiosidad por las garrapatas en los pases allí, así que añadí algunas líneas a la EA.

// Критерий оптимизации - сумма входных параметров + сумма нецелых частей секунды каждого тика (в миллисекундах).

input int inFakeRange1 = 0;
input int inFakeRange2 = 0;
input int inFakeRange3 = 0;
input int inFakeRange4 = 0;
input int inFakeRange5 = 0;

long Sum = inFakeRange1 + inFakeRange2 + inFakeRange3 + inFakeRange4 + inFakeRange5;

MqlTick Ticks[1000];
int Count = 0;

void OnTick()
{
  MqlTick Tick;

  if (SymbolInfoTick(_Symbol, Tick))
  {
    Sum += Tick.time_msc % 1000;
    
    if (MQLInfoInteger(MQL_TESTER) && (Count < ArraySize(Ticks))) // Запоминаем тики
      Ticks[Count++] = Tick;
  }
}

double OnTester()
{
  FrameAdd(__FILE__, Count, Sum, Ticks); // Отправляем тики через фрейм
  
  return((double)Sum);
}

void OnTesterPass( void )
{
  ulong Pass;
  string Name;
  long id;
  double Value;  

  MqlTick Ticks2[];
  
  while (FrameNext(Pass, Name, id, Value, Ticks2)) // Принимаем фрейм-тики
  {
    FileSave(__FILE__ + "\\" + (string)Pass + ".bin", Ticks2); // Сохраняем на диск
    
    Print((string)Pass + " - " + (string)Value);
  }
}


Luego tomé dos archivos y los comparé usando el script.

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

void OnStart()
{
  MqlTick Ticks1[];
  MqlTick Ticks2[];
  
  const int Size = (int)MathMin(FileLoad("88021.bin", Ticks1), FileLoad("11921.bin", Ticks2)); // Считали тики из файлов.
  
  int Count = 0;
  
  for (int i = 0; (i < Size) && (Count < 10); i++)
    if (_R(Ticks1[i]) != Ticks2[i]) // Если тики отличаются, выводим их значения.
    {
      Print(i);
      
      ArrayPrint(Ticks1, _Digits, NULL, i, 1);
      ArrayPrint(Ticks2, _Digits, NULL, i, 1);
      
      Print("------------");
      
      Count++;
    }
}


Resultado.

0
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
1
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
2
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
3
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
4
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
5
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
6
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
7
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
8
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000
------------
9
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.08.28 23:27:03 108.10400 108.12500 0.0000        0 1567034823177     134       0.00000
                 [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.10.11 21:21:11 108.71800 108.74100 0.0000        0 1570828871198       4       0.00000


La optimización se realizó a partir de 2019.06.01. En los resultados se ve claramente que los primeros ticks son de una fecha diferente. Y estas fechas son diferentes entre sí.


ZS hizo una comprobación extra. Los ticks registrados en cada pase de delirio no cambian: el primer tick es igual al último. En general, los pases de GA siguen una extraña secuencia de ticks.

 
fxsaber:

En general, los pases de GA siguen unas extrañas secuencias de tics.

Reproducido en modo de fuerza bruta completa. El problema afecta a todos los modos de optimización.

 
fxsaber:

Sí, en uno normal. Me dio curiosidad por las garrapatas en los pases allí, así que añadí algunas líneas a la EA.


Luego tomé dos archivos y los comparé a través del script.


Resultado.


La optimización se realizó a partir de 2019.06.01. En los resultados se ve claramente que los primeros ticks son de una fecha diferente. Y estas fechas son diferentes entre sí.

¿El efecto sólo aparece cuando se completa la optimización anterior antes de tiempo desde el botón "Stop"? ¿O también con la terminación normal?
 
Slava:
¿El efecto se produce sólo cuando se completa la optimización anterior antes de tiempo desde el botón "Stop"? ¿O también con la terminación normal?

Antes de pulsar Stop, veo en los registros y en la tabla de optimización que ya se han contabilizado los pases erróneos. Entonces pulso Stop, porque no tiene sentido continuar.

Has entendido mal la pregunta.

Sí, como norma, debe pulsar Stop al menos una vez en la Optimización anterior. Pero en cuanto das con una Optimización errónea, todas las siguientes también lo son (ya no cambio el intervalo de tiempo).


Quizás alguien se conecte a la repetición. Es extraño que a ti no te funcione, pero a mí en un Terminal limpio se reproduce rápidamente.


ZS Sería bueno tener algún tipo de beta cerrada con el máximo de registros en el lado de los Agentes. Entonces los registros de mi máquina pueden haber localizado el problema.