MT5 et la vitesse en action - page 34

 
fxsaber:

il n'est pas possible de changer l'histoire pendant le week-end, donc il n'y a aucun moyen de vérifier.

C'est possible. C'est pourquoi le problème a été découvert ce week-end.

// Демонстрация лагов 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!");
  }
}


Résultat.

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.

Retard (pouvant aller jusqu'à plusieurs millisecondes) après la suppression du deuxième ordre.

 
Renat Fatkhullin:

Passez au comptage des microsecondes. Les millisecondes ne sont plus appropriées.

Pourquoi le serveur MT5 exécute-t-il les ordres en attente en 100-200 millisecondes ? (chez un courtier connu sur A)

 
fxsaber:

Peut-être. C'est pourquoi un problème a été découvert ce week-end.


Résultat.

Décalage (pouvant atteindre plusieurs millisecondes) après la suppression du deuxième ordre.

La suppression des commandes entraîne la désactivation complète du cache de l'historique sélectionné.

En mode normal, la vitesse d'échantillonnage de l'historique a été portée à quelques dizaines de microsecondes.

 
secret:

Pourquoi le serveur MT5 exécute-t-il les ordres en attente en 100-200 millisecondes ? (chez un courtier connu sur A)

Exécute ou accepte ?

Sans les détails de N transactions (pour que vous puissiez voir l'ensemble du tableau, et non un ordre unique déchiré, y compris les pings), vous ne pouvez pas discuter.

 
Renat Fatkhullin:

La suppression des commandes désactive complètement le cache de l'histoire sélectionnée.

La première suppression se passe bien, cependant. Le second a des problèmes. A quoi est lié ce handicap ?

 
fxsaber:

Je vais devoir le chercher sur le forum. Je me souviens avoir montré comment l'accès générique à l'historique est supérieur au mécanisme régulier juste dans le Testeur.

C'était le casici.

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

Est-ce qu'il exécute ou est-ce qu'il accepte ?

Sans les détails de N transactions (pour que vous puissiez avoir une vue d'ensemble, pas un ordre unique déchiré, y compris les pings), nous ne pouvons pas discuter.

Oui, c'est vrai.

Si le prix touche un ordre Limit en attente avec un tick et rebondit, et que ce tick dure moins de 100-200 ms. Ensuite, dans 30 à 50 % des cas environ, un glissement se produit. C'est-à-dire que l'ordre n'a pas le temps d'être exécuté par le prix du tick.

La durée du tick est mesurée par l'archive tick du courtier, les pings n'ont donc rien à voir avec cela.

Je ne crois pas non plus à une charge élevée des serveurs, car seuls quelques traders se déplacent à ces moments-là en fonction des numéros d'ordre.

Les dérapages dus au manque de liquidités n'y sont pas non plus pour rien. Il n'apparaît que sur les ticks courts. La taille du terrain est petite, aussi.

Jusqu'à présent, j'ai supposé un retard d'exécution artificiel du côté du courtier.

La collecte de statistiques sur plusieurs transactions prend du temps. Mais c'est possible, si cela permet de répondre à la question.

 
secret:

Exécute.

Si le prix touche un ordre Limit avec un tick et rebondit, et que ce tick dure moins de 100-200 ms. Dans environ 30 à 50 % des cas, l'ordre est exécuté avec un slippage. C'est-à-dire que l'ordre n'est pas exécuté au prix du tick.

La durée du tick est mesurée par l'archive tick du courtier, les pings n'ont donc rien à voir avec cela.

Je ne crois pas non plus à une charge élevée des serveurs, car seuls quelques traders se déplacent à ces moments-là en fonction des numéros d'ordre.

Les dérapages dus au manque de liquidités n'y sont pas non plus pour rien. Il n'apparaît que sur les ticks courts. La taille du terrain est petite, aussi.

Jusqu'à présent, j'ai supposé un retard d'exécution artificiel du côté du courtier.

La collecte de statistiques sur plusieurs transactions prend du temps. Mais c'est possible, si cela permet de répondre à la question.

Vous devez l'examiner en détail, mais si c'est le forex, il est probable qu'il s'agisse d'une transaction au prochain tick.

J'ai besoin de logs et d'un tableau de tick chart.
 
secret:

Si le prix touche un ordre Limit avec un tick et rebondit, et que ce tick dure moins de 100-200 ms. Ensuite, le glissement se produit dans environ 30 à 50 % des cas. C'est-à-dire que l'ordre ne parvient pas à être exécuté au prix du tick.

MT5 n'a rien à voir avec cela. Sur les comptes de démonstration, l'exécution sera parfaite.
 

Fatigué de déboguer les instantanés. C'est finalement parfait. Un conseiller, rien. Deux - parfait. 20 - désastre : le CPU est en dessous de 100%. HistorySelect a un retard de plusieurs millisecondes.

Il semble que MT5 ne soit pas conçu pour gérer un grand nombre d'Expert Advisors en même temps.