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

 
Andrey F. Zelinsky:

déclarer une variable de manière globale et l'initialiser lors de la déclaration, par exemple int kk=0 ;

puis, dans OnTick(), désimprimer et modifier la valeur, par exemple Print("kk=",kk) ; ++kk ;

puis changez de TF -- et voyez le résultat.

il est clair que la variable globale conservera sa valeur même si le TF est modifié - mais rien de tel ne se produit dans le testeur.

 
Andrey Dik:

il est clair que la variable globale conservera sa valeur même si le TF est modifié - mais rien de tel ne se produit dans le testeur.

Vous avez maintenant trouvé la réponse à la cause de la différence dans les résultats.

Lors de l'optimisation, les paramètres sont re-sélectionnés, c'est-à-dire que l'Expert Advisor est redémarré avec des paramètres différents.

 
Andrey F. Zelinsky:

Vous avez maintenant trouvé la réponse à la différence de résultats.

Pensez-vous que la variable globale de l'EA conserve la valeur des exécutions antérieures de l'optimiseur et qu'elle est reportée sur les exécutions suivantes ?

 
Andrey F. Zelinsky:

Vérifiez-le, c'est plus facile de vérifier que de deviner.

Renat a écrit plus haut que l'optimiseur fonctionne "comme une horloge" et que la raison est dans le code -- il a recommandé plusieurs fois de faire un unpriming -- je suppose que personne ne l'a fait.

Avez-vous vérifié vous-même ? Y a-t-il des exemples clairs de cas où une exécution unique fonctionne différemment d'une optimisation ?

par exemple, je me souviens que la suppression d'un handle dans le testeur ne fonctionnait pas avant, cela provoquait un débordement de la mémoire et le plantage du terminal en même temps que le système. peut-être que ce problème a déjà été résolu mais il y a encore quelques pièges avec la création et la suppression des handles d'indicateurs et il y a des différences dans l'optimiseur et les exécutions d'indicateurs uniques. comme je le sais, les développeurs ont travaillé très dur pour accélérer et minimiser la consommation de mémoire autant que possible.

 
Andrey Dik:

L'avez-vous vérifié vous-même ? Existe-t-il des exemples clairs dans lesquels une exécution unique fonctionnera différemment que dans le cadre d'une optimisation ?

dans ce cas, il ne s'agit pas d'un seul passage.

 
Andrey F. Zelinsky:

Vérifier l'initialisation des variables déclarées globalement.

Si l'initialisation n'est pas dans OnInit(), mais dans la déclaration et si leurs valeurs sont modifiées dans le code.

  1. Je l'ai vérifié.
  2. C'est ce que sont les variables - elles peuvent être modifiées.
  3. Corrigez-moi si je me trompe.
  • Si une variable est définie, de la mémoire lui est réservée.
  • S'il n'est pas initialisé, tout peut y être stocké.
  • Quelle est la différence entre l'initialiser par zéro tout de suite ou assigner le résultat des calculs à un certain endroit ?
  • Si vous essayez d'utiliser une variable non initialisée, le compilateur génère un avertissement.

Un exemple simple :

int tst(int x)
{
   int y;
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);		// possible use of uninitialized variable 'y'
}

Bien que.... Pour une raison quelconque, le compilateur ne génère pas l'avertissement si vous placez la déclaration dans la portée globale ((((

int y;

int tst(int x)
{
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);           // никакого предупреждения уже нет...
}
'test.mq5'
code generated
0 errors, 0 warnings, 143 msec elapsed

Je m'attendais à quelque chose de différent...

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

  1. J'ai vérifié.
  2. Les variables ne sont que cela, des variables, elles peuvent être modifiées.
  3. Corrigez-moi si je me trompe.
  • Si une variable est déclarée, de la mémoire lui est réservée.
  • S'il n'est pas initialisé, tout peut y être stocké.
  • Quelle est la différence entre l'initialiser par zéro tout de suite ou assigner le résultat des calculs à un certain endroit ?
  • Si vous essayez d'utiliser une variable non initialisée, le compilateur génère un avertissement.

Un exemple simple :

Bien que.... Pour une raison quelconque, le compilateur ne génère pas l'avertissement si vous placez la déclaration dans la portée globale ((((

Je m'attendais à quelque chose de différent.

La cinquième page était en cours, mais il n'y avait toujours pas de code mql5... Il reste également un mystère entouré d'obscurité concernant les tests : symbole(s), calendrier(s), paramètres des tests.

 

Bien, une dernière question avant de commencer l'apprêtage.

Par exemple, j'ai enregistré les résultats :

optimiseur - acheter;vendre;vendre;acheter;acheter;vendre

testeur - acheter;vendre;vendre;acheter ;acheter;vendre;acheter;acheter;vendre

Comment les données sur ces transactions"supplémentaires" peuvent-elles aider à comprendre de quel plafond elles proviennent ? Peut-être devrions-nous également écrire les prix des barres précédentes, ou quoi d'autre ?

 
Vladimir Karputov:

La cinquième page passait, mais le code mql5 n'était toujours pas là... Il reste également un mystère entouré d'obscurité concernant les tests : symbole(s), calendrier(s), paramètres des tests.

Bienvenue au retour des vacances ))))

Vous pouvez tout voir ici.

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

  1. J'ai vérifié.
  2. Les variables ne sont que cela, des variables, elles peuvent être modifiées.
  3. Corrigez-moi si je me trompe.
  • Si une variable est déclarée, de la mémoire lui est réservée.
  • S'il n'est pas initialisé, tout peut y être stocké.
  • Quelle est la différence entre l'initialiser par zéro tout de suite ou assigner le résultat des calculs à un certain endroit ?
  • Si vous essayez d'utiliser une variable non initialisée, le compilateur génère un avertissement.

Un exemple simple :

Bien que.... Pour une raison quelconque, le compilateur ne génère pas l'avertissement si vous placez la déclaration dans la portée globale ((((

Je m'attendais à quelque chose de différent...

Si 'x' est de type double, les exemples donnés sont fondamentalement faux et l'état 'y' est indéfini dans les deux cas.

c'est-à-dire qu'il est possible que, quelque part dans les profondeurs des réseaux neuronaux, on obtienne soit des valeurs doubles spéciales - inf-types, nan-types ou similaires aux valeurs eps

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...
Raison: