MT5 et la vitesse en action - page 90

 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

MT5 et la vitesse en action

fxsaber, 2021.03.10 14:53

Un exemple clair de ce qui ralentit le Market Watch.

Regardez les valeurs de la colonne Processeur (deuxième à partir de la droite).


Peut-être que Market Overview devrait être géré par la carte vidéo ?

 
BillionerClub:

Peut-être que l'aperçu du marché devrait être géré par la carte vidéo ?

Surtout si le MT est dans une machine virtuelle (ce qui n'est pas un cas rare).

 
BillionerClub:

Peut-être que l'aperçu du marché devrait être géré par la carte vidéo ?

Il n'y a pas de limite de FPS (images par seconde) dans le terminal. Dans Market Watch, il peut être de 300 fps ou plus.

Toute visualisation dans les terminaux de négociation à des images par seconde > 50 est un gaspillage de ressources informatiques.

 
BillionerClub:

Peut-être que l'aperçu du marché devrait être géré par la carte vidéo ?

ne doit pas être basé sur SysListView32, qui n'est pas rapide en soi, mais possède son propre élément pour le rendu, mais avec toutes les "cloches et sifflets" pour implémenter le défilement, le tri, etc. Une autre question - est-il si nécessaire lorsque l'on travaille sous cette forme ? et puis l'éteindre pour la période de travail serait une option pour résoudre ce problème (si c'est un problème)

 
Trouvé un cache de propriété manquant pour les objets graphiques.
#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnStart()
{
  const string Name = "ObjectName";
  
  ObjectCreate(0, Name, OBJ_BITMAP_LABEL, 0, 0, 0);
  
  for (int i = 0; i < 10; i++)
    _B(::ObjectGetInteger(0, Name, OBJPROP_COLOR), 100); // Повторное обращение к тому же объекту должно быть быстрым, но этого не происходит.
    
  ObjectDelete(0, Name);
  
  Print(::ObjectSetInteger(0, Name, OBJPROP_COLOR, 0)); // true для удаленного объекта!
}


Résultat.

Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 9361 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 396 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1399 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 987 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1111 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1040 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 639 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 796 mcs.
true


Très coûteux. Et une erreur de fonction ObjectSet également.

Chaîne de recherche: Oshibka 026.

 
fxsaber:

Et une erreur de la fonction ObjectSet également.

Chaîne de recherche: Oshibka 026.

Traitement asynchrone des objets

 
Andrey Khatimlianskii:

La manipulation des objets est asynchrone

Il s'avère que ObjectSet doit toujours retourner true.

 
fxsaber:

Il s'avère que ObjectSet doit toujours retourner true.

Lisez l'aide :

https://www.mql5.com/ru/docs/objects/objectsetinteger

Valeur retournée

Renvoie vrai seulement si la commande pour changer les propriétés de l'objet graphique a été envoyée avec succès au graphique, sinon renvoie faux. Pour obtenir plus d'informations sur l'erreur, appelez GetLastError().


Документация по MQL5: Графические объекты / ObjectSetInteger
Документация по MQL5: Графические объекты / ObjectSetInteger
  • www.mql5.com
ObjectSetInteger - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:

Il s'avère que ObjectSet doit toujours retourner true.

Je ne peux pas arriver à la même conclusion en utilisant la logique.

 
Andrey Khatimlianskii:

Anton:

false - seulement si le ChartID est incorrect. Avec son propre ChartID (zéro), c'est toujours vrai.

Vous devez essayer très fort de provoquer des faux.