Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1315

 
Aleksey Mavrin:

Il y a une telle chose dans MT4, je ne sais pas si lorsque OnInit est déclenché après le changement de compte, l'environnement n'a pas eu le temps de mettre à jour le numéro de compte ou un autre bug, j'ai décidé de minuterie

beaucoup de choses se passent mal si le terminal avec l'EA en cours d'exécution est rechargé.

imho, si le code n'est pas destiné au testeur, alors il est préférable de faire toute l'initialisation au moment du premier tick - alors 99,9% de tout sera initialisé correctement.

 
Igor Makanu:

beaucoup de choses se passent mal si le terminal avec une EA en cours est surchargé.

imho, si le code n'est pas destiné à un testeur, alors il vaut mieux faire toute l'initialisation au moment du premier tick - alors 99,9% de tout sera initialisé correctement.

Je suis d'accord, mais il y en a probablement 0,1% ;))

 
Igor Makanu:

beaucoup de choses se passent mal si le terminal avec une EA en cours est surchargé.

imho, si le code n'est pas destiné à un testeur, il est préférable de tout initialiser au moment du premier tick - alors 99,9% de tout sera initialisé correctement.

il vaut mieux faire toute l'initialisation au premier tic - alors 99,9% des choses seront initialisées correctement... Comment c'est?

 
ponochka:

toutes les initialisations sont mieux faites à l'arrivée du premier tick - alors 99.9% de tout sera initialisé correctement... Comment c'est?

void OnTick()
{
   static bool first_run = true;
   if(first_run)
   {
      MyOnInit();
      first_run = false;
   }
 
Igor Makanu:

Vous pouvez le faire directement, en évitant une entretoise de type "My".

int OnInit()
  {
   ...
    account=AccountNumber();
   ...
  }

void OnTick()
{
  static bool first_run = true;
   if(first_run)
   {
     if(account==0) { // Если терминал не успел получить данные с сервера
      OnInit(); // пробуем снова всё инициализировать
      return;
     }
      first_run = false;
   }
 
Vitaly Muzichenko:

Vous pouvez le faire directement en évitant le remplissage sous la forme de "Mon".

ce n'est pas du rembourrage, c'est du code structuré.

Votre exemple est un exemple de la façon dont paresseux d'écrire un couple de lettres supplémentaires et obtenir un code non systématique - ici au moins 2 fois sera appelé OnInit() lors de l'exécution de l'EA, pas le fait qu'il sera nécessaire, ou plutôt ne pas violer ce qui a été écrit avant - le niveau des questions que vous avez vu, non ? )))))

 
Igor Makanu:

ce n'est pas un tampon, c'est un code structuré

Votre exemple est un exemple de la façon dont paresseux d'écrire un couple de lettres supplémentaires et obtenir le code non structuré - ici au moins 2 fois sera appelé OnInit() au démarrage EA, pas le fait qu'il sera nécessaire, ou plutôt ne sera pas briser ce qui a été écrit avant - le niveau des questions que vous avez vu, non ? )))))

first_run = true;

Vous devez également vérifier dans Init à la première initialisation et peut-être déjà là "zéro".

Sinon, oui, je suis d'accord.


P.S. Je ne suis pas d'accord, il ne sera pas appelé 2 fois si vous avez réussi à vous connecter au serveur et à obtenir des données réelles de celui-ci.

 
Igor Makanu:

ne fonctionne pas, car il est écrit dans la documentation queOnTick() ne fonctionne pas dans les indicateurs !

 
ponochka:

ne fonctionne pas, car la documentation indique queOnTick() ne fonctionne pas dans les indicateurs !

Eh bien, c'est la limite :(

Remplacer OnTick() par

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
Et je vais aller à l'autre branche.
 
Vitaly Muzichenko:

Eh bien, c'est la limite :(

J'ai écrit plus haut, à propos du niveau des questions ;)

Et vous avez commencé à chercher l'optimalité de l'initialisation dans OnTick/OnInit - tout y est plus simple, il faut protéger le code trouvé pour le partager avec les mêmes amis )))).