Einer der beliebtesten Broker hat einen Teil der Handelshistorie aus allen Handelskonten seiner Kunden entfernt. Daher sind viele Benutzer darauf gestoßen, dass die Bibliothek Warnungen aufgrund einer falschen Historie auf dem Handelsserver ausgibt.
Dieses Problem wurde in der neuesten Version behoben.
Laden Sie die neueste Version der Bibliothek von der russischsprachigen Seite herunter.
In MT4 führt das Schließen von 0,01 Lots einer 0,1-Lot-Order dazu, dass das ursprüngliche Ticket mit einer Größe von 0,01 Lots geschlossen wird und der Orderkommentar dieser teilweise geschlossenen Order sich in "to: xxxxxx" ändert. Gleichzeitig wird ein neuer Auftrag mit 0,09 Lots eröffnet, dessen Kommentar auf "von: xxxxxx" gesetzt wird.
Das scheint in MT5 nicht zu passieren (zumindest listet OrdersToString() keinen Orderkommentar für die offenen oder geschlossenen Teile auf), so dass ich die Kette der teilweisen Schließungen nicht verfolgen kann, wie ich es normalerweise tun würde.
Haben Sie einen Schnipsel von MT4Orders-kompatiblen Code, den Sie teilen können, oder können Sie erklären, wie ich es zuverlässig tun kann?
SysFX Orderkommentar dieser teilweise geschlossenen Order sich in "to: xxxxxx" ändert. Gleichzeitig wird ein neuer Auftrag mit einer Größe von 0,09 Lots eröffnet, dessen Kommentar auf "von: xxxxxx" gesetzt wird.
Das scheint in MT5 nicht zu passieren (zumindest listet OrdersToString() keinen Orderkommentar für die offenen oder geschlossenen Teile auf), so dass ich die Kette der Teilschließungen nicht verfolgen kann, wie ich es normalerweise tun würde.
Haben Sie einen Schnipsel von MT4Orders-kompatiblen Code, den Sie teilen können, oder können Sie erklären, wie ich es zuverlässig tun kann?
// Liste ändern:// 28.12.2021// Fix: OrderSelect(Index, SELECT_BY_POS, MODE_TRADES) berücksichtigt eine weitere Unsynchronisation auf der MT5-Seite.// Fix: OrderLots(true) berücksichtigt eine weitere MT5-seitige Fehlsynchronisation.
Vor allem die erste Änderung in der Liste der Änderungen ermöglichte es, die beiden Logiken identisch zu machen.
In MT4Orders ändert sich die Indizierung der Ordertabelle in einer bestimmten Situation. Dies geschieht, wenn eine MT5-Moret-Order zu einer MT5-Position wird. Wenn Sie versuchen, diese Situation auf einigen Servern anzutreffen, können Sie einen Buchungsfehler erhalten. Ich habe dazu eine Demonstration geschrieben.
#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)
double GetLots()
{
double Lots = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) // Führen Sie alle Aufträge aus - hier kann es zu einer Störung kommen.if (OrderSelect(i, SELECT_BY_POS))
Lots += OrderLots();
return(NormalizeDouble(Lots, 2));
}
voidOnStart()
{
MT4ORDERS::OrderSend_MaxPause = 0; // Ablehnung der eingebauten MT5-OrderSend-Ergebniskorrektur.constdouble NewLots = 0.11;
while (!IsStopped())
{
constdouble Lots = NormalizeDouble(GetLots() + NewLots, 2); // Wie viele Lose sollen nach einer Bestellung insgesamt vorhanden sein.const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, NewLots, Ask, 0, 0 ,0); // Es wurde ein Marktauftrag erteilt.if (Ticket != -1)
{
while (!PositionSelectByTicket(Ticket)) // Warten Sie darauf, dass der Marktauftrag in eine Position umgewandelt wird.
{
constdouble Lots2 = GetLots(); // Berechnen Sie das Gesamtvolumen.if (Lots2 != Lots) // Gesamtvolumen stimmt nicht mit der vorläufigen Berechnung überein - Ausgabe.Alert((string)Lots + " " + (string)Lots2);
}
}
if (OrderSelect(Ticket, SELECT_BY_TICKET) &&
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0)) // Senden Sie einen Marktauftrag, um die Position zu schließen.while (PositionSelectByTicket(Ticket)) // Warten auf die Schließung der Position.
;
}
Print(MT4ORDERS::ByPass.ToString()); // Drucken Sie die Synchronisationsstatistiken.
}
Solch ein EA wird auf einigen Konfigurationen funktionieren. Der ByPass-Modus macht die Alert-Werte stabil, beseitigt sie aber immer noch nicht.
Ich selbst handele nicht ohne ByPass-Modus, weil es eine sehr starke Sache ist, MT5-Überraschungen zu umgehen. Ich handele auch nicht ohne Snapshots. Es ist der Snapshot-Mechanismus, der es Ihnen ermöglicht, sich von Überindizierungen zu befreien.
So sieht es bei demselben Beispiel aus.
#define VIRTUAL_SNAPSHOT_REFRESHTIME 1000// Snapshot-Lebensdauer für die Aktualisierung. In MT5 erfordert verbunden MT4Orders.mqh#define VIRTUAL_SNAPSHOT_WITHOUT_HISTORY // Verwerfen des historischen Schnappschusses für bessere Leistung#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/de/code/22577double GetLots()
{
double Lots = 0;
VIRTUAL::Snapshot(0, -1, false, ""); // Zasnepsholy realen Handelsumgebung.for (int i = OrdersTotal() - 1; i >= 0; i--) // Aufgrund des Snapshot-Mechanismus alle Aufträge sicher ausführen.if (OrderSelect(i, SELECT_BY_POS))
Lots += OrderLots();
VIRTUAL::SnapshotDelete(); // Entfernter Schnappschuss.return(NormalizeDouble(Lots, 2));
}
Ich empfehle das ByPass+Snapshot-Paket. Es hilft nicht nur, Fallstricke zu umgehen, sondern reduziert auch den Verbrauch von Rechenressourcen erheblich. Vor allem, wenn es viele Aufträge/Berater in mehreren Währungen gibt.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Die neueste Version ist immer hier.
Einer der beliebtesten Broker hat einen Teil der Handelshistorie aus allen Handelskonten seiner Kunden entfernt. Daher sind viele Benutzer darauf gestoßen, dass die Bibliothek Warnungen aufgrund einer falschen Historie auf dem Handelsserver ausgibt.
Dieses Problem wurde in der neuesten Version behoben.
Laden Sie die neueste Version der Bibliothek von der russischsprachigen Seite herunter.
MT5 baut nicht auf alten Versionen auf.
Und die letzte Release-Version ist fehlerhaft https://www.mql5.com/ru/forum/380278/page31#comment_26286913
Es kann nicht auf ältere Versionen von MT5 aufgebaut werden.
Ich kompiliere auf neuen Versionen und verwende es auf b2958. Ich behandle Release-Builds auf die gleiche Weise wie Betas.
Ich habe eine kurze Frage zu Teilschließungen.
In MT4 führt das Schließen von 0,01 Lots einer 0,1-Lot-Order dazu, dass das ursprüngliche Ticket mit einer Größe von 0,01 Lots geschlossen wird und der Orderkommentar dieser teilweise geschlossenen Order sich in "to: xxxxxx" ändert. Gleichzeitig wird ein neuer Auftrag mit 0,09 Lots eröffnet, dessen Kommentar auf "von: xxxxxx" gesetzt wird.
Das scheint in MT5 nicht zu passieren (zumindest listet OrdersToString() keinen Orderkommentar für die offenen oder geschlossenen Teile auf), so dass ich die Kette der teilweisen Schließungen nicht verfolgen kann, wie ich es normalerweise tun würde.
Haben Sie einen Schnipsel von MT4Orders-kompatiblen Code, den Sie teilen können, oder können Sie erklären, wie ich es zuverlässig tun kann?
Wie kann man die teilweise Ausführung von offenen Positionenanzeigen.
Ergebnis.
Das scheint in MT5 nicht zu passieren (zumindest listet OrdersToString() keinen Orderkommentar für die offenen oder geschlossenen Teile auf), so dass ich die Kette der Teilschließungen nicht verfolgen kann, wie ich es normalerweise tun würde.
Haben Sie einen Schnipsel von MT4Orders-kompatiblen Code, den Sie teilen können, oder können Sie erklären, wie ich es zuverlässig tun kann?
Beispiel.
Beispiel.
Das ist perfekt! ...danke für die schnelle Antwort :)
Vor allem die erste Änderung in der Liste der Änderungen ermöglichte es, die beiden Logiken identisch zu machen.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: MT4Orders
fxsaber, 2021.05.12 18:24
Auf den ersten Blick sollten diese beiden Codes das gleiche Ergebnis liefern.
Tatsächlich ist das aber nicht so. Versuchen Sie, den Grund zu erkennen.
Im Allgemeinen hat sich herausgestellt, dass es sogar besser ist, sich gegen die Besonderheiten der Orderhindernisse im MT5 zu schützen.
In MT4 ist beim Abrufen von Aufträgen ein Backtracking (Doppelzählung) möglich, da die Auftragstabelle wackelt.
In MT4Orders ändert sich die Indizierung der Ordertabelle in einer bestimmten Situation. Dies geschieht, wenn eine MT5-Moret-Order zu einer MT5-Position wird. Wenn Sie versuchen, diese Situation auf einigen Servern anzutreffen, können Sie einen Buchungsfehler erhalten. Ich habe dazu eine Demonstration geschrieben.
Solch ein EA wird auf einigen Konfigurationen funktionieren. Der ByPass-Modus macht die Alert-Werte stabil, beseitigt sie aber immer noch nicht.
Ich selbst handele nicht ohne ByPass-Modus, weil es eine sehr starke Sache ist, MT5-Überraschungen zu umgehen. Ich handele auch nicht ohne Snapshots. Es ist der Snapshot-Mechanismus, der es Ihnen ermöglicht, sich von Überindizierungen zu befreien.
So sieht es bei demselben Beispiel aus.
Ich empfehle das ByPass+Snapshot-Paket. Es hilft nicht nur, Fallstricke zu umgehen, sondern reduziert auch den Verbrauch von Rechenressourcen erheblich. Vor allem, wenn es viele Aufträge/Berater in mehreren Währungen gibt.