Testeur de stratégie MetaTrader 5 : bugs, anomalies, suggestions d'amélioration - page 62

 
fxsaber:

1. Dézippez l'archive dans le dossier vide du terminal.


2. Exécutez le script fxsaber\CreateSymbol.ex5.


Dans quelques secondes, le graphique du symbole personnalisé apparaîtra.


2. Ouvrez Tester (CTRL+R) et sélectionnez le paramètre marqué.



3. Cliquez sur Démarrer dans la fenêtre Tester qui apparaît.



4. Lorsque les premiers résultats d'optimisation sont disponibles, appuyez sur Stop.


5. Modifiez la date de début de l'intervalle en 2019.11.01 dans les Paramètres du testeur et appuyez sur Démarrer.


6. Valeurs délirantes dans les résultats d'optimisation (d'après la source, vous pouvez voir qu'elles ne peuvent pas différer entre elles de plus de 50).


Répétez ces étapes plusieurs fois. Le problème a été reproduit à 100%. Ceux qui vont l'essayer, faites-le moi savoir.

Je vais essayer.

Vous essayez à votre tour avec les tics avec lesquels j'ai essayé de reproduire. MetaQuotes-Serveur de démonstration

1. Création d'un symbole personnalisé basé sur CHFJPY à partir de la boîte de dialogue du terminal (seul le nom a été modifié).

2. Exportation des ticks CHFJPY pour plusieurs années dans un fichier csv.

3. importé ces ticks dans CHFJPY.custom

4. Faites fonctionner votre Expert Advisor pour l'optimisation génétique. Dans différentes combinaisons

 
Slava:

Vous essayez à votre tour avec les tics avec lesquels j'ai essayé de reproduire. MetaQuotes-Serveur de démonstration

Reproduit. Avec cette gamme d'entrées.


Les résultats ne doivent pas différer de plus de 50 % les uns des autres.


Triez par ordre croissant, puis comparez les lignes les plus élevées et les plus basses.


SZZ Répétez les étapes 3 à 6 à partir d'ici. Avec les mêmes dates.

 

J'ai essayé le CHFJPY original sur MQ-Demo. J'y ai joué !

  1. Définissez l'intervalle de temps et l'AG lancé.
  2. Lorsque les premiers résultats de tous les agents arrivent, j'appuie sur Stop.
  3. Si je n'obtiens aucun résultat, je passe à l'étape 1, en modifiant la période (uniquement la date de début).
Trois tentatives et voici le résultat.

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:

J'ai essayé le CHFJPY original sur MQ-Demo. Je l'ai joué !

  1. Définissez l'intervalle de temps et l'AG lancé.
  2. Lorsque les premiers résultats de tous les agents arrivent, j'appuie sur Stop.
  3. Si je n'obtiens aucun résultat, je passe à l'étape 1, en modifiant la période (uniquement la date de début).
Trois tentatives et voici le résultat.

Je fais la même chose. Il ne se reproduit pas.

Voyons les journaux des agents de test !

 
Slava:

Je fais la même chose. Il ne joue pas.

Donnez-moi les logs des agents testeurs !

J'ai joint tous les journaux.

Dossiers :
TesterLogs.zip  56 kb
 
fxsaber:

J'ai joint tous les journaux.

Vous avez reproduit le problème sur un forex régulier CHFJPY, même pas un forex personnalisé.
 
Slava:
Vous avez reproduit le problème sur un forex ordinaire CHFJPY, même pas un forex personnalisé.

Oui, de façon régulière. J'étais curieux de voir les ticks dans les passes, alors j'ai ajouté quelques lignes à l'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);
  }
}


J'ai ensuite pris deux fichiers et les ai comparés en utilisant le 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++;
    }
}


Résultat.

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


L'optimisation a été effectuée à partir de 2019.06.01. Dans les résultats, on voit clairement que les premiers ticks sont d'une date différente. Et ces dates sont différentes les unes des autres.


ZS a fait une vérification supplémentaire. Les tics enregistrés dans chaque passe de délire ne changent pas : le premier tic est égal au dernier. En général, les passes GA suivent une étrange séquence de tics.

 
fxsaber:

En général, les passes de l'AG suivent des séquences de tics étranges.

Reproduit en mode force brute complète. Le problème affecte tous les modes d'optimisation.

 
fxsaber:

Oui, de façon régulière. J'étais curieux de voir les ticks dans les passes, alors j'ai ajouté quelques lignes à l'EA.


Ensuite, j'ai pris deux fichiers et je les ai comparés grâce au script.


Résultat.


L'optimisation a été effectuée à partir de 2019.06.01. Dans les résultats, on voit clairement que les premiers ticks sont d'une date différente. Et ces dates sont différentes les unes des autres.

L'effet n'apparaît-il que lorsque l'optimisation précédente est terminée à l'avance à partir du bouton "Stop" ? Ou avec une terminaison normale également ?
 
Slava:
L'effet se produit-il uniquement lorsque l'optimisation précédente est terminée avant le bouton "Stop" ? Ou avec une terminaison normale également ?

Avant d'appuyer sur Stop, je vois dans les logs et dans le tableau d'optimisation que les passes erronées ont déjà été comptées. Puis j'appuie sur Stop, car il n'y a pas de raison de continuer.

Vous avez mal compris la question.

Oui, en règle générale, vous devez appuyer sur Stop au moins une fois sur l'Optimisation précédente. Mais dès que l'on touche une Optimisation erronée, toutes les suivantes le deviennent aussi (je ne change plus l'intervalle de temps).


Peut-être que quelqu'un se connectera au replay. Il est étrange que cela ne fonctionne pas pour vous, mais pour moi, sur un terminal propre, cela fonctionne rapidement.


ZS Il serait bon d'avoir une sorte de bêta fermée avec un maximum d'enregistrement du côté des agents. Alors, les journaux de ma machine ont peut-être localisé le problème.

Raison: