Bibliotheken: MT4Orders - Seite 44

 

Und noch eine:

2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      0 - 1532297: 00:00:14.989
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      1 - 1528006: 00:00:04.983
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      2 - 1527412: 00:00:03.543
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      3 - 1528097: 00:00:01.812
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      4 - 1478424: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      5 - 1478368: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      6 - 1478410: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      7 - 1478344: 00:00:01.501
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      8 - 1733682: 00:00:01.480
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      9 - 737378: 00:00:00.346
 
Andrey Khatimlianskii:

So real ist das:

Danke für die Information. Diese lange Ausführung ist wahrscheinlich auf die Gateways von Drittanbietern zurückzuführen. Ich frage mich, wie es den Börsen geht.

 
Auf MT4 habe ich einen Alert für diese Situation geschrieben. Ich brauchte, um zu überprüfen, wie teuer eine solche Prüfung wäre, so schrieb ich eine harte Variante zu messen.
#include <MT4Orders.mqh>
#include <Debug.mqh>

// Holt alle Tickets aus der Historie.
void GetTickets( TICKET_TYPE &Tickets[] )
{
  for (int i = ArrayResize(Tickets, OrdersHistoryTotal()) - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Tickets[i] = OrderTicket();
}

// Wählen Sie alle Tickets aus der Historie aus.
int CheckTickets( const TICKET_TYPE &Tickets[] )
{
  int Count = 0;
  
  for (int i = ArraySize(Tickets) - 1; i >= 0; i--)
    if (OrderSelect(Tickets[i], SELECT_BY_TICKET))
      Count++;
      
  return(Count);
}

void OnStart()
{
  TICKET_TYPE Tickets[];
  
  GetTickets(Tickets); // Ich habe die Tickets.
  
  ArraySort(Tickets);
  
  BENCH(CheckTickets(Tickets)); // Überprüft die Tickets.
  
  _P2(CheckTickets(Tickets));
}


Dies ist das Ergebnis auf MT4.

Time[CheckTickets(Tickets)] = 9667
CheckTickets(Tickets) = 20240

20K Tickets in 10 ms.


Auf MT5.

Time[CheckTickets(Tickets)] = 5262
CheckTickets(Tickets) = 833

5K MT4-Tickets in 0,8ms.


Time[CheckTickets(Tickets)] = 700707
СheckTickets(Tickets) = 170458

170K MT4-Tickets für 700 ms.


MT5 ist schneller als MT4 mit einer relativ kleinen Handelshistorie. Mit einer großen Geschichte (Hunderttausende von Datensätzen) MT5 verlangsamt eine Menge.

 

Ein interessanter Fall von MT5.

Der Take wurde teilweise ausgeführt, danach wurde er gelöscht. In diesem Fall haben wir die Situation, dass DEAL_ORDER den Status ORDER_STATE_CANCELED hat, nicht FILLED/PARTIAL.

In diesem Fall ist DEAL_TIME_MSC nicht gleich ORDER_TIME_DONE_MSC.

 
fxsaber:

DEAL_TIME_MSC ist nicht gleich ORDER_TIME_DONE_MSC.

Dies geschieht bei teilweiser Ausführung von Limitern.


 

Krawatte ablehnen.

Diese Situation kann häufig auftreten:

  1. Der Preis hat den Take Profit einer offenen Position erreicht.
  2. MT5 hat eine Market Order generiert. Die entsprechende Limit-Order wurde an den Liquiditätsanbieter gesendet.
  3. Die Limit-Order wird erneut registriert. Dann wird die MT5-Order, die dem Take entspricht, gelöscht.
  4. Wir wechseln zu Punkt 1.
Gute Umsetzung, denn in der Historie kann man die Ablehnungen der Anbieter sehen. Nun, und erzwungene interne Implementierung von Tiers als Limiters.
 
fxsaber:
  1. Der Kurs hat den Take Profit der offenen Position erreicht.
  2. MT5 hat eine Market Order generiert. Die entsprechende Limit-Order wurde an den Liquiditätsanbieter gesendet.
  3. Die Limit-Order wird erneut registriert. Dann wird die MT5-Order, die dem Take entspricht, gelöscht.
  4. Wechseln Sie zu Punkt 1.
Gute Implementierung, denn in der Historie können Sie die Ablehnungen der Anbieter sehen. Nun, und erzwungene interne Implementierung von Tiers als Limiters.

Wo sind die Begrenzer?

Inwiefern ist diese Implementierung besser als das Senden eines Takes als Limit sofort zum Zeitpunkt seiner Einstellung? Die Auswahl des LP mit dem besten Preis?

 
Andrey Khatimlianskii:

Wo sind hier die Begrenzer?

MT5 zeigt Taker immer in Form von Markdowns an.

Was ist an dieser Umsetzung besser, als einen Take als Limit sofort im Moment seiner Einstellung zu senden? Die Auswahl des LP mit dem besten Preis?

Ja, denn es handelt sich nicht um eine Börse, sondern um eine Aggregation.

 
fxsaber:

MT5 zeigt die Takes immer als Festzelte an.

Für wen werden sie angezeigt?

Gibt es kein Server-Plugin, um TPs als Limits anzuzeigen?


fxsaber:

Ja, denn es handelt sich nicht um eine Börse, sondern um eine Aggregation.

Ich würde diese Behauptung überprüfen.

Der Einstieg wird mit einem Marktplatz nicht profitabler, weil er ein Aggregat ist, oder?

 
Andrey Khatimlianskii:

Wen vorführen?

Dem Kunden.

Gibt es nicht ein serverseitiges Plugin, um TPs als Limits anzuzeigen?

Dritte Partei.

Ich würde diese Behauptung überprüfen.

Der Einstieg wird mit einem Marktplatz nicht rentabler, weil er eine Aggregation ist, oder?

So wird ein Limit-Feed mit einem sehr kurzen Verfall gesendet.