MT5 und Geschwindigkeit in Aktion - Seite 34

 
fxsaber:

Es ist nicht möglich, die Geschichte am Wochenende zu ändern, also gibt es keine Möglichkeit, das zu überprüfen.

Möglicherweise. Aus diesem Grund wurde das Problem am Wochenende entdeckt.

// Демонстрация лагов HistorySelect при удалении нескольких ордеров.
#property script_show_inputs

input int inAmount = 5; // Количество ордеров

#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/332/Benchmark.mqh
#define _B2(A) _B(A, 10)

// true - ордер есть в истории, false - иначе.
bool HistorySelectOrder( const ulong Ticket )
{
  return((HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) ||
         (_B2(HistorySelect(0, INT_MAX)) && (HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket)));
}

void OnStart()
{
  HistorySelect(0, INT_MAX); // Создали исторический кеш.
        
  MqlTradeRequest Request = {0};
  MqlTradeResult Result;
                        
  // Выставляем ордера
  Request.action = TRADE_ACTION_PENDING;
  Request.symbol = _Symbol;
  Request.volume = 0.01;
  Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK) - 1000 * _Point;
  Request.type = ORDER_TYPE_BUY_LIMIT;
        
  for (int i = 0; i < inAmount; i++)
    if (!OrderSend(Request, Result) || (Result.retcode != TRADE_RETCODE_DONE))
      Print("Good!");
            
  // Удаляем ордера
  Request.action = TRADE_ACTION_REMOVE;

  for (int i = OrdersTotal() - 1; i >= 0; i--)
  {
    Request.order = OrderGetTicket(i);

    if (OrderSend(Request, Result) && (Result.retcode == TRADE_RETCODE_DONE) &&
        !HistorySelectOrder(Request.order)) // Проверяем наличие удаленного ордера в истории.
      Print("OrderSend BUG!");
  }
}


Ergebnis.

2020.09.27 15:46:11.940 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 39 mсs.
2020.09.27 15:46:11.988 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 253 mсs.
2020.09.27 15:46:12.034 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 190 mсs.
2020.09.27 15:46:12.083 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 218 mсs.
2020.09.27 15:46:12.130 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 250 mсs.

Verzögerungen (können bis zu mehreren Millisekunden betragen) nach dem Löschen der zweiten Bestellung.

 
Renat Fatkhullin:

Umschalten auf Mikrosekundenzählung. Millisekunden sind nicht mehr angemessen.

Warum führt der MT5-Server schwebende Aufträge in 100-200 Millisekunden aus? (bei einem bekannten Makler auf A)

 
fxsaber:

Vielleicht. Aus diesem Grund wurde am Wochenende ein Problem festgestellt.


Ergebnis.

Verzögerungen (bis zu mehreren Millisekunden) nach dem Löschen der zweiten Bestellung.

Das Löschen von Aufträgen führt zu einer vollständigen Deaktivierung des Cache der ausgewählten Historie.

Im normalen Modus wurde die Geschwindigkeit der historischen Abtastung auf einige zehn Mikrosekunden reduziert.

 
secret:

Warum führt der MT5-Server schwebende Aufträge in 100-200 Millisekunden aus? (bei einem bekannten Makler auf A)

Ausführen oder akzeptieren?

Ohne Details zu N Geschäften (damit Sie das gesamte Bild sehen können, nicht nur einen herausgerissenen Einzelauftrag, einschließlich Pings) können wir nicht diskutieren.

 
Renat Fatkhullin:

Durch das Löschen von Aufträgen wird der Zwischenspeicher für die ausgewählte Geschichte vollständig deaktiviert.

Die erste Löschung geht jedoch gut. Der zweite hat Probleme. Worauf bezieht sich diese Behinderung?

 
fxsaber:

Ich werde im Forum nachsehen müssen. Ich erinnere mich, dass ich gerade im Tester gezeigt habe, wie der generische Zugriff auf die Geschichte dem regulären Mechanismus überlegen ist.

Dies warhier der Fall.

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.08
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Renat Fatkhullin:

Wird sie ausgeführt oder angenommen?

Ohne Details zu N Geschäften (damit Sie das Gesamtbild sehen können, nicht einen herausgerissenen Einzelauftrag, einschließlich Pings) können wir nicht diskutieren.

Ja, das ist sie.

Wenn der Preis eine schwebende Limit-Order mit einem Tick berührt und zurückprallt und dieser Tick weniger als 100-200 ms dauert. Dann kommt es in etwa 30-50 % der Fälle zu einem Abrutschen. Das heißt, der Auftrag hat keine Zeit, um zum Preis des Ticks ausgeführt zu werden.

Die Dauer des Ticks wird vom Tick-Archiv des Brokers gemessen, daher haben Pings nichts damit zu tun.

Ich glaube auch nicht an eine hohe Serverlast, da sich zu diesen Zeitpunkten nur wenige Trader entsprechend der Orderzahlen bewegen.

Auch ein Ausrutschen aufgrund mangelnder Liquidität hat damit nichts zu tun. Sie erscheint nur bei kurzen Ticks. Auch die Grundstücksgröße ist klein.

Bislang gehe ich von einer künstlichen Verzögerung der Ausführung durch den Makler aus.

Es ist zeitaufwendig, Statistiken über mehrere Geschäfte zu erstellen. Aber es ist möglich, wenn es hilft, die Frage zu beantworten.

 
secret:

Führt aus.

Wenn der Preis eine Limit-Order mit einem Tick berührt und zurückspringt, und dieser Tick weniger als 100-200 ms dauert. In etwa 30-50% der Fälle wird der Auftrag dann mit einem Schlupf ausgeführt. Das heißt, der Auftrag hat nicht genug Zeit, um zum Preis des Ticks ausgeführt zu werden.

Die Dauer des Ticks wird mit dem Tick-Archiv des Brokers abgeglichen, Pings haben also nichts damit zu tun.

Ich glaube auch nicht an eine hohe Serverlast, da sich zu diesen Zeitpunkten nur wenige Trader entsprechend der Orderzahlen bewegen.

Auch ein Ausrutschen aufgrund mangelnder Liquidität hat damit nichts zu tun. Sie erscheint nur bei kurzen Ticks. Auch die Grundstücksgröße ist klein.

Bislang gehe ich von einer künstlichen Verzögerung der Ausführung durch den Makler aus.

Es ist zeitaufwendig, Statistiken über mehrere Geschäfte zu erstellen. Aber es ist möglich, wenn es hilft, die Frage zu beantworten.

Man muss sich das genau ansehen, aber wenn es sich um Forex handelt, ist es wahrscheinlich, dass beim nächsten Tick ein Handel stattfindet.

Ich brauche Protokolle und eine Tickchart-Tabelle.
 
secret:

Wenn der Preis eine Limit-Order mit einem Tick berührt und zurückspringt, und dieser Tick weniger als 100-200 ms dauert. Dann kommt es in etwa 30-50 % der Fälle zum Abrutschen. D.h. der Auftrag kann nicht zum Preis des Ticks ausgeführt werden.

MT5 hat damit nichts zu tun. Auf Demokonten wird die Ausführung perfekt sein.
 

Müde von der Fehlersuche in den Snapshots. Endlich ist es perfekt. Ein Berater, nichts. Zwei - perfekt. 20 - Katastrophe: CPU ist unter 100%. HistorySelect verzögert sich um viele Millisekunden.

Es scheint, dass MT5 nicht dafür gedacht ist, viele Expert Advisors gleichzeitig laufen zu lassen.