Erreurs, bugs, questions - page 591

 
alexvd:

Allons à Servicedesk.

Veuillez préciser comment les services ont été déconnectés exactement ? Avez-vous supprimé (gelé) les services ? Veuillez joindre les journaux des agents à l'origine du problème.

Les paramètres du proxy dans vos journaux sont quelque peu étranges. Avez-vous écrit les paramètres du proxy dans la configuration de votre agent ? Veuillez joindre le fichier common.ini de votre gestionnaire.

Il s'avère que j'ai regardé les registres d'hier...

Tout va bien.

 
TheXpert:

Code suivant :

Sorties :

2011.12.05 22:01:28 RectLabel (EURUSD,H1) pos = {12, 176314750}
2011.12.05 22:01:28 RectLabel (EURUSD,H1) other = {123, 456}

Donc, la liste d'initialisation n'a pas fonctionné, il y a des déchets dans la structure. Est-ce un bug ou non ?

Il s'agit d'un bug du compilateur - il n'a pas généré d'erreur indiquant que la structure ne peut pas être initialisée de cette façon (sans constructeur de copie). Fixe. Merci pour cet article.
 
Je ne comprends pas la désinitialisation. Pourquoi le message "Expert Advisor unloaded from pair ..." apparaît-il deux fois ?
//+------------------------------------------------------------------+
//|                                                   testDeinit.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"



//+------------------------------------------------------------------+
class CTest_Expert
  {

public:
                     CTest_Expert();
                    ~CTest_Expert() { Deinit(); }
                   
   void              Processing();
   void              Deinit();
   bool              StartTimer(int nCounSeconds);
   void              StopTimer();
   string   Exp_Symbol;
  };

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Конструктор                                                      |
//+------------------------------------------------------------------+
CTest_Expert::CTest_Expert()
  {

  }
//+------------------------------------------------------------------+
//| Функция удаления динамических объектов                           |
//+------------------------------------------------------------------+
void CTest_Expert::Deinit()
  {
  
   Print("Эксперт выгружен с пары "+Exp_Symbol);
   Comment("");

  }
//+------------------------------------------------------------------+
//|Инициализация таймера                                             |
//+------------------------------------------------------------------+
bool CTest_Expert::StartTimer(int nCountSeconds)
  {
   return(EventSetTimer(nCountSeconds));
  }
//+------------------------------------------------------------------+
//|Уничтожение таймера                                               |
//+------------------------------------------------------------------+

void CTest_Expert::StopTimer()
  {
      EventKillTimer();
  }

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArrayResize(arSymbols, 5);
   arSymbols[0].Exp_Symbol="0";
   arSymbols[1].Exp_Symbol="1";
   arSymbols[2].Exp_Symbol="2";
   arSymbols[3].Exp_Symbol="3";
   arSymbols[4].Exp_Symbol="4";
  
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
  }
//+------------------------------------------------------------------+

Résultat

2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14:00:00
2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14:02:00 PM testDeinit (EURUSD,M5) E.T.A. a été déchargé de la paire 3
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Téléchargé de la paire 2
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Téléchargé de la paire 1
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Ekspert déchargé de la paire 0
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14
2011.12.06 16:59:52 testDeinit (EURUSD,M5) -------4--------
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) L'expert est déchargé de la paire 3
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------3--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) L'expert a été déchargé de la paire 2.
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------2--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) L'expert est déchargé de la paire 1
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------1--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) L'expert est déchargé de la paire 0
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------0--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) nSize = 5

 
Konstantin83:
Je ne comprends pas la désinitialisation. Pourquoi le message "Expert unloaded from pair ..." apparaît-il deux fois ?
                    ~CTest_Expert() { Deinit(); }

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }

Premier appel de OnDeinit. Deuxième appel du destructeur
 
mql5:
Il s'agit d'un bug dans le compilateur - il n'a pas généré d'erreur disant qu'une structure ne peut pas être initialisée de cette façon (sans constructeur de copie). Fixe. Merci pour cet article.

Euh, non. Plus de détails ici.

Dans l'aide, il est dit que les structures simples peuvent être copiées en tant que variables de types simples :

{
   Pos pos = {100, 100};
   Pos pos1 = pos; // копи конструктор
   pos = pos1; // копи оператор
}

Alors pourquoi ne peut-on pas le faire dans la liste d'initialisation ? Je ne veux pas définir explicitement les constructeurs, afin de ne pas perdre la méthode d'initialisation utilisée ci-dessus.

Je ne critique pas le principe, je veux juste entendre le commentaire final.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

Je lance le terminal avec 12 fenêtres ouvertes, il consomme 325 Mo de RAM.

En exécutant le conseiller expert multidevises, le terminal consomme 990 Mo de mémoire. Le conseiller expert affiche les barres de 5 minutes pour les dernières 48 heures et utilise l'indicateur "fractal". Si je n'exécute que des transactions sur un seul symbole, cela prend 400 Mo. Cette consommation de mémoire est-elle normale lorsque l'on travaille avec 12 symboles ?

 
Konstantin83:
J'utilise un Expert Advisor multi-devises, le terminal consomme 990 Mb de RAM. L'expert examine les barres de 5 minutes des dernières 48 heures et utilise l'indicateur "fractal". Si je n'exécute que des transactions sur un seul symbole, cela prend 400 Mo. Cette consommation de mémoire est-elle normale lorsque l'on travaille avec 12 symboles ?
Voir l'article Principes du recalcul économique des indicateurs
 
J'ai oublié de préciser que la fractale est un indicateur standard + tous les calculs ont lieu toutes les cinq minutes.
 
Konstantin83:
J'ai oublié de mentionner que la fractale est un indicateur standard + tous les calculs ont lieu toutes les cinq minutes.

Comment les développeurs savent-ils ce que vous faites et comment vous le faites ?
Essayez de formuler et d'expliquer clairement l'origine du problème dans votre code.
Décrivez le problème de manière technique.

 
sergeev:

Comment les développeurs peuvent-ils savoir ce que vous faites et comment vous le faites ?
Essayez de formuler clairement et de mettre en évidence l'essence du problème dans votre code. A quelles conditions la consommation commence à augmenter, faites et montrez l'impression du journal.
Décrivez le problème de manière technique.

Je n'avais pas fait attention à la taille de la mémoire auparavant, car elle ne devait pas être très importante. Hier et aujourd'hui, j'ai remarqué que le système était lent, j'ai ouvert le gestionnaire des tâches et j'ai vu que le terminal consommait 900 Mo. J'ai commencé à chercher. Au démarrage, 12 fenêtres ouvertes - 325 Mo, je l'ai mis sur la fenêtre d'Expert Advisor - 990 Mo, je pensais donc qu'il consommait Expert Advisor. J'ai réglé "Charts - max bars per window" sur unlimited. Après l'avoir changé à 50 000 , j'ai lancé le terminal et il pèse 110, puis je l'ai changé à nouveau en illimité. Maintenant, mon Conseiller Expert est de 208 MB, c'est-à-dire qu'il est OK.
Raison: