MT5 und Geschwindigkeit in Aktion - Seite 90

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

MT5 und Geschwindigkeit in Aktion

fxsaber, 2021.03.10 14:53

Ein klares Beispiel dafür, was den Market Watch verlangsamt.

Schauen Sie sich die Werte in der Spalte "Prozessor" (zweite von rechts) an.


Vielleicht sollte die Marktübersicht von der Grafikkarte verwaltet werden?

 
BillionerClub:

Vielleicht sollte die Marktübersicht von der Grafikkarte übernommen werden?

Vor allem, wenn sich die MT in einer virtuellen Maschine befindet (kein ungewöhnlicher Fall).

 
BillionerClub:

Vielleicht sollte die Marktübersicht von der Grafikkarte übernommen werden?

Im Terminal gibt es keine FPS (Frames per Second) Begrenzung. In Market Watch können es 300 fps oder mehr sein.

Jede Visualisierung in Handelsterminals mit fps > 50 ist eine Verschwendung von Rechenressourcen.

 
BillionerClub:

Vielleicht sollte die Marktübersicht von der Grafikkarte übernommen werden?

lieber nicht auf SysListView32 basieren, das an sich nicht schnell ist, sondern ein eigenes Element zum Rendern haben, aber mit allen "Reizen" der Implementierung von Scrollen, Sortieren usw. Eine weitere Frage - ist es so notwendig, wenn die Arbeit in dieser Form? und dann schalten Sie es für den Zeitraum der Arbeit wäre eine Option, um dieses Problem zu beheben (wenn es ein Problem ist)

 
Fehlender Eigenschaftscache für grafische Objekte gefunden.
#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 для удаленного объекта!
}


Ergebnis.

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


Das ist sehr teuer und außerdem ein Fehler in der ObjectSet-Funktion.

Suchbegriff: Oshibka 026.

 
fxsaber:

Und auch ein ObjectSet-Funktionsfehler.

Suchbegriff: Oshibka 026.

Objektbehandlung asynchron

 
Andrey Khatimlianskii:

Objektbehandlung ist asynchron

Es hat sich herausgestellt, dass ObjectSet immer true zurückgeben muss.

 
fxsaber:

Es hat sich herausgestellt, dass ObjectSet immer true zurückgeben muss.

Lesen Sie die Hilfe:

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

Zurückgegebener Wert

Gibt nur dann true zurück, wenn der Befehl zum Ändern der Eigenschaften des Grafikobjekts erfolgreich an die Grafik gesendet wurde; andernfalls wird false zurückgegeben. Um weitere Informationen über den Fehler zu erhalten, rufen Sie GetLastError() auf.


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

Es hat sich herausgestellt, dass ObjectSet immer true zurückgeben muss.

Mit Logik kann ich nicht zu demselben Schluss kommen.

 
Andrey Khatimlianskii:

Anton:

false - nur wenn die ChartID falsch ist. Mit eigener ChartID (Null) ist es immer wahr.

Man muss sich schon sehr anstrengen, um etwas Falsches zu verursachen.