MT5 und Geschwindigkeit in Aktion - Seite 29

 
Andrey Khatimlianskii:

Identifizieren Sie eine Unterbrechung in der Kommunikation

Ich weiß nicht, wie ich das machen soll.

 
fxsaber:

Ich weiß nicht, wie man das macht.

Wie kommen Sie darauf, dass sie passieren und OnTrade verloren geht? Aus der Dokumentation?

 
Andrey Khatimlianskii:

Wie kommen Sie darauf, dass sie passieren und OnTrade verloren geht? Aus der Dokumentation?

Denn Relogin setzt den historischen Cache zurück, der (so nehme ich an) durch den OnTrade-Mechanismus gedopt wird.

 
fxsaber:

Ich bin mir nicht sicher, wie ich das machen soll.

Möglichst ohne aus der MT5-Intertiki-Zeit herauszukommen. Und bei Handelsgeschäften in Bezug auf den Auftrag im DC ohne interne Hilfe fällt mir nichts ein.

 
Valeriy Yastremskiy:

Möglichst nicht aus der MT5-Zwischentitelzeit herauskommen. Und bei Handelsgeschäften in Bezug auf den Auftrag im DC ohne interne Hilfe fällt mir nichts ein.

Das verstehe ich nicht.

 
fxsaber:

Das verstehe ich nicht.

Ja, etwas stimmt nicht. Die Inter-Tick-Zeit gilt nur für fehlende Ticks aufgrund einer Unterbrechung der Kommunikation. Und was die Abfragen und die Korrektheit der Antworten zu Aufträgen, Abschlüssen und Positionsständen betrifft, so scheint es keine billigen Lösungen zu geben, wenn die Antwort aufgrund von Kommunikationsfehlern ausbleibt oder geändert wird und dadurch Verzögerungen entstehen. Eine erneute Abfrage beim nächsten Ticken ist nicht immer möglich.

Die Lösung wäre für mich eine interne Funktion zur Verfolgung des Status von Transaktionen/Positionen im Hinblick auf Aufträge zur Eröffnung, Änderung, teilweisen Schließung und vollständigen Schließung einer Position. Die Anforderung zur Nachverfolgung des Ergebnisses könnte in der Bestellung selbst festgelegt werden. Und erhalten Sie das Ergebnis beim aktuellen Tick und nicht erst beim nächsten.

 
fxsaber:

Können Sie mir sagen, was ich tun kann, damit ich mich beim Handel nicht damit herumschlagen muss?

2020.09.15 22:17:04.633 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 13 ms.
2020.09.15 22:17:04.638 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 18 ms.
2020.09.15 22:17:04.640 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 20 ms.

Nach dem Zeitpunkt der Protokollierung zu urteilen, geschah alles in 7 ms.

Wenn Sie eine konstruktive Diskussion führen wollen, geben Sie uns die vollständigen Testbedingungen (Server, Kontotyp, Anzahl der ausgewählten Symbole, Anzahl der EAs usw.).


Der SymbolInfoTick-Laufzeitmessungscode:

void OnTick()
  {
   MqlTick Tick;
//---
   ulong start,end,max_time=0,avr_time=0;
   int   count=1000;
   for(int i=0; i<count; i++)
     {
      start=GetMicrosecondCount();
      SymbolInfoTick(_Symbol, Tick);
      end=GetMicrosecondCount()-start;
      //---
      if(end>max_time)
         max_time=end;
      avr_time+=end;
     }
   Print("SymbolInfoTick max time: ",DoubleToString(max_time/1000.0,3)," ms; avr time: ",DoubleToString(avr_time/1000.0/count,3)," ms; ",count," iterations");
  }

Auf dem MetaQuotes-Demo-Server (20 ausgewählte Symbole, Netting, 4 offene Positionen):

2020.09.16 12:34:22.429 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.148 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.022 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.456 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.751 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.021 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:28.145 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:28.652 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.051 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.259 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.861 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:31.159 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:32.376 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:32.658 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:34.867 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations

131 ausgewählte Symbole, 10 offene Positionen:

2020.09.16 12:44:50.554 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:52.337 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:54.960 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:55.587 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:55.863 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.016 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:56.187 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:56.958 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.018 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:59.989 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:00.298 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.021 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:07.609 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.024 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:07.891 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:08.790 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:09.617 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:09.933 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:11.841 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:13.416 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.022 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:13.709 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
Windows 10 build 18363, Intel Xeon  E5-2630 v4 @ 2.20 GHz, 52 / 63 Gb memory
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Anton:

Nach der Zeit der Protokolleinträge zu urteilen, geschah dies alles innerhalb von 7 ms.

Das sind drei verschiedene EAs.

Wenn Sie eine konstruktive Diskussion wünschen, dann geben Sie alle Testbedingungen vollständig an (Server, Kontotyp, Anzahl der ausgewählten Symbole, Anzahl der EAs usw.).

Realkonto, RannForex-Server, 16 Symbole, M1-Chart auf jedem geöffnet (5000 max Bars), auf jedem läuft ein EA, der nur auf sein eigenes Symbol zugreift.

Es kann etwa 50 Positionen und die gleiche Anzahl von Aufträgen gleichzeitig geben. Es gibt keine Indikatoren, und nur CopyTicksRange (frische Ticks) und SymbolInfoTick werden verwendet, um die Preise zu erhalten. Es gibt keinen Hinweis auf Bars.

 
fxsaber:

Es handelt sich um drei verschiedene EAs, die ausgegeben werden.

Realkonto, RannForex-Server, 16 Symbole, M1-Chart auf jedem geöffnet (5000 max Bars), auf jedem läuft ein EA, der nur auf sein eigenes Symbol zugreift.

Es kann etwa 50 Positionen und die gleiche Anzahl von Aufträgen gleichzeitig geben.

Wenn ich es richtig verstehe, gibt es dort keinen EA, sondern einen Stresstester für jedes Symbol. Das ändert die Dinge völlig. Und es zeigt, dass sich die Anfangsbedingungen verstecken.

Das heißt, 16 Threads auf einem 8(4+HT)-Prozessor (+N Worker-Terminal-Threads parallel) brechen nonstop und ohne Verzögerungen in ein synchronisiertes Symboldatenbankobjekt ein. Lese-/Schreibsperren werden durcheinander gebracht, weil ständig ein Tick geschrieben wird.

In der Regel kann in einem solchen Profil, je nach Steilheit des Prozessors und seiner Beherrschung der Threads, jeder Thread zwischen 60% und 80% der Zeit mit Warten verbringen.

Und das unabhängig von der Art der Aufgabe.

 
Renat Fatkhullin:

Wenn ich es richtig verstanden habe, gibt es dort keinen EA, sondern einen Stresstester für jedes Symbol.

Falsch verstanden. Jeder EA ist rein handelsbezogen (im Tester durch echte Ticks nicht verlangsamt) und hängt nicht von anderen ab. Die gesamte Handelslogik wird nur in OnTick ausgeführt, kein Spamming von Handelsaufträgen, keine Rekursion, keine Globalisierung und keine Ressourcen.

OnTrade*, OnBook werden nicht verwendet. Zweiter Timer und OnChartEvent für den Fall, dass bestimmte Tasten gedrückt werden.


Ich bin sicher, dass die richtige Implementierung von Snapshots (durch Sie oder mich) die Anzahl der Aufrufe der regulären Umgebungsfunktionen erheblich reduzieren wird. Dementsprechend werden die Verzögerungen drastisch reduziert.

Ich hätte nie gedacht, dass es zu Schnappschüssen kommen würde. Ich studiere die Frage, wie Standard MT5-Advisor Implementierung ist lahm, leider.