Erreurs, bugs, questions - page 436

 
Interesting:

1. Pourquoi ça ? Les symptômes nuisibles doivent être traités, et de manière décisive.

2. Les variables, tableaux et autres choses ne doivent pas être nommés de manière cohérente ou avec des mots-clés du langage (mais le tableau "Symbol" est très frappant, on ne peut pas dire si c'est un tableau ou autre chose dans le code).

1. Tout d'abord, vous devez vraiment établir si la symptomatologie appartient aux manifestations positives ou négatives. Dans mon expérience, j'ai eu des cas où j'ai essayé de changer la valeur d'une variable globale dans une fonction qui n'était pas censée le faire (maudit copier-coller). Il m'a fallu quelques jours pour trouver cette erreur. Depuis lors, j'utilise les variables globales dans les cas où je ne peux en principe pas m'en passer.

2. Je suis d'accord. Mais s'ils sont utilisés dans le cadre d'une fonction, cela ne me dérange pas. Mais les variables globales avec de tels noms sont vraiment une source de confusion future.

Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
  • www.mql5.com
Глобальные переменные терминала / GlobalVariableGet - Документация по MQL5
 

Je vais cependant répéter ma question.

Est-il possible de déterminer le déclenchement de OnInit à l'intérieur de OnTick ?
Par exemple, puis-je déclarer une variable statique dans OnTick qui stocke le nombre d'initialisations de l'EA (si cette propriété ou une propriété similaire est présente dans MQL5) ?

 
voix_kas:

Je dois être paranoïaque. Je n'aime pas les variables publiques (globales). Je le considère comme un muveton.

Lesvariables globales sont au moins visibles de loin. Mais cacher des variables cumulatives sérieuses à l'intérieur de fonctions en statique est une façon de se répartir soigneusement un râteau. C'est la première fois que je vois un tableau statique cumulatif caché dans une fonction de cette manière. C'est un râteau ardent.

Utilisez les classes - elles laisseront le niveau global propre, cacheront tous les boyaux et vous débarrasseront des béquilles.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
voix_kas:

Je vais cependant répéter ma question.

Est-il possible de déterminer le déclenchement de OnInit à l'intérieur de OnTick ?
Par exemple, pouvons-nous déclarer une variable statique à l'intérieur de OnTick qui stocke le numéro d'initialisation de l'Expert Advisor (s'il existe une telle variable ou une variable similaire dans MQL5) ?

Il est possible non seulement de compter le nombre de déclencheurs OnInit, mais aussi de déterminer pourquoi l'initialisation s'est produite (l'implémentation est une autre question).

Connaissez-vous _UninitReason, par exemple ?

 
Vous pouvez le lire dans OnInit, mais j'ai besoin de ces données dans un autre événement (sans utiliser de variables globales). Quelle que soit la façon dont on l'envisage, c'est une question de mise en œuvre. C'est la même chose avec OnDenit.
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
Des cours que je n'ai jamais écrits. Si quelqu'un peut m'aider, je lui en serai reconnaissant.
J'ai besoin d'écrire un cours sur les symboles de travail.
Méthodes :
chaîne de caractères GetSymbol[] ;
bool UpdateSymbols(inWorkSymbols) ;
bool UpdateSymbolsStatus() ;
int GetSymbolCount() ;

Je m'excuse si la demande est effrontée... J'essaierai de le découvrir moi aussi.
 
Renat:

Oui, il semble que ce soit une erreur de combiner le changement de symbole et la condition de délai.

Je suis également favorable à leur séparation en deux conditions. Le ticket a déjà été placé dans le bureau de service.

Merci !
 

Je l'ai en quelque sorte cuisiné. Toute critique est la bienvenue.

input string inWorkSymbols  = "USDCHF; GBPUSD; EURUSD; USDJPY; USDCAD; AUDUSD; EURGBP; EURAUD; EURCHF; EURJPY; GBPJPY; GBPCHF"; // Рабочие инструменты

class CSymbolList {
  private:
    string Symbols[];

  public:
    void   CSymbolList() { SetSymbols(""); }
    void  ~CSymbolList() { ArrayFree(Symbols); }
    int    GetSymbolCount() { return ArraySize(Symbols); }
    void   SetSymbols(string);
    string GetSymbolName(int);
};

void CSymbolList::SetSymbols(string Source) {
  ArrayFree(Symbols);
  for (int count = 1, i = 0; i < SymbolsTotal(false); i++)
    if (StringFind(Source, SymbolName(i, false)) != -1) {
      if (ArrayResize(Symbols, count) != count) {
        ArrayFree(Symbols);
        return;
      }
      Symbols[count-1] = SymbolName(i, false);
      count++;
    }
}

string CSymbolList::GetSymbolName(int Item) {
  if (Item < 0 || !ArraySize(Symbols) || Item >= ArraySize(Symbols)) return "";
  return Symbols[Item];
}

void OnStart() {
  CSymbolList slMain;
  slMain.SetSymbols(inWorkSymbols);
  for (int i = 0; i < slMain.GetSymbolCount(); i++)
    Print(slMain.GetSymbolName(i));
}
 

La seule chose que je n'aime pas ici est le redimensionnement "en direct" du tableau contenant les données de travail.
Question pour les développeurs, est-il garanti que les données utilisateur précédemment saisies dans le tableau dynamique en cours de modification seront préservées dans la condition suivante ?

if (ArrayResize(Symbols, count) == count)
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
voix_kas:

La seule chose que je n'aime pas ici est le redimensionnement "en direct" du tableau contenant les données de travail.
Une question pour les développeurs, est-il garanti que les données utilisateur précédemment saisies dans le tableau dynamique en cours de modification seront préservées dans la condition suivante ?

Je parie que c'est garanti. Au moins, je compte dessus tout le temps, et le problème ne s'est jamais posé.