Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Rufen Sie einfach start() von init () aus auf ...und Sie werden in start() sein, auch wenn kein Tick kommt!
danke 2
Erweiternd zu meinem Link oben... Ich führe einen separaten EA, um den Verbindungsstatus zu überwachen. Es hat im Grunde alle den Code für meinen Test innerhalb Start mit einem Schlaf am Ende codiert. Start ist im Grunde eine große Schleife, wenn es endet, geht es zurück zum Anfang. Aber anstatt auf einen Tick zu warten, um den Start auszulösen, rufe ich start() innerhalb von init() auf. Auf diese Weise setzt start() die Schleife mit dem sleep fort und init() endet nie, so dass der Code auf der Grundlage von Zeitintervallen von sleep läuft, anstatt auf einen Tick zu warten... der Link oben zeigt das Prinzip...
hth
V
Rufen Sie einfach start() von init () aus auf ...und Sie werden in start() sein, auch wenn kein Tick kommt!
beides löst das Problem nicht, da init() auch nicht startet, wenn keine Verbindung besteht
Der einzige Weg, dies zu tun, ist mit einem Skript; das Problem ist, dass es keine Möglichkeit gibt, das Terminal mit einem geladenen Skript zu öffnen
beides löst das Problem nicht, da init() auch nicht startet, wenn keine Verbindung besteht
Die einzige Möglichkeit, dies zu tun, ist mit einem Skript; das Problem ist, dass es keine Möglichkeit gibt, das Terminal mit einem geladenen Skript zu öffnen
Werfen wir einen Blick auf die MT4i.com Tools. Ich benutze sie zu monitot Verbindung und senden Sie Alarm per E-Mail oder SMS.
http://www.mt4i.com/mtdashboard.aspx
Rufen Sie einfach start() aus init () auf ... und Sie werden in start() sein, auch wenn kein Tick kommt!
NEIN! Das ist nicht erlaubt. init() sollte nach 2 Sekunden zurückkehren. Init darf nicht blockieren! Daraus können (und werden) alle möglichen Probleme entstehen.
Führen Sie einfach die Schleife in start aus und erwarten Sie, dass start automatisch beim nächsten verfügbaren Tick nach dem Laden des EA aufgerufen wird. Es gab Ticks , bevor die Verbindung abbrach, so dass Ihre Schleife bereits ausgeführt wird, wenn dieses Ereignis eintritt.
Wenn Sie wirklich ein start() aus init() heraus auslösen müssen, weil es am Wochenende laufen soll, dann ist der einzig richtige Weg, den PostMessage()-Trick zu verwenden, um einen Tick zu erzwingen. Sie posten die Nachricht und lassen dann init zurückkehren! MT4 ruft dann start() auf die normale Weise auf und init() blockiert nicht.
Im nächsten Beitrag finden Sie ein Beispiel.
Dies ist das gleiche Skript wie oben, aber als EA implementiert, um beide Konzepte in einem EA zu demonstrieren.
In init() wird der allererste Tick in die Warteschlange gestellt, um das erste start() auszulösen, und dann werden in start() weitere Ticks in einer Endlosschleife erzeugt, die dann von allen Indikatoren auf demselben Chart aufgegriffen werden.
Dies ist der einzig korrekte Weg, um einen Start() aus init() in einem EA zu erzwingen. Sie dürfen dies nicht in einem Indikator tun, da dort start() im GUI-Thread ausgeführt wird.
Versuchen Sie, diesen EA auf einem Chart zu platzieren, schließen Sie das Terminal, deaktivieren Sie die Internetverbindung und schalten Sie das Terminal ein (während die Internetverbindung ausgeschaltet ist), und Sie werden sehen, dass es nicht funktioniert.
Versuchen Sie, diese Ea auf ein Diagramm zu setzen, schließen Sie das Terminal, deaktivieren Sie Ihre Internetverbindung und schalten Sie Ihr Terminal ein (während die Internetverbindung ausgeschaltet ist). Sie werden sehen, dass es nicht funktioniert.
Aber es sollte weiterlaufen, sobald es unter normalen Bedingungen gestartet wurde (was der normale Anwendungsfall sein sollte). Versuchen Sie, die Verbindung zu trennen, nachdem sie gestartet wurde.
Und es dient als Beispiel dafür, wie man ein blockierendes init() vermeiden und es als EA statt als Skript ausführen kann.
Aber es sollte weiterlaufen, sobald es unter normalen Bedingungen gestartet wurde (was der normale Anwendungsfall sein sollte). Versuchen Sie, die Verbindung zu trennen, nachdem sie gestartet wurde.
Und es dient als Beispiel dafür, wie man ein blockierendes init() vermeiden und es als EA statt als Skript ausführen kann.
Sie haben Recht, aber ich suche nicht nach einer Lösung für die von Ihnen beschriebene Situation, sondern nach einer Lösung für die von mir beschriebene Situation, und im Moment ist die einzige Lösung, die ich gefunden habe, die, externe Software, ein Skript ausführt