globale Initialisierung fehlgeschlagen!!!!!!!

 

Wenn jemand helfen könnte... Ich führe einen Expert Advisor für 4 Chart-Paare, und für die Ausführung es für die 5., nach dem Laden erfolgreich, ich habe globale Initialisierung fehlgeschlagen, und dann entfernt...

Ich würde zumindest eine Anleitung schätzen, was zu suchen...

Danke...

 
HELLAS:

Wenn jemand helfen könnte... Ich führe einen Expert Advisor für 4 Chart-Paare, und für die Ausführung es für die 5., nach dem Laden erfolgreich, ich habe globale Initialisierung fehlgeschlagen, und dann entfernt...

Ich würde zumindest eine Anleitung zu schätzen wissen, was zu suchen...

Danke...

Es scheint, dass Sie ein Problem bei der Initialisierung haben. Überprüfen Sie Ihren Code. Sie können den entsprechenden Code posten, wenn Sie Hilfe benötigen.
 
angevoyageur:
Es scheint, dass Sie ein Problem bei der Initialisierung haben. Überprüfen Sie Ihren Code. Sie können den entsprechenden Code posten, wenn Sie Hilfe benötigen.


Danke für die Antwort...

Die Sache ist, dass mein Code funktioniert gut für 4 Charts (Paare), aber wenn ich versuche, es für eine weitere ausführen dies geschieht.

Und der Code ist ziemlich groß, also weiß ich nicht, ob er Ihnen helfen wird.

 
Vielleicht liegt es nicht am Code. Mein Terminal stürzte ab, als ich Terminalfenster hin- und herschob, es erholte sich teilweise, aber die globale Initialisierung schlug fehl. Ich mußte das Terminal neu starten. Ich habe diesen Fehler vor Build 625 noch nie gesehen und es gab mehr als einen Bericht darüber in der letzten Woche oder so.
 
SDC:
Vielleicht liegt es nicht am Code. Mein Terminal stürzte ab, als ich Terminalfenster hin- und herschob, es erholte sich teilweise, aber die globale Initialisierung schlug fehl. Ich mußte das Terminal neu starten. Ich habe diesen Fehler vor Build 625 noch nie gesehen und es gab mehr als einen Bericht darüber in der letzten Woche oder so.
Als du das Terminal neu gestartet hast, war alles gut? Denn ich habe einige Male neu gestartet, aber ich hatte die gleichen Ergebnisse. Tatsache ist, dass ich keine spezifische Dokumentation finden kann, die Hilfe zu diesem Thema bietet...
 
Ja, es war alles gut, als ich es neu gestartet habe.
 

Leute, ich weiß, dass dieser Thread schon einen Monat alt ist, aber ich denke, dass es sich eher um ein MetaTrader-Problem als um ein Code-Problem handelt. Bei einem Indikator, an dem ich gerade arbeite, passiert mir das in unregelmäßigen Abständen. Manchmal passiert es, wenn ich die Eigenschaften des Indikators ansehe oder ändere, manchmal passiert es, wenn ich das Terminal herunterfahre und neu starte und manchmal passiert es einfach spontan. Es handelt sich definitiv um eine Art Initialisierungsproblem. Der Grund, warum ich mir dessen sicher bin, ist, dass ich eine Reihe von Schaltflächen habe, die ich für die Anzeige von MAs auf anderen Zeitrahmen als demjenigen, auf dem Sie sich gerade befinden, erstellt habe. In allen Fällen, in denen das Problem auftritt, sind die TF-Schaltflächen noch im Diagramm zu sehen, aber der Indikator wurde entfernt. Natürlich bewirken die Schaltflächen nichts mehr. Um die Dinge wieder in den Griff zu bekommen, muss ich die Schaltflächen manuell löschen und den Indikator wieder in das Diagramm einfügen. Das funktioniert eine Zeit lang gut, und dann BOOM! Er ist wieder tot. Es gibt keinen Grund, warum das so ist. Ich glaube nicht, dass das Problem in unserem Code liegt. Ich glaube, es ist etwas mit MT4 schief gelaufen. Ich benutze übrigens v625. Wenn mir etwas einfällt, um das Problem zu umgehen, werde ich es posten.

Prof.

 
Zeigen Sie uns den Code. Nur um sicherzustellen, dass Ihr Code nicht der Übeltäter ist. Andernfalls wird MetaQuotes Sie auslachen.
 

Ich hatte auch diese "globale Initialisierung fehlgeschlagen".

Es passierte, als ich den Zeitrahmen des Diagramms änderte.

Ich kann keinen Grund dafür erkennen und war nicht in der Lage, es zu reproduzieren.

Das Seltsame ist, dass die letzten 2 Codeblöcke in init Objekte erstellen und diese im Diagramm erstellt wurden.

Da deinit nicht aufgerufen wurde, wurden sie auch nicht gelöscht.

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;
  }
//+------------------------------------------------------------------+
 

Mein Problem scheint die Verwendung von init() und deinit() anstelle der neuen OnInit() und OnDeinit() gewesen zu sein. Nachdem ich zu den neuen Aufrufen gewechselt habe, scheint alles zu funktionieren. MetaQuotes sollte mich besser nicht auslachen. Ich meine mich zu erinnern, irgendwo in der umfangreichen Liste der Änderungen gelesen zu haben, dass die alten Aufrufe noch mit MQL4 kompatibel waren. In der Tat habe ich einen anderen Indikator, der diese Aufrufe immer noch verwendet und eine Reihe von Etikettenobjekten ohne Probleme erstellt. Ich werde das wahrscheinlich ändern, nur um auf der sicheren Seite zu sein, da ich plane, beide Indikatoren zum Verkauf anzubieten, wenn ich soweit bin.

Wie auch immer, das Problem scheint darin zu liegen, dass deinit() nicht aufgerufen wurde, als der Indikator de-initialisiert wurde, so dass die Objekte nicht so gelöscht wurden, wie sie hätten gelöscht werden müssen. Die Initialisierung schlug fehl, weil die Objekte noch vorhanden waren. Ich habe alles auf Fehler überprüft, aber der Fehler bei der Objekterstellung wurde nicht gemeldet. Offensichtlich ist er aufgeflogen und hat mir den MQL-Fehler gegeben, bevor er überhaupt meinen Fehlerbehandlungscode getroffen hat.

GumRai, Sie könnten versuchen, SubStr anstelle von StringFind zu verwenden. Es sollte keine Rolle spielen, aber ich habe festgestellt, dass MQL manchmal etwas nervös sein kann. Sind Sie sicher, dass OnDeinit() nicht aufgerufen wurde? Was mich auf das Problem aufmerksam gemacht hat, war, dass ich eine Alert-Anweisung in meine deinit()-Methode einfügte und feststellte, dass sie nie aufgerufen wurde. Sie könnten auch versuchen, Ihren Löschcode mit Fehlerbehandlungscode zu umhüllen, um zu sehen, was er tun könnte.

Prof.

 
ProfessorMetal:

Mein Problem scheint die Verwendung von init() und deinit() anstelle der neuen OnInit() und OnDeinit() gewesen zu sein. Nachdem ich zu den neuen Aufrufen gewechselt habe, scheint alles zu funktionieren. MetaQuotes sollte mich besser nicht auslachen. Ich meine mich zu erinnern, irgendwo in der umfangreichen Liste der Änderungen gelesen zu haben, dass die alten Aufrufe noch mit MQL4 kompatibel waren. In der Tat habe ich einen anderen Indikator, der diese Aufrufe immer noch verwendet und eine Reihe von Etikettenobjekten ohne Probleme erstellt. Ich werde das wahrscheinlich ändern, nur um auf der sicheren Seite zu sein, da ich plane, beide Indikatoren zum Verkauf anzubieten, wenn ich soweit bin.

Wie auch immer, das Problem scheint darin zu liegen, dass deinit() nicht aufgerufen wurde, als der Indikator de-initialisiert wurde, so dass die Objekte nicht so gelöscht wurden, wie sie hätten gelöscht werden müssen. Die Initialisierung schlug fehl, weil die Objekte noch vorhanden waren. Ich habe alles auf Fehler überprüft, aber der Fehler bei der Objekterstellung wurde nicht gemeldet. Offensichtlich ist er aufgeflogen und hat mir den MQL-Fehler gegeben, bevor er überhaupt meinen Fehlerbehandlungscode getroffen hat.

GumRai, Sie könnten versuchen, SubStr anstelle von StringFind zu verwenden. Es sollte keine Rolle spielen, aber ich habe festgestellt, dass MQL manchmal etwas nervös sein kann. Sind Sie sicher, dass OnDeinit() nicht aufgerufen wurde? Das, was mich auf mein Problem aufmerksam gemacht hat, war, eine Alert-Anweisung in meine deinit()-Methode zu setzen und zu bemerken, dass sie nie aufgerufen wurde. Sie könnten auch versuchen, Ihren Löschcode mit Fehlerbehandlungscode zu umhüllen, um zu sehen, was er tun könnte.

Prof.

Können Sie einen Beispielcode posten, um Ihr Problem zu reproduzieren?