échec de l'initialisation globale !!!!!!!

 

Si quelqu'un peut m'aider...J'exécute un conseiller expert pour 4 paires de graphiques, et pour l'exécuter pour la 5ème, après un chargement réussi, j'ai un échec d'initialisation globale, puis une suppression...

J'apprécierais au moins une indication sur ce qu'il faut rechercher...

Merci...

 
HELLAS:

Si quelqu'un peut m'aider...J'exécute un conseiller expert pour 4 paires de graphiques, et pour l'exécuter pour la 5ème, après un chargement réussi, j'ai un échec d'initialisation globale, puis une suppression...

J'apprécierais au moins une indication sur ce qu'il faut rechercher...

Merci...

Il semble que vous ayez un problème lors de l'initialisation. Vérifiez votre code. Vous pouvez poster le code concerné si vous avez besoin d'aide.
 
angevoyageur:
Il semble que vous ayez un problème pendant l'initialisation. Vérifiez votre code. Vous pouvez poster le code en question si vous avez besoin d'aide.


Merci de m'avoir répondu.

Le problème est que mon code fonctionne bien pour 4 graphiques (paires), mais lorsque j'essaie de l'exécuter pour un autre, ceci se produit.

Et le code est un peu énorme, donc je ne sais pas si cela va vous aider...

 
Ce n'est peut-être pas le code. Mon terminal a planté lorsque je faisais glisser les fenêtres du terminal, il s'est partiellement rétabli mais a indiqué que l'initialisation globale avait échoué. J'ai dû redémarrer le terminal. Je n'ai jamais vu cette erreur avant la version 625 et il y a eu plus d'un rapport à ce sujet au cours de la semaine dernière.
 
SDC:
Ce n'est peut-être pas le code. Mon terminal a planté lorsque je faisais glisser les fenêtres du terminal, il s'est partiellement rétabli mais a indiqué que l'initialisation globale avait échoué. J'ai dû redémarrer le terminal. Je n'ai jamais vu cette erreur avant la version 625 et il y a eu plus d'un rapport à ce sujet au cours de la semaine dernière.
Quand vous avez redémarré le terminal, tout allait bien ? Parce que j'ai redémarré plusieurs fois, mais j'ai eu les mêmes résultats. Le fait est que je ne trouve aucune documentation spécifique qui donne une aide sur le sujet...
 
Oui, tout allait bien quand je l'ai redémarré.
 

Je sais que ce sujet date d'un mois, mais je pense que c'est un problème de MetaTrader plutôt qu'un problème de code. Cela m'est arrivé de manière aléatoire sur un indicateur sur lequel je travaille. Parfois, cela se produit si je regarde ou modifie les propriétés de l'indicateur, parfois cela se produit si je ferme et redémarre le terminal et parfois cela se produit juste spontanément. Il s'agit bien d'un problème d'initialisation. La raison pour laquelle je suis sûr de cela est que j'ai un ensemble de boutons que je crée pour visualiser les MAs sur des cadres temporels différents de celui sur lequel vous êtes actuellement. Dans tous les cas, lorsque cela échoue, les boutons TF sont toujours sur le graphique mais l'indicateur a été supprimé. Naturellement, les boutons ne font plus rien. Pour remettre les choses en ordre, je dois supprimer les boutons manuellement et remettre l'indicateur sur le graphique. Cela fonctionne bien pendant un certain temps et puis BOOM ! Il est à nouveau mort. Il n'y a ni rime ni raison. Je ne pense pas que le problème vienne de notre code. Je pense que c'est quelque chose qui a foiré avec MT4. J'exécute la version 625, soit dit en passant. Si je trouve un moyen de contourner le problème, je le posterai.

Prof.

 
Montrez-nous le code. Juste pour être sûr que votre code n'est pas le coupable. Sinon, MetaQuotes se moquera de vous.
 

J'ai également eu ce "échec de l'initialisation globale".

Cela s'est produit lorsque j'ai changé la trame temporelle du graphique.

Je n'en vois pas la raison et je n'ai pas réussi à le reproduire.

La chose étrange est que les 2 derniers blocs de code dans init créent des objets et ceux-ci ont été créés sur le graphique.

Comme deinit n'a pas été appelé, ils n'ont pas été supprimés.

int OnInit()
  {
//--- indicator buffers mapping
      IndicatorBuffers(4);

      //---- drawing settings
      SetIndexArrow(0,250);
      SetIndexArrow(1,250);

      SetIndexStyle(0,DRAW_NONE);
      SetIndexDrawBegin(0,i-1);
      SetIndexBuffer(0,CTFresistancetBuffer);
      SetIndexLabel(0,"Resistance");

      SetIndexStyle(1,DRAW_NONE);
      SetIndexDrawBegin(1,i-1);
      SetIndexBuffer(1,CTFsupportBuffer);
      SetIndexLabel(1,"Support");

      SetIndexBuffer(2,HTFresistancetBuffer,INDICATOR_CALCULATIONS);
      SetIndexBuffer(3,HTFsupportBuffer,INDICATOR_CALCULATIONS);

      switch(S_R_TimeFrame)
        {
         case M5:
            SRPeriod=PERIOD_M5;
            break;
         case M15:
            SRPeriod=PERIOD_M15;
            break;
         case M30:
            SRPeriod=PERIOD_M30;
            break;
         case H1:
            SRPeriod=PERIOD_H1;
            break;
         case H4:
            SRPeriod=PERIOD_H4;
            break;
         case Daily:
            SRPeriod=PERIOD_D1;
            break;
         case Weekly:
            SRPeriod=PERIOD_W1;
            break;
         case Monthly:
            SRPeriod=PERIOD_MN1;
            break;
         case Current_Chart:
            SRPeriod=PERIOD_CURRENT;
            break;
        }
        
      if(Digits==3 || Digits==5)
         NewPip=Point*10;
      else
         NewPip=Point;
      
      string obj_name = "TDR_ARROW" ;
      ObjectCreate(obj_name, OBJ_LABEL, 0, 0, 0);
      ObjectSet(obj_name, OBJPROP_CORNER, 1);
      ObjectSet(obj_name, OBJPROP_XDISTANCE,  30);
      ObjectSet(obj_name, OBJPROP_YDISTANCE,  30);
      ObjectSetText(obj_name, CharToStr(243), 30, "Wingdings", clrBlue);
      
      obj_name = "TDR_LINE" ;
      ObjectCreate(obj_name, OBJ_TREND, 0, 0, 0);
      ObjectSetInteger(0,obj_name,OBJPROP_WIDTH,LineWidth+1);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                         |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

   for(i=ObjectsTotal()-1;i>=0;i--)
     {
      string ObName=ObjectName(i);
      if(StringFind(ObName,"TDR",0)!=-1)
         ObjectDelete(ObName);
     }

   return;
  }
//+------------------------------------------------------------------+
 

Mon problème semble avoir été d'utiliser init() et deinit() au lieu des nouveaux OnInit() et OnDeinit(). Les choses semblent fonctionner depuis que j'ai adopté les nouveaux appels. MetaQuotes n'a pas intérêt à se moquer de moi. Je crois me souvenir avoir lu quelque part dans la volumineuse liste des changements que les anciens appels étaient toujours compatibles avec MQL4. En fait, j'ai un autre indicateur qui les utilise toujours et crée un certain nombre d'objets étiquettes sans problème. Je vais probablement changer cela juste pour être sûr, car je prévois de proposer les deux indicateurs à la vente lorsque je serai prêt.

Quoi qu'il en soit, le problème semble être que deinit() n'a pas été appelé lorsque l'indicateur s'est désinitialisé et que les objets n'ont pas été supprimés comme ils auraient dû l'être. L'initialisation a échoué parce que les objets existaient toujours. Je vérifiais les erreurs sur tout mais l'échec de la création d'objet n'était pas signalé. Apparemment, il a explosé et m'a donné l'erreur MQL avant même de toucher mon code de gestion des erreurs.

GumRai, vous pouvez essayer d'utiliser SubStr au lieu de StringFind. Cela ne devrait pas avoir d'importance mais j'ai trouvé que MQL peut être bizarre parfois. Etes-vous sûr que OnDeinit() n'a pas été appelé ? La chose qui m'a mis sur la piste de mon problème a été de mettre une déclaration d'alerte dans ma méthode deinit() et de remarquer qu'elle n'a jamais été appelée. Vous pouvez également essayer d'envelopper votre code de suppression avec un code de gestion des erreurs pour voir ce qu'il peut faire.

Prof.

 
ProfessorMetal:

Mon problème semble avoir été d'utiliser init() et deinit() au lieu des nouveaux OnInit() et OnDeinit(). Les choses semblent fonctionner depuis que j'ai adopté les nouveaux appels. MetaQuotes n'a pas intérêt à se moquer de moi. Je crois me souvenir avoir lu quelque part dans la volumineuse liste des changements que les anciens appels étaient toujours compatibles avec MQL4. En fait, j'ai un autre indicateur qui les utilise toujours et crée un certain nombre d'objets étiquettes sans problème. Je vais probablement changer cela juste pour être sûr, car je prévois de proposer les deux indicateurs à la vente lorsque je serai prêt.

Quoi qu'il en soit, le problème semble être que deinit() n'a pas été appelé lorsque l'indicateur s'est désinitialisé et que les objets n'ont pas été supprimés comme ils auraient dû l'être. L'initialisation a échoué parce que les objets existaient toujours. Je vérifiais les erreurs sur tout mais l'échec de la création d'objet n'était pas signalé. Apparemment, il a explosé et m'a donné l'erreur MQL avant même de toucher mon code de gestion des erreurs.

GumRai, vous pouvez essayer d'utiliser SubStr au lieu de StringFind. Cela ne devrait pas avoir d'importance mais j'ai trouvé que MQL peut être bizarre parfois. Etes-vous sûr que OnDeinit() n'a pas été appelé ? La chose qui m'a mis sur la piste de mon problème a été de mettre une déclaration d'alerte dans ma méthode deinit() et de remarquer qu'elle n'a jamais été appelée. Vous pouvez également essayer d'envelopper votre code de suppression avec un code de gestion des erreurs pour voir ce qu'il peut faire.

Prof.

Pouvez-vous fournir un exemple de code permettant de reproduire votre problème ?