Zeitschaltuhr - Seite 5

 
Yedelkin:
Oh, Licht am Ende des Tunnels! Sie sollten den EventSetTimer() innerhalb von OnTimer() selbst aufrufen? Ich werde es auf jeden Fall ausprobieren, wenn ich am Terminal bin. Danke für die intelligente Lösung!

Ich habe diese Lösung schon die ganze Zeit gesehen.

Ich habe einfach noch nicht ausprobiert, wie man am besten

EventKillTimer() oder EventSetTimer(0); um den Timer zu beenden.

 
MetaDriver:

Millisekunden ist sehr erwünscht. Ich schließe mich den Wünschen an.

In Expert Advisor ist es jetzt gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).

Aber wenn sie die Unterbrechungsbearbeitung...

Документация по MQL5: Общие функции / MessageBox
Документация по MQL5: Общие функции / MessageBox
  • www.mql5.com
Общие функции / MessageBox - Документация по MQL5
 
stringo:

Es ist nicht mehr möglich, auf Millisekunden zu gehen.

Wie viele Expert Advisors, die bereits geschrieben wurden, werden 1000 Mal mehr Timer-Ereignisse generieren als vom Autor beabsichtigt?

Nein, nein... Sie müssen es nicht auf diese Weise ändern . Sie müssen lediglich eine neue Funktion EventSetTimerMS(long ms) hinzufügen;

Aus Gründen der Kompatibilität ist es notwendig, die alte Version beizubehalten. (Es kann leicht emuliert werden , indem man EventSetTimerMS(1000); aufruft)

Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 
Yurich:

Dies ist jetzt im Expert Advisor gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).

Wenn sie doch nur die Unterbrechungsbearbeitung übernehmen würden...

Ich weiß nicht, was Sie meinen, aber vielleicht ist es ein gutes Beispiel... :)

Über Warteschlangen - Sekunden können auch verwendet werden, wenn Sie schlafen gehen. :) Verwenden Sie es nicht, wenn Sie nicht wissen, wie Sie die Folgen verarbeiten können - es ist ein einfaches und universelles Rezept.

 
Yurich:

......... Zum Beispiel kann die synchrone Funktion MessageBox() sich schnell in die Warteschlange einreihen, wenn der Benutzer das Terminal verlässt. (Natürlich kann man sagen, dass man den Timer vor solchen Funktionen deaktivieren kann) ........

Natürlich werde ich das. ;)
 
Mit Millisekunden können Sie versuchen, die Zeit zwischen den Ticks zu messen. Wenn weniger als 500 ms vergehen, ist der Markt kurz davor, in Bewegung zu geraten.
 
stringo:

Wie viele bereits geschriebene Experten werden 1000-mal mehr Timer-Ereignisse erzeugen als vom Autor beabsichtigt?

Nur eine Meinung: und wenn es die Möglichkeit gibt, Millisekunden für diejenigen hinzuzufügen, die es wünschen, und der Haken nur in alten EAs ist, warum dann nicht eine neue Funktion einführen

   bool EventSetTimer(
                    int  seconds,            // количество секунд для OnTimer
                    bool переключатель=false // переключатель: false - период измеряется в секундах, true - в миллисекундах
                   );

Machen Sie alles mehrsekündig, und wenn der Schalter==false, multiplizieren Sie den Wert der Sekunden einmal mit 1000 (für alte EAs, zum Beispiel).

 
Yurich:

Dies ist jetzt im Expert Advisor gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).

Aber wenn sie die Unterbrechungsbearbeitung...


OnTimer, OnTick, OnTrade... Dies sind die Unterbrechungen.

 
pusheax:

OnTimer, OnTick, OnTrade... Das sind Unterbrechungen.

Eine Unterbrechung liegt vor, wenn OnTick ausgeführt wird und ein wichtigeres Ereignis, wie OnTimer, eingetroffen ist. OnTick wird angehalten, der OnTimer-Code wird ausgeführt, dann läuft OnTick wieder weiter.
 
Yurich:
Eine Unterbrechung liegt vor, wenn OnTick ausgeführt wird und ein wichtigeres Ereignis, wie OnTimer, eingetroffen ist. OnTick wird angehalten, der OnTimer-Code wird ausgeführt, dann läuft OnTick wieder weiter.
Das funktioniert folgendermaßen.