Bibliotheken: MT4Orders - Seite 60

 
// Liste ändern:
// 04.05.2021
// Fix: MT5-Ordereröffnungen, die nicht verschwinden, werden nicht mehr als MT4-Order aufgeführt.
// Fix: MT5-Aufträge vom Typ CloseBy werden nicht mehr als MT4-Aufträge aufgeführt.

Eine weitere MT5-Funktion (ein vollständig ausgeführter Auftrag und die durch ihn erzeugte Position können zusammen existieren) wird durch die Bibliothek umgangen.

Wieder einmal musste ich in die wilden Gefilde des MT5 eintauchen, um eine Lösung zu finden. Das Update ist in der Tat ein wichtiges. Auch wenn es nicht offensichtlich ist.


ZЫ Ich versuche, eine Drittanbieterlösung für eine andere sehr unangenehme Funktion von MT5 zu finden.

 
Vitaly Muzichenko:

Warum so traurig?

Wenn Sie die Datei von der KB herunterladen, sollte es in Ordnung sein.

 
Vitaly Muzichenko:

Warum so traurig?


Gemeldet an https://www.mql5.com/ru/forum/1111/page3003#comment_21981258, aber es sieht so aus, als ob es immer noch da ist. Aber es betrifft nur die Anzeige. Wenn Sie auf eine Datei klicken und sie herunterladen, ist alles in Ordnung.

 
traveller00:

Gemeldet an https://www.mql5.com/ru/forum/1111/page3003#comment_21981258, aber es sieht so aus, als ob es immer noch da ist. Aber es betrifft nur die Anzeige. Wenn Sie auf eine Datei klicken und sie herunterladen, ist alles normal.

Vielen Dank für den Hinweis! Ja, so wird es gut angezeigt.

 

Dies ist eine interessante Besonderheit des MT4-Stils, deshalb schreibe ich hier und nicht im Profil-Thread.


Auf den ersten Blick sollten diese beiden Codes das gleiche Ergebnis liefern.

while (OrdersTotal() <= 1)
  if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
  else
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    


while (OrdersTotal() <= 1)
  if (!OrdersTotal())
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    
  else if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);


Tatsächlich ist das aber nicht so. Versuchen Sie, den Grund zu erkennen.

Особенности языка mql4, тонкости и приёмы работы
Особенности языка mql4, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql4, примеры решения тех, или иных задач...
 
// Liste ändern:
// 12.05.2021
// Hinzufügen: Das Makro MT4ORDERS_BYPASS_MAXTIME behebt die ständig auftretenden Fehlsynchronisationen in der Handelsumgebung von MT5.

Bahnbrechendes Bibliotheks-Update! Die einzige Bibliothek der Welt, die in der Lage ist, die ständigen Fehlsynchronisationen der MT5-Handelsumgebung auszugleichen. Bescheiden, aber wahr.


Sie müssen nur ein entsprechendes Makro schreiben. Hier ist ein Beispiel.

// Demonstration der ENTSCHEIDUNG zur Eröffnung einer Doppelposition im MT5.
// https://www.mql5.com/ru/forum/368178/page13#comment_22171524

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Maximale Wartezeit (in µs) für die Synchronisierung der Handelsumgebung
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define  MinLot SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN)

void OnStart()
{
  MT4ORDERS::OrderSend_MaxPause = 0; // Ablehnung der eingebauten MT5-OrderSend-Ergebniskorrektur.
  
  while (!IsStopped() && OrdersTotal() <= 1)
    if (!OrdersTotal())
      OrderSend(_Symbol, OP_BUY, MinLot, Ask, 0, 0, 0);    
    else if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    
  Print(MT4ORDERS::ByPass.ToString()); // Drucken Sie die Synchronisationsstatistiken.
}


Dieses Skript öffnet und schließt Positionen abwechselnd. Es stoppt nur im Falle einer Positionsumkehr(ein häufiges MT5-Problem) - Bibliotheksfehler. Wenn jemand auf ein solches Problem stößt, lassen Sie mich bitte wissen.


Für mich ist dieses Bibliotheksupdate ein Muss. Empfohlen.


ZY Der Synchronisationsmechanismus ist sehr schnell.

Amount = 126/247 = 51.01%, Time(mcs) = 983/9915 = 9.91%, TimeAvg = 40 mcs, MaxInterval = 2483 mcs.
Der Mechanismus wurde 247 Mal (9915 µs.) aufgerufen, wovon 126(983 µs. ) unsynchronisiert waren. Die durchschnittliche Zeit des Mechanismus beträgt 40 µs. Das Maximum liegt bei 2483 µs.
 
Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

Fehler gefunden:

Die Funktion OrderOpenReason() gibt (ENUM_DEAL_REASON)DEAL_REASON_TP für Aufträge zurück, die mit Gewinnmitnahme geschlossen wurden.

 
fxsaber:
#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Maximale Wartezeit (in µs) für die Synchronisierung der Handelsumgebung

Vielen Dank für das Update!

Was passiert, wenn diese Sekunde verstrichen ist? Funktioniert es auch ohne Synchronisierung weiter?


fxsaber:
MT4ORDERS::OrderSend_MaxPause = 0; // Ablehnung der eingebauten MT5-OrderSend-Ergebniskorrektur.

Muss dies bei Kampfrobotern vorgeschrieben werden?

 
Andrey Khatimlianskii:

Was geschieht nach Ablauf dieser Sekunde? Wird der Vorgang fortgesetzt, wenn keine Synchronisierung stattfindet?

Oder reicht es aus, MT4ORDERS::ByPass.Is() vor den Handelsoperationen zu prüfen (um sicherzustellen, dass keine Unsynchronisierung vorliegt)?