IsConnected() - Seite 3

 

Sorry, aber warum sollte das nicht funktionieren:

int start()

{

    while ( !IsStopped() )
    {
        IsConnectedBefore = IsConnectedNow;
        IsConnectedNow = IsConnected();
      ....

     }

}   

Also mein EA ist immer in der while-Schleife und braucht keinen Tick.

 

Die ganze Sache um PostMessageA() wurde nur als Reaktion auf den Satz "call start() from init()" weiter oben in diesem Thread gepostet. Ich konnte das nicht unkommentiert stehen lassen, denn "call start() from init()" ist auf so vielen Ebenen schlichtweg falsch und deshalb musste ich das kommentieren und auch eine richtige Lösung anbieten, um das Gleiche zu erreichen, nämlich den Aufruf von start() aus init() heraus zu erzwingen, auch an Wochenenden.


Für das Problem des Starts von MT4 in einem nicht angeschlossenen Zustand bietet es keine Lösung. Obwohl ich auch nicht verstehe, was der Anwendungsfall dafür sein könnte, da es die Verbindung ist, die kommt und geht, während Metatrader selbst leicht 24/7 ohne Unterbrechung laufen sollte. Und selbst wenn er am Wochenende neu gestartet wird, wird er mit PostMessageA() in init() die Schleife in start() sofort wieder aufnehmen, sobald die Verbindung nach dem Neustart wieder da ist, auch ohne Tick, und dann wird er wieder ewig weiterlaufen bis zum nächsten (versehentlichen) Neustart.

 
sunshineh:

Sorry, aber warum sollte das nicht funktionieren:

Also mein EA ist immer in der while-Schleife und braucht keinen Tick.


yep, Weil Sie das Terminal nicht neu gestartet haben, während Sie keine Verbindung zum Internet haben, aber wenn Sie das Terminal neu starten, während Sie keine Internetverbindung haben, kommt der EA nicht in die Schleife ohne einen Tick, egal was Sie tun, auch wenn Sie PostMessageA() verwenden oder Start () von init() aufrufen, die einzige Möglichkeit, dies zu tun, ist mit einem Skript, weil Skripte laufen, unabhängig davon, ob Tick oder nicht
 

Wie auch immer, danke an alle, die versucht haben zu helfen. Ich beschloss, meine Hände ein wenig schmutzig zu bekommen und ein externes Programm ausführen, um das Skript, Ende der Geschichte laufen.
Unabhängig davon, die Funktion IsConnected() Immer noch macht mich lachen, Wenn eine solche einfache Sache, die er nicht abdecken

 
7bit:

Die ganze Sache um PostMessageA() wurde nur als Reaktion auf den Satz "call start() from init()" weiter oben in diesem Thread gepostet. Ich konnte das nicht unkommentiert stehen lassen, denn "call start() from init()" ist auf so vielen Ebenen schlichtweg falsch und deshalb musste ich das kommentieren und auch eine richtige Lösung anbieten, um das Gleiche zu erreichen, nämlich einen Aufruf von start() aus init() heraus zu erzwingen, auch an Wochenenden.


Für das Problem des Starts von MT4 in einem nicht verbundenen Zustand bietet es keine Lösung. Obwohl ich auch nicht verstehe, was der Anwendungsfall dafür sein könnte, da es die Verbindung ist, die kommt und geht, während Metatrader selbst leicht 24/7 ohne Unterbrechung laufen sollte. Und selbst wenn er am Wochenende neu gestartet wird, wird er mit PostMessageA() in init() die Schleife in start() sofort wieder aufnehmen, sobald die Verbindung nach dem Neustart wieder da ist, auch ohne Tick, und dann läuft er wieder ewig weiter bis zum nächsten (versehentlichen) Neustart.


Vielen Dank für Ihren Einwurf 7Bit, es ist nützlich, bessere Methoden zu kennen, ich habe eine EA erfolgreich ausgeführt, wie ich oben in einem Versuch, ein Problem zu lösen, die mich verursacht significact Probleme beschrieben wurde. Terminal konnte regelmäßig die Verbindung verlieren, aber aus einem unbekannten Grund nicht wiederherstellen. Ich musste die Server im Terminal manuell neu scannen, bevor die Verbindung wieder hergestellt werden konnte. Zunächst dachte ich, dass es sich um einen Zufall handelte, aber zu oft konnte ich eine Stunde warten, ohne dass die Verbindung wiederhergestellt wurde, und dann, wenn ich auf "Rescan" klickte, wurde die Verbindung wiederhergestellt. Meine Lösung bestand darin, den Verbindungsstatus kontinuierlich zu testen... wenn die Verbindung unterbrochen wird, gebe ich ihr 5 Minuten Zeit, um die Verbindung wiederherzustellen, und schreie von den Dächern in Alarmen, E-Mails und Protokollen, dass es passiert, und dann wird das Terminal geschlossen und neu gestartet. Das hat in den meisten Fällen funktioniert. Von Zeit zu Zeit gab es ein legitimes Verbindungsproblem, und da der EA ohne Verbindung nicht initialisiert werden kann, stecke ich in einem Loch fest. Ich habe mir Methoden zur Lösung dieses Problems angesehen, die alle außerhalb von MT4 und damit außerhalb meiner derzeitigen IT-Fähigkeiten liegen. Glücklicherweise habe ich den Broker gewechselt und hatte keine Probleme mit meinem jetzigen Anbieter... also steht die Arbeit an diesem Problem nicht ganz oben auf der Prioritätenliste.

Aber es kann vorkommen, dass die Verbindung verloren geht und MT4 sich nicht wieder verbindet, obwohl die Verbindung tatsächlich verfügbar ist. Ein Neustart des Terminals beeinträchtigt meine EAs nicht, aber wenn ich eine Stunde lang keine Verbindung habe, schon!

V

 
Viffer:

Glücklicherweise habe ich den Makler gewechselt und hatte keine Probleme mit meinem jetzigen Anbieter... also steht die Arbeit daran nicht ganz oben auf der Prioritätenliste.

Bei meinem Broker habe ich das Problem noch nicht beobachtet, es kann also wirklich nur bei einigen Brokern auftreten. Die Verbindung wird manchmal ein- oder zweimal am Tag für ein paar Sekunden unterbrochen, aber immer sofort wiederhergestellt.


Um schnell eine externe Anwendung zusammenzuschrauben, die eine andere Windows-Anwendung überwachen und fernsteuern kann (Klicken auf Schaltflächen, Menübefehle usw.), empfehle ich AutoIT. Dabei handelt es sich um eine leicht zu erlernende BASIC-ähnliche Skriptsprache, die genau auf diese Art von Aufgaben ausgerichtet ist.

 
7bit:

Bei meinem Broker habe ich das noch nicht erlebt, es kann also wirklich nur bei einigen Brokern vorkommen. Die Verbindung wird manchmal ein- oder zweimal am Tag für ein paar Sekunden unterbrochen, aber immer sofort wiederhergestellt.


Um schnell eine externe Anwendung zusammenzuschustern, die eine andere Windows-Anwendung überwachen und fernsteuern kann (Klicken auf Schaltflächen, Menübefehle usw.), empfehle ich AutoIT. Dabei handelt es sich um eine leicht zu erlernende BASIC-ähnliche Skriptsprache, die genau auf diese Art von Aufgaben ausgerichtet ist.

Vielen Dank dafür, ich werde es mir ansehen.

V

 
qjol:

die Funktion IsConnected() bringt mich immer noch zum Lachen, wenn er eine so einfache Sache nicht abdeckt

Ich dachte, das Problem liegt darin, dass MT4 init() nach einem Neustart so lange verzögert, bis es vollständig verbunden ist?


Was hat das plötzlich mit IsConnected() zu tun? IsConnected() scheint wie vorgesehen zu funktionieren. Sie gibt true zurück, wenn sie verbunden ist, und false, wenn sie nicht verbunden ist. Ich verstehe nicht, was daran so lächerlich sein soll.

 
7bit:

Ich dachte, das Problem liegt darin, dass MT4 init() nach einem Neustart verzögert, bis es vollständig verbunden ist?


Was hat das plötzlich mit IsConnected() zu tun? IsConnected() scheint wie vorgesehen zu funktionieren. Sie gibt true zurück, wenn sie verbunden ist, und false, wenn sie nicht verbunden ist. Ich verstehe nicht, was daran so lächerlich sein soll.


denn

if (!IsConnected()) sollte false zurückgeben & Solange kein neuer Tick kommt, kann IsConnected() nicht überprüft werden. Deshalb muss ich lachen

 
qjol:

Solange kein neuer Tick kommt, kann IsConnected() nicht geprüft werden, deshalb bringt es mich zum Lachen

Es kann geprüft werden, lassen Sie die Prüfung einfach in einer Endlosschleife laufen. Wie man diese Schleife startet, wenn man das Terminal während eines Verbindungsabbruchs startet, ist ein völlig anderes Problem. Sobald Sie Ihre Schleife zum Laufen gebracht haben, wird sie das tun, was erwartet wird.

Ihr Problem hat nichts mit der Funktion IsConnected() zu tun. Mit dem gleichen Argument könnten Sie sich auch über Print() oder Alert() oder jede andere Funktion beschweren, die Sie nicht aufrufen können , weil Sie den gesamten Code aus einem ganz anderen Grund gar nicht erst starten konnten.

Grund der Beschwerde: