MT5 und Geschwindigkeit in Aktion - Seite 65

 
fxsaber:
War am Computer, hat keine Berechnungen gemacht. Die CPU wurde nicht mit irgendetwas belastet.

19 ms und 48 ms für die Ausführung von SymbolInfoTick. Es gab mehrere Dutzend Fälle, in denen die Dauer Hunderte von Mikrosekunden betrug. Aber ich habe sie nicht zitiert.


Offenbar müssen wir, um es zu reproduzieren, die Kampfberater 24 Stunden lang laufen lassen und dann nur noch beobachten. Meiner Meinung nach ist es unrealistisch, herauszufinden, was solche Verzögerungen auslöst.

Es kann vorkommen, dass der Computer Aktualisierungen herunterlädt oder einige Serviceaufgaben ausführt. Auch Netzspannungsschwankungen können es beeinträchtigen. Auf diese Weise kann man zu programmierbaren Netzwerkkarten gelangen, bei denen die gesamte Bot-Logik auf Hardware-Ebene geschrieben wird :) aber auch dort wird es Verzögerungen aufgrund von Fluktuationen des Quantenfeldes geben
 
Maxim Dmitrievsky:
Manchmal pumpt der Computer auch Updates oder führt Serviceaufgaben aus. Auch Schwankungen der Netzspannung können sie beeinflussen. Auf diese Weise kann man zu programmierbaren Netzwerkkarten gelangen, bei denen die gesamte Bot-Logik fest verdrahtet ist :) aber auch dort wird es aufgrund von Quantenfeldfluktuationen Verzögerungen geben

Die Entwickler haben ihr Möglichstes getan. Außerdem hat die Branche einen Code zur Verfügung gestellt, der zeigt, wie die Zecke der Market Watch hinterherhinkt und umgekehrt. Die Reihenfolge, in der die Zecken ankommen, ist gestört und wahrscheinlich noch etwas anderes. Alles in allem wird ein böser gültiger Code veröffentlicht, um andere Situationen zu reproduzieren.

 
Anton:

SymbolInfoTick sendet die vom Server des Brokers empfangenen Daten. Was der Server sendet, ist das, was Sie bekommen.

WirdSymbolInfoTick() im blockierenden Modus oder im nicht blockierenden Modus ausgeführt?

Zum Beispiel, es ist in den Körper der while-Schleife und es gibt keine Verbindung oder Markt ist geschlossen für Wochenende,
dann wird es durch Anhalten der Schleife blockiert werden oder es wird asynchron ausgeführt werden?

 
fxsaber:

wie die Marktbeobachtung der Marktbeobachtung hinterherhinkt und vice versa.

D.h. SymbolInfoTick fängt einen neuen Tick ab und wir erhalten einen anderen Ask und Bid durch das Polling des Market Watch (ohne auf ein Market Watch Change Event zu warten)? Vor einem Jahr oder so war das noch nicht möglich. SymbolInfoTick und CopyTick und vintage führen immer zum gleichen Tick. Wenn Sie Ticks durch verschiedene OnXXX-Funktionen erhalten, werden Sie natürlich etwas durch eine Funktion und etwas durch eine andere erhalten...

 
pivomoe:

d.h. SymbolInfoTick fängt einen neuen Tick auf und wir erhalten einen anderen Ask und Bid durch das Polling des Cups (ohne auf das Cup Change Event zu warten) ?

Hier.

 
fxsaber:

Hier.

Wie ich dachte, testen Sie OnBookEvent und OnTick, nicht MarketBookGet und SymbolInfoTick. Wenn Sie nach diesem Schema testen würden, würde alles übereinstimmen:

While(1)
{
 Sleep(1)
 Запрос тика через SymbolInfoTick
 Запрос тика через стакан MarketBookGet
 Проверка на совпадение. 
}

p.s. Lesen Sie Ihre Beiträge unten. Sie verstehen es auch. Warum brauchen Sie OnBookEvent und OnTick überhaupt ? In meinem Beispiel dauert Sleep(1) 1-2 Millisekunden, Request und Tick mit SymbloInfoTick dauert weniger als eine Mikrosekunde. Der Prozessor befindet sich bereits in 99,9 % der Zeit im Ruhezustand, wenn es keine Ticks gibt. Was ist der Vorteil der Verwendung von OnBookEvent und OnTick?

 
pivomoe:

Wie ich dachte, testen Sie OnBookEvent und OnTick, nicht MarketBookGet und SymbolInfoTick. Wenn Sie nach diesem Schema testen würden, würde alles übereinstimmen:

p.s. Lesen Sie Ihre Beiträge unten. Sie verstehen es auch. Warum brauchen Sie OnBookEvent und OnTick überhaupt ? In meinem Beispiel dauert Sleep(1) 1-2 Millisekunden, Request und Tick mit SymbloInfoTick dauert weniger als eine Mikrosekunde. Der Prozessor befindet sich bereits in 99,9 % der Zeit im Ruhezustand, wenn es keine Ticks gibt. Was ist der Vorteil der Verwendung von OnBookEvent und OnTick?

Ohne einen Hauch von Diplomatie reden Sie nur Unsinn. Sleep(1) ist eine Zehntel Millisekunde. Ich sehe nur eine Theorie.

Die Benutzer von OnTick wollen eine frische Zecke sehen und nicht diejenige, die schon vor einiger Zeit im Terminal angekommen ist. Sie können SymbolInfoTick direkt nach MarketBookGet in den Quellcode einfügen.


Die Entwickler haben zwei Probleme mit ihrem Schweigen voll und ganz zugegeben.

 
fxsaber:

Ohne einen Hauch von Diplomatie reden Sie nur Unsinn. Sleep(1) ist ein Dutzend Millisekunden lang. Ich sehe nur eine Theorie.

Die Benutzer wollen in OnTick einen frischen Tick sehen und nicht einen Tick, der schon vor einiger Zeit im Terminal angekommen ist. Sie können SymbolInfoTick direkt nach MarketBookGet in den Quellcode einfügen.


Die Entwickler haben durch ihr Schweigen zwei Probleme vollständig anerkannt.

Nicht immer und nicht jede Zehntelmillisekunde. Überprüft mit einem einfachen Skript

//+------------------------------------------------------------------+
//|                                                    TestSleep.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#define  ITERATIONS 10000
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ulong t1=GetMicrosecondCount();
   for(int i=0; i<ITERATIONS; i++)
     {
      Sleep(1);
     }
   ulong t2=GetMicrosecondCount()-t1;
   PrintFormat("total %I64u microseconds (%.3f ms per iteration)",t2,double(t2)/(ITERATIONS*1000.0));
  }
//+------------------------------------------------------------------+

Hier ist mein Protokoll

2020.11.04 13:14:31.590 TestSleep (EURUSD,H1)   total 17058138 microseconds (1.706 ms per iteration)

OnTick-Benutzer sehen immer die frischeste Zecke.

OnBookEvent-Benutzer sehen immer den neuesten Tick.

Wenn Sie jedoch die mit OnTick und OnBookEvent empfangenen Ticks vergleichen wollen, werden Sie enttäuscht sein, da die Ereignisse nicht parallel, sondern nacheinander verarbeitet werden. Das wollte der Benutzer pivomoe Ihnen sagen

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Slava:

Nicht immer und nicht überall eine Zehntelmillisekunde. Überprüft mit einem einfachen Skript

Hier ist mein Protokoll.

Und hier ist mein Protokoll.

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnStart()
{
  for (int i = 0; i < 5; i++)
    _BV(Sleep(1), 1);
}

Ergebnis.

2020.11.04 15:19:32.565 Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 93 in OnStart: Sleep(1)] = 5326 mcs.
2020.11.04 15:19:32.580 Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 93 in OnStart: Sleep(1)] = 14928 mcs.
2020.11.04 15:19:32.596 Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 93 in OnStart: Sleep(1)] = 15930 mcs.
2020.11.04 15:19:32.611 Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 93 in OnStart: Sleep(1)] = 14910 mcs.
2020.11.04 15:19:32.627 Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 93 in OnStart: Sleep(1)] = 15941 mcs.

OnTick-Benutzer sehen immer die frischeste Zecke.

OnBookEvent-Benutzer sehen immer den neuesten Tick.

Das Ergebnis der Ausführung des EA auf einem einzelnen Chart von einem Rechner aus, der in keiner Weise ausgelastet ist.

2020.11.04 15:31:19.151 Test9 (EURUSD,H1)       Alert: OnBook-lag! - 6564 mcs.
2020.11.04 15:31:19.151 Test9 (EURUSD,H1)             [bid]   [ask] [onTick] [Interval]
2020.11.04 15:31:19.151 Test9 (EURUSD,H1)       [0] 1.17192 1.17192     true     108150
2020.11.04 15:31:19.151 Test9 (EURUSD,H1)       [1] 1.17192 1.17192    false         30
2020.11.04 15:31:19.151 Test9 (EURUSD,H1)       [2] 1.17189 1.17191     true      88210
2020.11.04 15:31:19.151 Test9 (EURUSD,H1)       [3] 1.17189 1.17191    false       6564
2020.11.04 15:31:30.260 Test9 (EURUSD,H1)       Alert: OnBook-lag! - 3888 mcs.
2020.11.04 15:31:30.260 Test9 (EURUSD,H1)             [bid]   [ask] [onTick] [Interval]
2020.11.04 15:31:30.260 Test9 (EURUSD,H1)       [0] 1.17192 1.17192    false     117471
2020.11.04 15:31:30.260 Test9 (EURUSD,H1)       [1] 1.17192 1.17192     true         11
2020.11.04 15:31:30.260 Test9 (EURUSD,H1)       [2] 1.17192 1.17193     true     882710
2020.11.04 15:31:30.260 Test9 (EURUSD,H1)       [3] 1.17192 1.17193    false       3888
2020.11.04 15:31:31.519 Test9 (EURUSD,H1)       Alert: OnTick-lag! - 4653 mcs.
2020.11.04 15:31:31.519 Test9 (EURUSD,H1)             [bid]   [ask] [onTick] [Interval]
2020.11.04 15:31:31.519 Test9 (EURUSD,H1)       [0] 1.17195 1.17195     true      86660
2020.11.04 15:31:31.519 Test9 (EURUSD,H1)       [1] 1.17195 1.17195    false         11
2020.11.04 15:31:31.519 Test9 (EURUSD,H1)       [2] 1.17194 1.17194    false     220122
2020.11.04 15:31:31.519 Test9 (EURUSD,H1)       [3] 1.17194 1.17194     true       4653

Markiert identische Ticks, die in verschiedenen On-Funktionen durch entsprechende Methoden empfangen werden. Die Verzögerung kann bis zu zehn Millisekunden betragen, wenn sie auf sechs statt auf einer Karte ausgeführt wird.

Wenn Sie jedoch die in OnTick empfangenen Ticks mit den in OnBookEvent empfangenen vergleichen wollen, werden Sie enttäuscht sein, da die Ereignisse nicht parallel, sondern nacheinander verarbeitet werden. Was Benutzer pivomoe Ihnen zu sagen versuchte

Wenn ein fast leeres OnBookEvent/OnTick 20 Millisekunden später ausgelöst wird als das entsprechende fast leere OnTick/OnBookEvent, ist das OK?


ZS Wenn Sie schon auf das Thema achten, hier gibt es einen weiteren Reproduktionscode. In Market Watch kommen die Ticks mit einer früheren Zeit als die Market Watch Zeit davor herein.

 
fxsaber:

Wenn ein fast leeres OnBookEvent/OnTick 20 Millisekunden später ausgelöst wird als das entsprechende fast leere OnTick/OnBookEvent, ist das OK?


Die EA-Warteschlange ist eine sperrbare Ressource. Wenn ein Ereignis in die Warteschlange geschrieben wird, wartet der Expert Advisor (es sei denn, der Expert Advisor verarbeitet gerade ein Ereignis)

Ereignisse für den Expert Advisor kommen aus der Ereigniswarteschlange des entsprechenden Charts, die wiederum aus dem Verarbeitungszyklus des entsprechenden Symbols stammt. Und diese Verarbeitungsschleife verteilt nicht nur Ereignisse auf ihre eigenen Diagramme, sondern erledigt auch eine Menge anderer Dinge.

Ich habe Ihnen bereits gesagt, dass Windows kein Echtzeitbetriebssystem ist.