MT5 und Geschwindigkeit in Aktion - Seite 27

 
fxsaber:

Welches Terminal verbraucht Ihrer Meinung nach mehr CPU?

2 und hier ist der Grund dafür

 
fxsaber:

Um die CPU zu entlasten, empfehle ich, alle Unterfenster des Terminals (Market Watch, Navigator, Tools usw.) zu schließen, alle Charts zu minimieren und das Terminal selbst zu minimieren.

Entfernen Sie alle nicht verwendeten Symbole aus dem Market Watch. Dies ist besonders wichtig für VPS.


Ich schlage vor, diese Aktionen irgendwie zu automatisieren. Bevor Sie Ihren VPS verlassen, drücken Sie auf und gehen Sie. Wenn man reinkommt - die Presse, sieht man alles.

Ich sage schon seit langem, dass die Algotrader eine andere Version des Terminals brauchen, ohne dieses ganze Tuning!

Zusätzlich zu all den oben genannten habe ich für jeden EA einen neuen hinzugefügt:

ChartSetInteger(0,CHART_SHOW,false);

Immer noch Verzögerungen :(

 
A100:

Das 2. und das ist der Grund dafür.

Ja, die zweite.

 
Wie ist SymbolInfoTick aufgebaut? Es ist unverständlich, warum sie mehrere Dutzend Millisekunden lang laufen kann.
 

Der b2560 verliert im Vergleich zum b2592 enorm an Leistung. Wir warten darauf, dass der Fehler behoben wird.

Der Thread hat sich als nützlich erwiesen.

 
fxsaber:

Der b2560 verliert im Vergleich zum b2592 enorm an Leistung. Wartet auf Fehlerbehebung.

b2593 wurde behoben. Ich danke Ihnen!

 
Das Hinzufügen des Auftrags/Handels zur Handelshistorie führt zu einer vollständigen Neuerstellung des HistorySelect-Caches, nicht zu einer teilweisen Neuerstellung. Daher kommt es zu Verzögerungen bei der Auslösung von Aufträgen.
// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}

Ergebnis.
2020.09.08 20:23:32.103 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:23:32.239 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:31:59.863 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 9 ms.
2020.09.08 20:32:00.845 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:32:01.856 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 4 ms.
2020.09.08 20:32:02.846 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 7 ms.


Warum das wichtig ist. Stellen wir uns vor, dass ein HFT-Roboter im Einsatz ist. Auf demselben Konto wird ein Handel von Hand ausgeführt. Das ist alles, der HFT-Roboter hat den HistorySelect-Cache mit den entsprechenden Konsequenzen gelöscht. Die Geschichte des HFT-Roboters besteht natürlich nicht aus 10.000 Aufträgen/Geschäften, sondern aus viel mehr. Es wäre teuer, den gesamten Cache für eine solche Geschichte neu zu erstellen. Deshalb ist es logisch, sie hinzuzufügen.


Es ist klar, dass der manuelle Handel die Roboter nicht bremsen sollte. Beim reinen algorithmischen Handel tritt das Problem auf, wenn die Aufträge ausgelöst werden.

 

Die Funktionen, die es ermöglichen, vollständige Schnappschüsse (Arrays von Strukturen) der aktuellen Handelsumgebung (Positionen und Aufträge) zu erstellen, fehlen weitgehend.

Eine Variante über die Funktionen Position* und Order* verursacht Kollisionen (aktiver Handel), wenn diese beiden Listen in der Schleife übergeben werden. Irgendetwas ist verloren gegangen oder nicht verbucht worden.

Sofortige vollständige Schnappschüsse würden diese Probleme vermeiden.


ZZY Vollständige Schnappschüsse für Market Watch - die Relevanz kann noch nicht beurteilt werden. Annäherung von MT5 an HFT (LCI).

 

Verwaltet (nicht absichtlich), um das Terminal (und keines) in einen Zustand zu bringen, in dem die CPU zu 100% ausgelastet ist und die OrderSend-Wartezeit über eine Sekunde beträgt.

Wahrscheinlich wird es nicht einfach sein, die Ursache zu finden.


ZZY Es scheint, dass solche Bremsen durch eine ähnliche Konstruktion verursacht werden.

void OnTrade()
{
  OnTick();
}

Ich habe es nicht geschafft, einen Code zu erstellen, um das Problem zu reproduzieren.


Tatsächlich ist es möglich, das Terminal in einen Zustand zu versetzen, in dem Handelsaufträge innerhalb von Sekunden (Terminal-Log) mit einem Ping von 50 ms ausgeführt werden. Sobald die EAs entfernt sind, werden die Handelsaufträge innerhalb von 100 ms ausgeführt.

 
fxsaber:

Die Funktionen, die es ermöglichen, vollständige Schnappschüsse (Arrays von Strukturen) der aktuellen Handelsumgebung (Positionen und Aufträge) zu erstellen, fehlen weitgehend.

Eine Variante über die Funktionen Position* und Order* verursacht Kollisionen (aktiver Handel), wenn diese beiden Listen in der Schleife übergeben werden. Irgendetwas ist verloren gegangen oder nicht verbucht worden.

Sofortige vollständige Schnappschüsse würden diese Probleme vermeiden.


ZZY Vollständige Schnappschüsse für Market Watch - die Relevanz kann noch nicht beurteilt werden. Annäherung von MT5 an HFT (LCHI).

Und Vollzeitfunktionen zur Verfolgung der Auftrags-Transaktions-Position nach Ticket und rückwärts nach Ticketposition, um zu verstehen, was der Auftrag war und die Bedingungen der Transaktion. Die Verfolgung nach dem Status der Geschichte ist eine böse Realität.

Die Vollklick-Umgebung ist cool, aber offenbar teuer und nicht oft notwendig. obwohl, wenn der Markt zusammenbricht))))

Ich selbst teile einen Auftrag und einen Auftrag. Ein Auftrag zur Ausführung eines Auftrags ist ein schwebender Auftrag. Der Marktauftrag ist verwirrend.

Beurteilen Sie nicht ausschließlich nach der Meinung von Laien.