Erreurs, bugs, questions - page 438

 
joo:
Peut-être que la simple présence de Sleep (par rapport à son absence) dans le code affecte d'une manière ou d'une autre le temps d'exécution global, mais le fait que Sleep ne compte pas dans le testeur - ça c'est sûr.
Eh bien, je ne suis pas un expert ici... Un retard d'une demi-minute dans le traitement de la fonction Sleep() avec un argument négatif et la perte de 17 jours de test - voilà les faits.
 

Le code raccroche le terminal :

   MqlRates s1[];

   int count=TerminalInfoInteger(TERMINAL_MAXBARS);
   int s1_copied=CopyRates(Symbol(),Period(),0,count,s1);
   if(s1_copied<=0)
      Print("Ошибка копирования ценовых данных ",GetLastError());
   else Print("Скопировано ",ArraySize(s1)," баров");

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

   ArrayFree(s1);

Quelle en est la raison ?

 
Graff:

Le code raccroche le terminal :

Quelle en est la raison ?

Pour commencer :
 int count=TerminalInfoInteger(TERMINAL_MAXBARS);
 Print("count=",count);

Le terminal n'est pas réglé sur Unlim ?

 
uncleVic:
Pour commencer :

Unlim n'est pas dans les paramètres du terminal?


Le nombre maximal de barres est fixé à 5000. Cette valeur peut-elle être réduite ?
 
Graff:
les barres maximales sont de 5000. cette valeur peut-elle être réduite ?

Je ne pense pas que vous puissiez faire moins (je n'en suis pas sûr).

Que montre Print(count) ?

 
uncleVic:

Je ne pense pas que moins soit possible (je n'en suis pas sûr).

Alors, que retourne Print(count) ?

2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) 5000 barres copiées
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

en commentaire -1

J'ai essayé avec un autre symbole mais il n'est pas apparu dans le commentaire -1

REMARQUE : figer après quelques secondes. Je commence le code à partir de int OnInit()

 
joo:
Oui, et cela fonctionne dans le testeur, car Sleep est ignoré dans le testeur.

Le sommeil est entièrement et précisément émulé dans le testeur de sommeil.

Dans l'exemple, en raison d'un dépassement arithmétique lors du traitement de valeurs entières, il n'y a eu qu'une attente de 17,5 jours. Le testeur a attendu exactement le même temps.

Par conséquent, il n'y a pas d'erreur dans le testeur ou dans l'environnement d'exécution de MQL5, mais il y a une erreur évidente commise par le programmeur.

 

Renat:

C'est-à-dire qu'il n'y a pas d'erreur du testeur ou de l'environnement d'exécution MQL5, mais il y a une erreur manifeste du programmeur.

C'est très clair.

Renat:

Le sommeil est émulé dans le testeur de manière complète et assez précise.

En raison du dépassement arithmétique lors du travail avec des valeurs entières, le temps d'attente est de 17,5 jours. C'est exactement le temps qu'a attendu le testeur.

Hmm, voilà. Et je pensais à tort que le sommeil était simplement ignoré.

Il s'avère que si, par exemple, je définissais la mise en veille (3 mois) dans Expert Advisor en mode test, le testeur ferait simplement une avance rapide de l'historique pendant 3 mois ? - C'est génial.

 
Oui, il rembobine. Seule la limite de la fonction est de 49 jours, jusqu'à ce que le compteur de millisecondes soit plein.

Pendant la période d'attente, le testeur continue à émuler entièrement l'environnement de négociation, y compris le traitement des ordres passés précédemment. Le testeur dans MT5 est très détaillé.
 
Graff:
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) 5000 barres copiées
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

dans le commentaire -1

J'ai essayé avec un autre symbole mais il n'est pas apparu dans le commentaire -1

REMARQUE : figer après quelques secondes. Je vais exécuter le code à partir de int OnInit()

Oui. Nous n'avons même pas remarqué l'éléphant.

Cette ligne me rend très suspicieux :

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

ArrayMaximum

recherche l'élément maximum dans un tableau numérique unidimensionnel.

intArrayMaximum(
doublearray[],// tableau à rechercher
intstart=0//à partir de quel index nous commençons la recherche
intcount=WHOLE_ARRAY,// nombre d'index à vérifier
) ;


et dans notre cas :

   MqlRates s1[];

Je pense que le compilateur ne devrait pas sauter cette étape. Qu'est-ce que vous avez ? Pas même un avertissement ? Si ce n'est pas le cas, adressez une demande au Service Desk. D'accord ?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.