Abnormal Termination for Closing specific Charts

 

Hallo zusammen,

Ich weiß nicht, was mit dieser Funktion passiert. Kann mir jemand helfen? Ich bekomme immer eine „abnormale Kündigung“ und es funktioniert nicht gut.

Die Funktion sollte alle Diagramme durchlaufen und wenn das Diagrammsymbol und der Zeitrahmen den angegebenen Parametern entsprechen, sollte sie das Diagramm schließen. Aber es scheint Schwierigkeiten zu geben oder so. Das Diagramm wird nicht geschlossen, selbst wenn es eines mit dem angegebenen Symbol und Zeitrahmen gibt.

Danke im Vorraus für deine Hilfe!

void Func_ChartClose(string Func_Symbol,ENUM_TIMEFRAMES Func_TimeFrame){
   for(long chartIdentNr=ChartFirst(); chartIdentNr != -1; chartIdentNr=ChartNext(chartIdentNr)){
      Print("First ChartIdentNr.: ",chartIdentNr);
      Print("Running: ",ChartSymbol(chartIdentNr),"   ",ChartPeriod(chartIdentNr));
      if(ChartSymbol(chartIdentNr) == Func_Symbol && ChartPeriod(chartIdentNr)==Func_TimeFrame){
        Print("Second ChartIdentNr.:",chartIdentNr);
        Print("Chart müsste geschlossen werden!",ChartSymbol(chartIdentNr),"  ",ChartPeriod(chartIdentNr));
        ChartClose(chartIdentNr);
      }
   }   
} 

Die Funktion wird auf Deinit aufgerufen: Das ist der Code, in dem sie aufgerufen wird:

void OnDeinit(const int reason){
   EventKillTimer();
   int NumberOfSymbols = ArraySize(SymbolArray);
   for(int i =0; i<NumberOfSymbols;i++){
      Func_ChartClose(SymbolArray[i],Inp_TimeFrame);
   }
}

Das Symbol-Array ist ein Array aus 27 Symbolen. Sie existieren alle, weil ich sie in der On-Init-Funktion öffne....
Trotzdem werden sie durch die obige Funktion nicht geschlossen.

Vom Moderator angewendete automatische Übersetzung

 
  1. Wir können hier deutsch sprechen :)
  2. OnDeinit wird nach 2,5 Sekunden beendet, egal, ob alles erledigt ist: https://www.mql5.com/en/docs/runtime/event_fire#deinit - es könnte zu lange dauern.
  3. Ich hab mir ein Skript geschrieben, dass alle Charts bis auf das des Skripts schließt, ich denke, das könntest Du leicht anpassen:
void OnStart()
  {
//---

   long ch01 = ChartID(),
        chid = ChartNext(ch01);
   while(chid >= 0){                            // Just do ALL charts, no counting needed.
      long nextID = ChartNext(chid);            // Get the next chart before closing current
      if(nextID != ch01 && chid!=ch01) { Print("Del: ",chid); ChartClose(chid); }
      chid = nextID;                            // process next chart.
   }
}

Documentation on MQL5: MQL5 programs / Client Terminal Events
Documentation on MQL5: MQL5 programs / Client Terminal Events
  • www.mql5.com
Client Terminal Events - MQL5 programs - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 

Hallo Carl,

ich danke dir für die Hilfe. Ich denke dann war die 2,5 Sekundengrenze mein Problem. Ich wusste nicht, dass DeInit eine zeitliche Begrenzung hat... wieder was gelernt.

Vielen Dank auch für dein Script. Ich denke ich werde es gut nutzen können.

Viele Grüße und einen schönen Abend dir noch!