Was RefreshRates() aktualisiert - Seite 7

 
Mikhail Nazarenko:

Danke, das ist genau das Richtige. Gibt das Terminal wirklich einen 4066-Fehler aus, wenn es über iTime auf eine nicht aktualisierte Zeitreihe zugreift? Ich habe festgestellt, dass iClose nicht aktualisierte Informationen anstelle von Null anzeigt.

Das ist der springende Punkt, der Ihr Problem verursacht.

Fehler 4066 - wenn es keine Historie für diese TF gibt, ist sie nicht bereit, Sie müssen den Server kontaktieren.

Und wenn Sie bereits haben es, aber es ist nur aktualisiert, wenn Sie darauf zugreifen, dh nicht einen Fehler geben, nur geben Sie, was jetzt ist, und gleichzeitig mit der Anfrage beginnt, die Zeitreihen zu aktualisieren.

Wenn man nur selten und unregelmäßig darauf zugreift, bekommt man manchmal Schrott. Wenn Sie jede notwendige TF regelmäßig anfordern, bis hin zu jedem Häkchen - dann ist alles in Ordnung.

Wenn der Chart dieser TF geöffnet ist, wird er regelmäßig auf dem Chart aktualisiert. Übrigens, es ist wahrscheinlich möglich, Charts aller notwendigen TFs von EAs zu öffnen, wenn der Zugang nicht regelmäßig ist, aber es ist unzuverlässig, weil sie TFs manuell schließen/ändern können.

 
Evgeniy Chumakov:


Warum 0 zu [i + 0] hinzufügen?

Anstelle von Null habe ich 1 und 2, 1 oder 2 eingesetzt. Ich habe 0, d.h. 1 bar gelassen. Ich habe den Code nicht bereinigt, er ist für die Logik nicht wichtig.

 
Aleksey Mavrin:

Das ist der springende Punkt, an dem Sie nicht weiterkommen.

Fehler 4066 bedeutet, dass es für diese TF keinen Verlauf gibt, sie ist nicht bereit, Sie müssen den Server kontaktieren.

Und wenn Sie bereits haben es, aber es ist nur aktualisiert, wenn Sie darauf zugreifen, dh nicht einen Fehler geben, nur geben Sie, was jetzt ist, und gleichzeitig mit der Anfrage beginnt, die Zeitreihen zu aktualisieren.

Wenn man nur selten und unregelmäßig darauf zugreift, bekommt man manchmal Schrott. Wenn Sie jede notwendige TF regelmäßig anfordern, bis hin zu jedem Häkchen - dann ist alles in Ordnung.

Wenn der Chart dieser TF geöffnet ist, wird er regelmäßig auf dem Chart aktualisiert. Übrigens, es ist wahrscheinlich möglich, Charts aller notwendigen TFs von EAs zu öffnen, wenn der Zugang nicht regelmäßig ist, aber es ist unzuverlässig, weil sie TFs manuell schließen/ändern können.

Wenn ein Fehler auftritt, werden die alten Daten wiederhergestellt, großartig. Dies ist einer der Gründe, warum Broker MT4 lieben und nicht auf MT5 umsteigen)).

D.h. fragen Sie bei jedem Tick oder Sleep nach dem richtigen Zeitrahmen, bis der Fehler 4066 auftritt. Habe ich es richtig verstanden?

 
Mikhail Nazarenko:

Wenn ein Fehler auftritt, werden die alten Daten wiederhergestellt, großartig. Dies ist einer der Gründe, warum Broker MT4 bevorzugen und nicht auf MT5 umsteigen)).

D.h. fragen Sie bei jedem Tick oder Sleep nach dem richtigen Zeitrahmen, bis der Fehler 4066 auftritt. Habe ich es richtig verstanden?

Fast. Hier ist eine fertige Funktion:

bool IsTFDataReady(ENUM_TIMEFRAMES eTF)
{
   ResetLastError();
   iTime(NULL, eTF, 1);
   return GetLastError() == ERR_NO_ERROR;
}
Fügen Sie es in OnTick() ein, und wenn es true zurückgibt, kann auf den eTF-Zeitrahmen zugegriffen werden, die Daten sind gültig.
 
Mikhail Nazarenko:

Wenn ein Fehler auftritt, werden die alten Daten wiederhergestellt, großartig. Dies ist einer der Gründe, warum Broker MT4 bevorzugen und nicht auf MT5 umsteigen)).

D.h. fragen Sie bei jedem Tick oder Sleep nach dem richtigen Zeitrahmen, bis der Fehler 4066 auftritt. Habe ich es richtig verstanden?

Natürlich ist es besser, sleep nur in OnInit zu verwenden, und es ist nur in Indikatoren notwendig. In anderen Fällen ist OnTick, wie Igor oben erwähnt hat, ausreichend.

Je nach Aufgabe können Sie sich zur besten Option manövrieren. Normalerweise wird bei der Überprüfung, ob es einen neuen Balken gibt, bereits bei jedem Tick für alle verwendeten Zeitrahmen auf iTime zugegriffen, was ausreicht, um sie auf dem neuesten Stand zu halten.

s.w. Und wenn Sie die Funktion von Igor nicht bei jedem Tick, sondern nur unter bestimmten Bedingungen verwenden, kommt es ebenfalls zu einer Verzögerung.
Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
В чем различия между тремя режимами тестирования в MetaTrader 5 и на что обратить внимание? Как происходит тестирование эксперта, торгующего одновременно на нескольких инструментах? Когда и как вычисляются значения индикаторов при тестировании и как обрабатываются события? Как синхронизировать бары с разных инструментов при тестировании в режиме "Только цены открытия"? Статья призвана дать ответы на эти и многие другие вопросы.
 
Aleksey Mavrin:

sleep wird natürlich besser nur in OnInit verwendet und wird nur in den Indikatoren benötigt. In anderen Fällen reicht es aus, OnTick zu verwenden, wie Igor oben erwähnt hat.

Je nach Aufgabe können Sie sich zur besten Option manövrieren. Wenn wir prüfen, ob es einen neuen Balken gibt, greifen wir normalerweise bei jedem Tick für alle verwendeten Zeitrahmen auf iTime zu, was ausreicht, um sie auf dem neuesten Stand zu halten.

s.e. Und wenn Igors Funktion nicht bei jedem Tick, sondern nur unter bestimmten Bedingungen verwendet wird, ist sie ebenfalls nicht synchron.

Schlaf funktioniert nicht in Indikatoren

 
Ihor Herasko:

Fast. Hier ist eine vorgefertigte Funktion:

Fügen Sie es in OnTick() ein und wenn es true zurückgibt, können Sie auf den eTF-Zeitrahmen zugreifen, die Daten sind gültig.

Es ist genial einfach. Ich danke Ihnen. Warum beschreiben die Entwickler dies nicht im Handbuch zu den iClose-Funktionen usw.oder korrigieren die Logik der MT4-Kursaktualisierungen, um keine Verschwörungstheorien aufkommen zu lassen.

 
Mikhail Nazarenko:

Wenn ein Fehler auftritt, werden die alten Daten wiederhergestellt, großartig. Dies ist einer der Gründe, warum Broker MT4 bevorzugen und nicht auf MT5 umsteigen)).

D.h. fragen Sie bei jedem Tick oder Sleep nach dem richtigen Zeitrahmen, bis der Fehler 4066 auftritt. Habe ich es richtig verstanden?

Im MT5 ist das viel schwieriger.

In F4 genügt es, alle 2 Minuten iTime von allen verwendeten TFs abzufragen, und alle Daten sind aktuell.

 
Mikhail Nazarenko:

Alles ist genial einfach. Ich danke Ihnen. Warum beschreiben die Entwickler dies nicht im Handbuch zu den iClose-Funktionen usw.oder korrigieren die Logik der MT4-Kursaktualisierungen, um keine Verschwörungstheorien aufkommen zu lassen.

Denn fast alle EAs prüfen bei jedem Tick auf die richtigen Bedingungen und aktualisieren sich von selbst.

 
Vitaly Muzichenko:

Schlaf funktioniert nicht in Indikatoren

Es funktioniert, wenn man es wirklich braucht :)

void SleepA(int msec)
 {
   uint now=GetTickCount();
   while (GetTickCount()<(now+msec))
      {
      for(int i=0;i<10000;i++)
         {
          double f=1;
          f*=f;
          f+=f;
         }
       }
   return;
 }  
Andrey Khatimlianskii:

Im MT5 ist es viel komplizierter.

In 4 reicht es aus, alle 2 Minuten iTime von allen verwendeten TFs abzufragen, und alle Daten sind aktuell.

Genau

Grund der Beschwerde: