Bibliotheken: MT4Orders - Seite 77

 
Aleksey Vyazmikin Nachdem ich mich mit GetLastError beschäftigt habe, bin ich zu dem Schluss gekommen, dass es nicht sinnvoll ist, es zu ergänzen.
// Liste ändern:
// 08.02.2017:
// Hinzufügen: Variablen MT4ORDERS::LastTradeRequest und MT4ORDERS::LastTradeResult содержат соответствующие данные MT5-OrderSend.

Jetzt ist es möglich, alle MT5-OrderSend-Daten vollständig zu erhalten.

Print(MT4ORDERS::LastTradeResult.retcode); // Rückgabecode der Operation
Print(MT4ORDERS::LastTradeResult.retcode_external); // Rückgabecode eines externen Handelssystems 

MT5-Codes selbst sind hier. Vergleichen Sie mit MT4-Codes.


Bitte beachten Sie, dass GetLastError() im MT5 keine Handelsfehler zurückgibt. Wenn Sie also wie in MT4 vorgehen wollen, müssen Sie Ihren eigenen entsprechenden Fehler über SetUserError erzeugen. Aber auch hier wird ERR_USER_ERROR_FIRST Ihnen nicht die MT4-Version liefern.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Bibliotheken: MT4Orders

fxsaber, 2022.07.20 00:39

// Liste ändern:
// 20.07.2022
// Hinzufügen: OrderLotsOpen() hinzugefügt - volle Position/Auftragsvolumen vor dem Schließen/Löschen. Funktioniert nur im ByPass-Modus korrekt.

Beispiel.

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Maximale Wartezeit (in µs) für die Synchronisierung der Handelsumgebung
#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

#define  PRINT(A) Print(#A + " = " + (string)(A) + "\n")


void OnStart()
{
  const ulong Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0); // Eröffnet eine Position für ein Los.

  for (int i = 1; i <= 4; i++)    
    if (OrderSelect(Ticket, SELECT_BY_TICKET) && !OrderCloseTime())
    {
      OrderClose(OrderTicket(), 0.1 * i, OrderClosePrice(), 0); // Schließen bei 0,1, 0,2, 0,3, ... Lose.
      
      if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
      {
        OrderPrint();
        
        PRINT(OrderLotsOpen()); // Positionsvolumen vor dem entsprechenden Schlusskurs. Es wird aus der Handelshistorie entnommen.
      }
    }
}


Ergebnis.

#50167020751 2022.07.20 09:58:58.401 buy 0.10 EURUSD 1.02471 0.00000 0.00000 2022.07.20 09:58:58.457 1.02468 0.00 0.00 -0.29 0
OrderLotsOpen() = 1.0

#50167020753 2022.07.20 09:58:58.401 buy 0.20 EURUSD 1.02471 0.00000 0.00000 2022.07.20 09:58:58.512 1.02468 0.00 0.00 -0.59 0
OrderLotsOpen() = 0.9

#50167020754 2022.07.20 09:58:58.401 buy 0.30 EURUSD 1.02471 0.00000 0.00000 2022.07.20 09:58:58.567 1.02468 0.00 0.00 -0.88 0
OrderLotsOpen() = 0.7

#50167020755 2022.07.20 09:58:58.401 buy 0.40 EURUSD 1.02471 0.00000 0.00000 2022.07.20 09:58:58.622 1.02468 0.00 0.00 -1.17 0
OrderLotsOpen() = 0.4
 

Besonderheit der Darstellung von geschlossenen Positionen durch die Bibliothek im Vergleich zu MT5.


Handelssituation.

  1. BuyLimit wurde für 1 Lot eröffnet.
  2. BuyLimit wurde um 12:00 Uhr teilweise für 0,4 Lots ausgeführt.
  3. Die Position für 0,4 Lots wurde um 13:00 Uhr geschlossen.
  4. Der Rest des BuyLimit wurde ausgeführt - 0,6 Lots um 14:00 Uhr.
  5. Die 0,6-Lot-Position wurde um 15:00 Uhr geschlossen.

MT5 zeigt an, dass es eine Position gab, die um 12:00 Uhr eröffnet und um 15:00 Uhr geschlossen wurde. Die Eröffnungs-/Schließungspreise dieser Position können sehr seltsam sein.


MT4Orders zeigt an, dass es zwei Positionen gab: eine, die um 12:00 Uhr eröffnet und um 13:00 Uhr geschlossen wurde, und eine, die um 14:00-15:00 Uhr eröffnet wurde. Die Eröffnungs-/Schlusskurse werden angemessen sein.

 
fxsaber #:

Ein Teil von MT5-Market ist mit dieser Bibliothek geschrieben. Der Hauptgrund ist die Benutzerfreundlichkeit.

Ja, es ist eine Errungenschaft. Die Fehlerprüfung bei der Marktannahme stellt jedoch nicht alle Situationen nach.

fxsaber #:

Zum Thema Fehler.

MT5 Codes selbst sind hier. Vergleiche mit MT4-Codes.


Bitte beachten Sie, dass GetLastError() im MT5 keine Handelsfehler zurückgibt. Wenn Sie also wie in MT4 vorgehen wollen, müssen Sie Ihren eigenen entsprechenden Fehler über SetUserError erzeugen. Aber auch hier wird ERR_USER_ERROR_FIRST Ihnen nicht die MT4-Version liefern.

Danke für die Informationen, ich bin selbst nicht sehr gut darin.

Verstehe ich das richtig, dass es ausreicht, die

int er=GetLastError();

zu

int er=MT4ORDERS::LastTradeResult.retcode_external;

zu ersetzen und bereits neue Fehlercodes zu verarbeiten?

Übrigens, ich habe keine Analoga von Fehlern für MT5 gefunden, in MT4 sind sie: 135, 145, 146 - gibt es welche?

 
Aleksey Vyazmikin #:

Ja, das ist eine Errungenschaft. Die Fehlerprüfung bei der Zulassung zu einem Marktsegment kann jedoch nicht alle Situationen nachbilden.

Leider habe ich nur theoretische Vorstellungen über den Markt. Ich habe keine Praxis, um die Prüfungen zu bestehen.

Verstehe ich das richtig, dass es genügt, neue Fehlercodes zu ersetzen und bereits zu verarbeiten?

Korrekt. Nur Retcode. Das Analogon von ResetLastError ist das gleiche Schema - Zuweisung von Null.

Übrigens, ich habe keine Analoga von Fehlern für MT5 gefunden, in MT4 sind sie: 135, 145, 146 - gibt es welche?

Ich kenne die Fehlertypen überhaupt nicht, da ich sie nicht in Expert Advisors verwende. Wahrscheinlich sollten Sie versuchen, jeden Fehler in MT4 zu reproduzieren und dann eine klare Vorstellung von ihrer Art zu bekommen und sie mit ähnlichen Fehlern in MT5 zu vergleichen. Vielleicht gibt es bereits irgendwo Tabellen mit Entsprechungen. Es ist keine Tatsache, dass alle Codes Namensvettern in einer anderen Plattform haben.

 
fxsaber #:

Das ist richtig. Nur Retcode. Ein Analogon von ResetLastError im gleichen Schema - Zuweisung von Null.

Kann man den Fehler-Reset also irgendwie in seine Klasse integrieren? Denn die vierte Klasse hat es irgendwie nicht gebraucht.

Oder reicht es aus, die Information über den letzten Fehler abzurufen und dann gleich wieder zurückzusetzen, also die Funktionen in deinem Beispiel zu vertauschen?

fxsaber #:

Ich kenne die Fehlertypen überhaupt nicht, da ich sie nicht in Expert Advisors im Kampf verwende. Wahrscheinlich sollten Sie versuchen, jeden Fehler in MT4 zu reproduzieren und dann eine klare Vorstellung von ihrer Art zu bekommen und sie mit ähnlichen Fehlern in MT5 zu vergleichen. Vielleicht gibt es bereits irgendwo Tabellen mit Entsprechungen. Es ist nicht so, dass alle Codes ihre Namensvettern in einer anderen Plattform haben.

Ich habe nach einer solchen Tabelle gesucht und sie nicht gefunden. Fehler liegen nicht immer im Code - es gibt auch Probleme auf der Seite des Maklerbüros.

Ich habe verstanden, dass, wenn das Problem in irgendeiner Form mit der Arbeit mit Aufträgen ist, dann GetLastError(); gibt den Code 4756, die nicht schlecht ist, wenn ja.

 
Aleksey Vyazmikin #:

Kann das Zurücksetzen von Fehlern in Ihren Unterricht integriert werden? Ich meine, 4 schien es nicht zu brauchen.

Oder reicht es aus, die Information über den letzten Fehler abzurufen und dann gleich zurückzusetzen, also die Funktionen in deinem Beispiel zu vertauschen?

Ich sehe nicht die Notwendigkeit, sie zurückzusetzen. Ich sagte, für zusätzliche Kompatibilität mit der Art und Weise, wie ich annehme, dass MT4 funktioniert.

 
fxsaber #:

Ich sehe nicht die Notwendigkeit, zurückzusetzen. Sagte für zusätzliche Kompatibilität mit der Art und Weise, die ich annehmen, MT4 funktioniert.

Ich brauche noch zu klären, sind diese Fehler unter dem aufgerufenen Code?

Print(MT4ORDERS::LastTradeResult.retcode); // Rückgabecode der Operation

Weil ähnliche Dinge - was benötigt wird, verstehe ich nicht - der gleiche Code unten gibt Fehler aus der MqlTradeResult-Struktur?

Print(MT4ORDERS::LastTradeResult.retcode_external); // Rückgabecode eines externen Handelssystems 
 
Aleksey Vyazmikin #:

Ich werde noch zu klären, sind diese Fehler, was unten genannt Code?

Weil ähnliche Dinge - was benötigt wird, verstehe ich nicht - der gleiche Code unten gibt Fehler aus der MqlTradeResult-Struktur?

retcode - MT5-Fehler. retcode_external - ein Feld, das optional durch den Entwickler einer Drittanbieter-Brücke ausgefüllt werden kann.

 
fxsaber #:

retcode - MT5-Fehler. retcode_external - ein Feld, das optional vom Entwickler einer Bridge eines Drittanbieters ausgefüllt werden kann.

Verstanden, danke. Ich denke, dass die Standardwerte für den Moment ausreichen werden.