Terminal "no response"

 
Ich sehe oft das der Metatrader Probleme macht und dann nur noch "no response" oben steht und man kann ihn nur noch ausschalten und neu starten, das ist etwas laestig, ich frage mich ob man irgendwie einige Sachen im EA Code optimieren koennte damit sowas fast nie vorkommt, Problem ist halt auch das keine genaue Fehlermeldung kommt woran es jetzt lag so kann ich nur rumraten, ob irgendwie zu viele Webrequest der grund waren oder sonst was anderes, hat jemand gute Tipps wie man da vorgeht?
 

Etwa mehr Info wäre schon ganz schön!

MT4 oder MT5, Desktop oder Mobil, PC oder VPS?

Screenshot?

 
Carl Schreiber #:

Etwa mehr Info wäre schon ganz schön!

MT4 oder MT5, Desktop oder Mobil, PC oder VPS?

Screenshot?

Ich habe ein Bild hochgeladen wo man genauer sehen kann welches problem ich meine. Wenn oben dann steht "reagiert nicht" dann bleibt oft die einzige Moeglichkeit den Metatarder zwagsweise zu schliesen, das ist halt nicht so eine schoene Loesung, ich wuerde viel lieber irgendwie vermeiden das es zu dem Fehler erst kommt. Im Journa steht dann auch nur "shutdown by timeout" aber man weis so auchnciht genau woran hat es gelegen, ich kann nur vermuten das vielleicht Webrequest das problem verursachen, wenn zu viele Webrequest gesendet wurden und der server noch keine antwort gibt. Es gibt halt keine genauen Infos vom Metatrader aus welche Funktionen genau den Fehler produzieren.

Dateien:
noresponse.png  10 kb
 

Das liegt dann wohl an Indikator(en) oder EA(s), die alles blockieren, vielleicht durch eine Socketverbindung?

Was sagt der TaskManager?

 
Carl Schreiber #:

Das liegt dann wohl an Indikator(en) oder EA(s), die alles blockieren, vielleicht durch eine Socketverbindung?

Was sagt der TaskManager?

Ja ich kann es auch nur vermuten, den ich habe einige Webrequest Funktionen in Gebrauch und der Metatrader selbst sagt jetzt nicht genau woran es liegt, es waere natuerlich hilfreich wenn der im Journal schreiben wuerde wegen dieser oder jener Funktion gibt es jetzt ein stackoverflow oder shutdown by timeout, aber er sagt es ja nicht genau warum. Glaubst du im Taskmanager wird sowas stehen? Das waere natuerlich Hilfreich fuer die Fehlersuche aber ich habe bisher nicht im Taskmanager geschaut. Es waere halt ganz schoen wenn man solche Shutdown by timeout oder stackoverflow errors vermeiden koennte, jedoch muss man jetzt irgendwie vermuten wodran es liegt, weil es so direkt keine genauen Infos vom Metatrader dazu gibt. ich hatte jetzt die Idee ob man vielleicht irgendetwas einbaut eine Art globale variable welche bei jedem Webrequest auf eine rueckantwort wartet und das man den anderen Webrequest im EA erst eine Freigabe gibt wenn die vorherige schon abgeschlossen ist, aber kann sein das die Webrequest sowieso schon auf diese Weise ablaufen, also nacheinander abgearbeitet werden und nicht asynchron. Und wenn man jetzt auch auf mehreren Charts so ein EA hat der Webrequest macht, weis ich jetzt auch nicht wie man da diese shutdown by timeout und stackoverflow fehler am besten vermeidet. Ich schaetze also auch schon irgendwie das es am meisten an den Webrequest liegen muss, ist aber auch nur meine vermutung.

 

Also: Warte bis es wieder passiert und schau in den Task-Manager.

Wenn das Terminal nicht mehr reagiert, liegt das mit an Sicherheit grenzender Wahrscheinlichkeit an dem Programm(en), die dort laufen - nicht am Terminal selbst.
Die sind wohl schlecht programmiert, also schau, dass Du die weg bekommst.
 
Ich vermute ja wie gesagt das der EA mit seinen Webrequest die Probleme macht, wird den der Task Manager mir sowas in der Art zeigen koennen, welche Funktion im EA das problem verursacht? Das waere natuerlich sehr hilfreich, weil der Metatrader selbst nicht genau sagt welche Funktionen ein Problem verursachen. Aber wenn der Task Manager es auch nicht genau zeigt, wird es ja nicht viel nutzen denke ich im task Manager zu kucken. Hast du vielleicht Erfahrung damit wie man die Webrequest im Metatarder am besten behandelt, falls man mehrere Webrequest nutzt?
 

Ich habe keine Ahnung, mir ist das nicht passiert.

Könnte aber auch an MQL_HANDLES_USED liegen (aus der Referenz):

MQLInfoInteger(): Die aktuelle Anzahl der aktiven Objekt-Handles. Dazu gehören sowohl dynamische (erstellt über new) als auch nicht-dynamische Objekte, globale/lokale Variablen oder Klassenmitglieder. Je mehr Handles ein Programm verwendet, desto mehr Ressourcen verbraucht es.

Aber ich kennen den Code nicht, also kann ich nicht mehr dazu sagen.

 
Carl Schreiber #:

Ich habe keine Ahnung, mir ist das nicht passiert.

Könnte aber auch an MQL_HANDLES_USED liegen (aus der Referenz):

Aber ich kennen den Code nicht, also kann ich nicht mehr dazu sagen.

Es wuerde ja nicht viel bringen wenn ich mein ganzen EA Code hier poste und du dich durch den ganzen Code durchlest, aber ich kann es in ein paar Worten beschreiben, von oben nach unten betrachtet habe ich im EA circa 3 Webrequest Aufrufe, einige davon arbeiten jede Sekunde und andere nur ab und zu und auf circa  10 charts laeuft so ein EA, das bedeutet also wir haben die ganze Zeit eine Kommunikation ueber Webrequest mit einem Server von daher kann ich nur vermuten das es damit was zu tun haben muss, die Frage ist aber natuerlich jetzt koennte man da irgendwie etwas optimieren damit es nicht zu diesen shutdown by timeout error kommt. Also welche Moeglichkeiten der Optimierung stehen zur verfuegung, wuerde es etwas bringen wenn man im EA nur ein Webrequest gleichzeittig erlaubt bzw funktioniert die Webrequest Funktion nicht bereits auf diese Weise das alle Requests nacheinander abgearbeitet werden. Wenn du Erfahrung hast mit solchen sachen wuerde mich freuen von dir was zu lernen.

 

Lernen?

Wenn ein Programm nicht funktioniert (aber compiliert) dann wäre die erste Wahl der Debugger und dann jede Schritt entweder protokollieren, zB. mit __LINE__, damit man genau weiß, was als letztes noch ging.

Oder man schreibt es mit Comment() auf den Chart.

Dazu dies:

    https://www.metatrader5.com/de/metaeditor/help/development/debug
    Zur Fehlerbehebung von MQL5-Programmen (Debugging) : https://www.mql5.com/de/articles/654
    Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators, Siehe Ende: Starten und Debuggen     https://www.mql5.com/de/articles/35
    Die Fehlerverarbeitung und Protokollierung in MQL5:     https://www.mql5.com/de/articles/2041
    https://www.mql5.com/de/articles/272
    Fehler finden und Protokollierung     https://www.mql5.com/de/articles/150

Außerdem schienst Du nicht etwaige Fehler von WebRequest auszuwerfen, vielleicht ist denen Deine Frequenz zu hoch?

Code-Debugging - Programme entwickeln - MetaEditor Hilfe
  • www.metatrader5.com
MetaEditor hat einen eingebauten Debugger, mit dem Sie die Programmausführung Schritt für Schritt (durch einzelne Funktionen) ü...
 
Carl Schreiber #:

Lernen?

Wenn ein Programm nicht funktioniert (aber compiliert) dann wäre die erste Wahl der Debugger und dann jede Schritt entweder protokollieren, zB. mit __LINE__, damit man genau weiß, was als letztes noch ging.

Oder man schreibt es mit Comment() auf den Chart.

Dazu dies:

    https://www.metatrader5.com/de/metaeditor/help/development/debug
    Zur Fehlerbehebung von MQL5-Programmen (Debugging) : https://www.mql5.com/de/articles/654
    Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators, Siehe Ende: Starten und Debuggen     https://www.mql5.com/de/articles/35
    Die Fehlerverarbeitung und Protokollierung in MQL5:     https://www.mql5.com/de/articles/2041
    https://www.mql5.com/de/articles/272
    Fehler finden und Protokollierung     https://www.mql5.com/de/articles/150

Außerdem schienst Du nicht etwaige Fehler von WebRequest auszuwerfen, vielleicht ist denen Deine Frequenz zu hoch?

Also ich dachte vielleicht gibt es da einige gute Vorgehensweisen bzw forgeschrittene Techniken wie man die Webrequest Funktion in Metatrader am besten einsetzt. Die Funktion gibt ja normalerweise auch eine Fehlermeldung zurueck wenn etwas nicht geklappt hat, aber dieser Fehler wenn der Metatrader shutdown by timeout erzeugt bei dem Fehler bekomme ich bisher keine genaueren infos woran es lag, aber ich finde du hast schon einige gute Tipps gegeben, wenn ich das naechste mal den EA optimiere probiere ich mal mit etwas mehr Debug Techniken ob ich damit weiter komme und genauere infos zu den Fehler finde. Im Prinzip laeuft alles soweit, aber wenn ich manchmal den PC auf standby habe oder Internetverbindung trenne und dann wieder alles connecte kommt es schon hin und wieder zu diesen overflow, ich schaetze es liegt wohl daran das die ganze Zeit Webrequest gesendet werden und keine Antwort vom Server kam oder sowas in der Art.