MQL4-Echtzeituhr (Sekunde für Sekunde) - Seite 4

 

Gut, aber das ist keine Echtzeitlösung, weil wir die Reaktionszeit für Nicht-Tick-Ereignisse nicht kontrollieren können.
Im Falle von "sleep()" können wir das.

 

Wenn wir also Tick-by-Tick und veraltete Preise mit Schlaf kombinieren, können wir eine Echtzeituhr haben :)

 

Wie gesagt, wenn diese Lösung in einem EA implementiert wird, besteht keine Notwendigkeit mehr für TimeCurrent() und die Schleife wird durch Sleep(Interval-Runtime) (in ms) gesteuert.

Der größte Teil des Codes bleibt derselbe, redraw() wird nicht mehr benötigt. Wenn Sie die Geschwindigkeit des Codes erhöhen wollen, können Sie auch einige (ah mir fehlt das englische Wort) Arrays mit Rotationsnullpunkt verwenden, um die Shift-Schleife loszuwerden.

AFAIK ist dies (oder ähnlich) die beste Lösung, die in reinem MQL in einem Indikator durchgeführt werden kann. Es gibt sicherlich bessere Lösungen, wenn man eine DLL verwendet und die Berechnungen in ein externes Programm exportiert

 
spidermagos:

Wenn wir also Tick-by-Tick und veraltete Preise mit Schlaf kombinieren, können wir eine Echtzeituhr haben :)

Ja, aber Sleep ist nicht möglich in Indikatoren, das ist Ihr Problem seit dem Beginn dieses Threads
 
zzuegg:
Ja, aber Sleep ist nicht möglich in Indikatoren, das ist Ihr Problem seit Beginn dieses Threads

Kann ein EA einen Indikator aufrufen?
 
Ja, aber nur über icustom, was Ihr Problem nicht lösen wird.
 
Sie können ein Skript an den Chart anhängen, das jede Sekunde einen gefälschten Tick an den Chart sendet. Das ist es, was ich normalerweise tue, um Multi-Pair-Indikatoren und EAs in regelmäßigen Abständen zu aktualisieren.
 
7bit:
Sie können ein Skript an den Chart anhängen, das jede Sekunde einen gefälschten Tick an den Chart sendet. Das ist es, was ich normalerweise tue, um Multi-Pair-Indikatoren und EAs in regelmäßigen Abständen zu aktualisieren.
Benötigen Sie dafür eine DLL oder geht das auch ohne?
 
zzuegg:
Braucht man dafür eine DLL oder geht das auch ohne?

Es ist nur eine Handvoll Zeilen in mql4 (natürlich müssen Sie DLL-Aufrufe erlaubt, die Windows-API aufrufen, aber Sie brauchen nicht zu installieren):

/**
* MT4/experts/scripts/ticks.mq4
* send a fake tick every 1000ms to the chart and
* all its indicators and EA until this script is removed.
*/

#property copyright "© Bernd Kreuss"

#import "user32.dll"
   int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA(string lpString);
#import

int start(){
   int hwnd = WindowHandle(Symbol(), Period());
   int msg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
   while(!IsStopped()){
      PostMessageA(hwnd, msg, 2, 1);
      Sleep(1000);
   }
}

Ich habe dieses Skript in meinen Favoriten und wenn ich Ticks brauche, ziehe ich es einfach auf den Chart.


Ich habe auch eine Variante davon ohne die Schleife, die nur einen Tick sendet und dann beendet wird, und habe diese (one_tick.mq4) an die Tastenkombination ALT+T gebunden, und jetzt kann ich einen Tick an das aktive Diagramm senden, indem ich einfach ALT-T drücke. Ich brauche dies für einige meiner stat-arb EAs beim Experimentieren während des Wochenendes, um start() zu erzwingen, um ihre Berechnungen und das Plotten ihrer Graphen auszulösen (ich kann Linien auf dem Chart verschieben, um das Intervall zu ändern und dann brauche ich einen neuen Tick, um ihre Berechnungen zu aktualisieren).

 

Schöner Beitrag. Danke fürs Teilen