[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 323

 
Vinin писал(а) >>

C'est pourquoi vous faites des erreurs exprès.

Et exprès, c'est drôle... J'aimerais voir cette erreur, mais je ne la trouve pas.

 
Daiver2 >> :

Je lance quelques fonctions comme script de test pour voir s'il y a des erreurs de compilation et lesquelles pour vérifier si elles fonctionnent ou non dans le terminal. J'ai pris aujourd'hui la fonction de pré-calcul des barres dans la fenêtre :

Naturellement, le message *Pas assez de barres* apparaît, mais sur un nouveau tick, je comprends que ce message apparaîtra à nouveau indéfiniment.

Maintenant, j'ajoute une variable et j'écris une instruction if, et aussi dans le futur bloc de gestion des erreurs Bloc_Error, je mets un opérateur switch et le résultat :

La question est de savoir ce que j'ai fait de mal dans l'opérateur de commutation, pourquoi le message *Expert ne fonctionne pas* n'est pas affiché, et pourquoi l'EA s'arrête vraiment de fonctionner ?????.
//+------------------------------------------------------------------+      
    switch()//?????????????? почему в switch не передаёте параметр 
      {
      case 3:          // Неверные параметры:
      Work=false;
      return(0);
      }


 

Bonjour à tous !

Je n'arrive pas à comprendre la cause de l'erreur lorsque l'EA est en cours d'exécution. Je teste un EA sur 11 paires dans un terminal en même temps (compte de démonstration). Je vérifie les conditions d'entrée au début de chaque heure, c'est-à-dire que 11 EAs commencent à travailler simultanément. La fonction IsTradeBusy() (d'ici https://www.mql5.com/ru/articles/1412) a été utilisée pour éviter qu'ils ne se dérangent les uns les autres. Récemment, le conseiller expert a signalé une erreur lorsqu'il a essayé de modifier la valeur de la variable globale TradeIsBusy au lieu d'ouvrir une position. Voici une partie du code :

     // пытаемся менять значение TradeIsBusy с 0 на 1
     // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
     if(GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 )) 
         return(1);
     else
     // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
     // возникла ошибка (это мы и проверим)
     {
        _GetLastError = GetLastError();
        // если это всё таки ошибка, выводим информацию и пробуем ещё раз
        if(_GetLastError != 0)
        {
           Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
           _GetLastError );
           continue;
        }
     }

Codes d'erreur :

#4002 - "indice de tableau - hors de la plage".

#4105 - "Aucune commande n'est sélectionnée".

Je ne comprends pas quelles conditions peuvent provoquer ces erreurs en utilisant la commande GlobalVariableSetOnCondition ?

Terminal Broco Trader 4.0 build 225.

Le terminal peut-il avoir ce genre de problème ?

 
Urain писал(а) >>

>>Merci, je le ferai.

 
OAndrey писал(а) >>

Bonjour à tous !

Je n'arrive pas à comprendre la cause de l'erreur lorsque l'EA est en cours d'exécution. Je teste un EA sur 11 paires dans un terminal en même temps (compte de démonstration). Je vérifie les conditions d'entrée au début de chaque heure, c'est-à-dire que 11 EAs commencent à travailler simultanément. La fonction IsTradeBusy() (d'ici https://www.mql5.com/ru/articles/1412) a été utilisée pour ne pas se déranger. Récemment, le conseiller expert a signalé une erreur lorsqu'il a essayé de modifier la valeur de la variable globale TradeIsBusy au lieu d'ouvrir une position. Voici une partie du code :

Codes d'erreur :

#4002 - "indice de tableau - hors de la plage".

#4105 - "Aucune commande n'est sélectionnée".

Je ne comprends pas quelles conditions peuvent provoquer ces erreurs en utilisant la commande GlobalVariableSetOnCondition ?

Terminal Broco Trader 4.0 build 225.

Le terminal peut tomber en panne comme ça ?

Je ne peux rien dire sur ce morceau de code. Et comme un conseil. Remet l'état de la dernière erreur au début de la fonction. Elle peut se produire ailleurs.

   GetLastError();  //Сбрасываем состояние 

   // пытаемся менять значение TradeIsBusy с 0 на 1
   // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
   if(GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 )) 
      return(1);
   else
   // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
   // возникла ошибка (это мы и проверим)
   {
      _GetLastError = GetLastError();
      // если это всё таки ошибка, выводим информацию и пробуем ещё раз
      if(_GetLastError != 0)
      {
         Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
         _GetLastError );
         continue;
      }
   }
 

Comment faire un saut de ligne dans le texte ? Par exemple, j'affiche quelque chose sur un graphique, dans OBJ_LABEL, et je veux que le texte soit écrit sur plusieurs lignes.

 
Mathers >> :

Comment faire un saut de ligne dans le texte ? Par exemple, j'affiche quelque chose sur un graphique, dans OBJ_LABEL, et je veux que le texte soit écrit sur plusieurs lignes.

Affichage dans plusieurs étiquettes.

 

Que se passe-t-il si le nombre de lignes change dynamiquement ? Et il peut être assez grand. Peut-être peut-on utiliser autre chose à la place d'une étiquette ?


Et voici une autre question : disons que j'ai un script qui fait quelque chose dans une boucle infinie avec un délai d'une seconde, par exemple. Lorsque j'essaie de le supprimer - je choisis "supprimer le script" mais il n'est pas supprimé du graphique, il recommence à rammer sans aucun délai. Lorsque j'appuie une nouvelle fois sur "supprimer", le script est supprimé. Qu'est-ce qui se passe ? Peut-être devrais-je ajouter quelque chose au code pour le compléter correctement ?

 
Mathers >> :

Que se passe-t-il si le nombre de lignes change dynamiquement ? Et il peut être assez grand. Peut-être peut-on utiliser autre chose à la place d'une étiquette ?

Alerte, alternativement. Commentaire - c'est bien.

Et voici une autre question : disons que j'ai un script qui fait quelque chose dans une boucle infinie avec un délai d'une seconde, par exemple. Lorsque j'essaie de le supprimer - je choisis "supprimer le script" mais il n'est pas supprimé du graphique, il recommence à rammer sans aucun délai. Lorsque j'appuie une nouvelle fois sur "supprimer", le script est supprimé. Qu'est-ce qui se passe ? Peut-être que je devrais ajouter quelques mots supplémentaires dans mon code.

Remplacer while(true) par while(!IsStopped())

 
Mathers >> :

Que se passe-t-il si le nombre de lignes change dynamiquement ? Et il peut être assez grand. Peut-être peut-on utiliser autre chose à la place d'une étiquette ?

Non. Sauf si le commentaire ne convient pas. Ecrivez une fonction f où la sortie sera générée et écrivez ce dont vous avez besoin à travers elle.

Et voici une autre question : disons que j'ai un script qui fait quelque chose dans une boucle infinie avec un délai d'une seconde, par exemple. Lorsque j'essaie de le supprimer - je choisis "supprimer le script" mais il n'est pas supprimé du graphique, il recommence à rammer sans aucun délai. Lorsque j'appuie une nouvelle fois sur "supprimer", le script est supprimé. Qu'est-ce qui se passe ? Peut-être que je devrais ajouter quelques mots supplémentaires dans mon code.

C'est comme ça que ça devrait être.

Raison: