Que diable se passe-t-il ? - page 2

 

J'ai une autre astuce. Le conseiller met une vente à l'ouverture de chaque heure. Pour l'euro, cela fonctionne correctement, mais pour le symbole personnalisé, la façon de procéder n'est pas claire.

En mode visuel, certains chandeliers sont manquants.


Dossiers :
MySymbol.mq5  4 kb
Test.mq5  2 kb
 
Сергей Таболин:

Il s'agit encore une fois du testeur/optimisateur...

J'ai remarqué des divergences dans les résultats de l'optimisation et du test unique. Redémarrage du terminal, modification des paramètres (juste pour être sûr). Début de l'optimisation.

J'ai fait un seul test...

Comment est-ce possible ? D'où vient cette absurdité ?

C'était la même chose. Entre les passes d'optimisation, les variables n'étaient pas toujours ou pas toutes initialisées comme elles l'étaient avant une seule passe. J'ai commencé à tout initialiser et le problème a disparu.

Une autre fois, j'ai eu un problème similaire à cause d'iSAR, sur des étapes minimales.

 

Un client avait un problème. Son conseiller expert testait et donnait des résultats dans le testeur, mais dans l'optimiseur, toutes les exécutions étaient nulles.

L'algorithme de son conseiller expert en termes d'ouverture de transactions était basé sur la lecture de la légende du bouton qui changeait en fonction de la situation. Comme les objets graphiques ne sont pas rendus lors de l'optimisation, cette demande a toujours donné un résultat négatif.

Si l'algorithme de votre conseiller expert utilise des données provenant d'objets graphiques, il peut également y avoir des différences importantes entre le test et l'optimisation.

 
Сергей Таболин:


Comment ça ? Les deux sont identiques. Comment peut-il y avoir une différence ? D'autant plus que presque toutes les données sont initialisées dans une boucle. Et si quelque chose n'y est pas initialisé, vous obtiendrez une erreur.


Si vous le pouvez - développez. J'aimerais voir l'initialisation dans la boucle. Je vais le montrer à ma petite-fille.

 
Pour ne plus jamais le faire.
 
Алексей Тарабанов:

Si possible, plus de détails. Je voudrais voir l'initialisation dans la boucle. Je vais le montrer à ma petite-fille.

int sum = 0;

for ()

  sum = 0;

  for ()

    sum += ....

Ou mieux encore, votre petite-fille n'en comprendra pas le sens :

int sum;

for ()

  sum = 0;

  for ()

    sum += ....
 
Andrey Barinov:
Il suffit d'oublier d'initialiser quelque chose dans votre code pour qu'il y ait une différence. Vérifiez le code.

J'ai tout vérifié à nouveau - toutes les variables sont initialisées.

@Andrey Kaunov, merci, mais je n'utilise pas du tout d'objets graphiques.

Alexei Tarabanov:

Si vous le pouvez - développez. Je voudrais voir l'initialisation dans la boucle. Je vais le montrer à ma petite-fille.

Pour l'amour de Dieu )))) J'ai un peu exagéré - pas tous, bien sûr, mais seulement des poignées d'indicateurs ))))

int      ind_handle[];

int OnInit()
{
...........
   if(!nc_getHandles()) return(INIT_FAILED);
...........
}
//+------------------------------------------------------------------+
bool  nc_getHandles(void)
{
   ind_nums = ArraySize(indicators);
   ArrayResize(ind_handle, ind_nums);

   for(int i = 0; i < ind_nums; i++)
   {
      ind_handle[i]  = iCustom(Symbol(), Period(), folder+indicators[i]);
      if(ind_handle[i] == INVALID_HANDLE)
      {
         Print("Ошибка получения хандла индикатора >>> "+indicators[i]);
         writeErrorFile(program_name,program_version,"Ошибка получения хандла индикатора >>> "+indicators[i]);
         return(false);
      }
   }
   Print("Получены хэндлы всех индикаторов >> ",ArraySize(indicators));
//-----------------------------------
   return(true);
}
 

Venons-en au fait.

J'ai complètement effacé tous les journaux et les caches.

J'ai démarré l'éditeur, recompilé l'Expert Advisor.

J'ai ouvert le terminal.

Démarrage de l'optimisation génétique.

Attendre...


Exécution d'un seul test.

Je vérifie si les paramètres sont corrects - ils sont passés correctement.

J'ouvre l'onglet Backtest.

Bénéfices - 697 / 247

Trades - 44 / 56.

Je vais maintenant rassembler les journaux et les joindre.

Dossiers :
mt5logs.zip  288 kb
 

Examinez le code et essayez de comprendre ce qui se passe dans les transactions dans le cadre de l'optimisation et avec un seul passage.

Désimprimez-le, mettez-le dans un dossier vous-même.

Il s'agit de la logique à l'intérieur de votre programme. Que personne d'autre que vous ne peut voir et donc aucune aide ne sera apportée.

 
Renat Fatkhullin:

Examinez le code et essayez de comprendre ce qui se passe dans les transactions dans le cadre de l'optimisation et avec un seul passage.

Désimprimez-le, mettez-le dans un dossier vous-même.

Il s'agit de la logique à l'intérieur de votre programme. Que personne d'autre que vous ne peut voir et donc il n'y aura pas d'aide.

Renat, merci. Mais expliquez-moi, qui ne connaît pas la différence entre 2*2+2*3 dans l'optimiseur et single pass ? Donnez-moi au moins un indice sur l'endroit exact où il peut y avoir une divergence ?

Et, puisque vous l'avez mentionné, donnez-moi un indice où et comment trouver les différences entre l'EA dans le Strategy Tester et sur un compte réel?

J'ai, peut-être par stupidité, toujours cru que le code écrit (qu'il ait des erreurs ou non, qu'il soit optimisé ou non), est compilé, et donc qu'il devrait fonctionner de la même manière que ce soit dans l'optimiseur, ou dans le testeur, ou sur un compte réel...

Prenons simplement la position d'un programmeur ordinaire : où, comment et par quels moyens doit-on rechercher une différence peu claire dans l'exécution d'un code (compilé) dans ces trois états ?

Moi, en tant qu'utilisateur, je vois seulement qu'un exécutable ne fonctionne pas de la même manière dans l'optimiseur et le testeur, ce qui signifie que dans la vie réelle, il fonctionnera de la même manière ......


Une pensée m'est venue, que se passe-t-il si tu testes un EA et qu'il... Eh bien, ce n'est pas bon. Et si je l'utilise pour un vrai trading ? Et si c'était le Saint Graal ? ))))