Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: MT4Orders
fxsaber, 2021.06.02 10:09
Auf meine Bitte hin, hat die MetaQutoes das letzte Update der Bibliothek komplett ins Englische lokalisiert. Der neueste Build der Bibliothek ist nun auf der englischen Seite verfügbar, mit ins Englische übersetzten Kommentaren im Quellcode.
Dies unterscheidet sich von der vorherigen Version, die auf der englischsprachigen Seite verfügbar war.
Ich empfehle die Verwendung der neuesten Version zusammen mit dem Synchronisationsmechanismus. Dann werden alle Probleme, die keine andere Handelsbibliothek lösen kann, nicht mehr wahrnehmbar sein.
Damit dieser Mechanismus funktioniert, müssen Sie diese Bibliothek herunterladen. Alle komplexen und effektiven Prüfungen der Korrektheit der Handelsumgebung werden automatisch durchgeführt, ohne den Benutzer beim Schreiben der Handelslogik abzulenken.
MT4Orders (+ByPass) funktioniert nur mit HistorySelect(0, INT_MAX), so dass es nicht die aktuellen Probleme mit dem Hinzufügen von gerade gelöschten Aufträgen am Ende der History-Tabelle (+sync) verursacht .
Kaputt! Ich empfehle nicht, MT5 zu aktualisieren. Wer es versteht, dem sei erklärt, dass das bisherige Verhalten von MT5 korrekt war. Jetzt ist es das nicht mehr.
Kaputt! Ich empfehle nicht, MT5 zu aktualisieren. Wer es versteht, dem sei erklärt, dass das bisherige Verhalten von MT5 korrekt war. Jetzt ist es nicht.
Traurig.
Ich habe einen Code skizziert, wie man das Einfügen von Orders in die Historie verfolgen und in der Klasse TradesID nur bei "verschobener" Periode + nicht mehr als 100 Positionen in der Historie aktualisieren kann, d.h. mit wenig Blut.
Ich habe den Code NICHT getestet, und er ist natürlich suboptimal - nur eine Demonstration der Idee. (gelb - was wird gegenüber dem Original geändert)
Die Verfolgung von Auftragslöschungen/-änderungen ist viel schwieriger, aber auch das wird durch Ihre Bibel nicht gelöst.
Natürlich brauchen ByPASS und MT4HISTORY einen ausgefeilteren Algorithmus für eine solche Korrektur, aber nichts Kompliziertes, wie es scheint (ich habe sie noch nicht studiert).
Sie können auch TRADE_TRANSACTION_HISTORY_UPDATE und TRADE_TRANSACTION_HISTORY_DELETE Transaktionen verfolgen, wie Sie geschrieben haben:
https://www.mql5.com/ru/forum/366029/page2#comment_22442705
Wenn sie die Ticketnummer angeben und die Bestellungen in der Historie nach Ticket sortiert sind, kann die Position der Bestellung in der Historie leicht über das OrderTickets-Array verfolgt werden.
P.S. als letzter Ausweg können Sie auch HashMap hinzufügen...
Es ist traurig.
Ich habe einen Code skizziert, wie man das Einfügen von Aufträgen in die Historie verfolgen und in der Klasse TradesID nur in der "verschobenen" Periode + nicht mehr als 100 Historienpositionen aktualisieren kann, d.h. mit wenig Blut.
Ich habe den Code NICHT getestet, und er ist natürlich suboptimal - nur eine Demonstration der Idee. (gelb - was ist geändert, um Ihre ursprüngliche)
Wenn ich die Idee richtig verstehe, suchen Sie nach dem Hunderter, in dem die Verschiebung stattgefunden hat. Aber ich habe nicht verstanden, wie das neue Ticket selbst danach in diesem Hunderter ist. Vor allem, wenn es mehrere davon gibt und sie in verschiedenen Hundertern liegen.
Die Verfolgung von Auftragslöschungen/-änderungen ist viel schwieriger, aber auch das hat deine Bibel nicht gelöst.
Ich verstehe das nicht. Was genau wird nicht nachverfolgt? Ich schlage vor, mit b2958 vorerst aufzuhören.
Wenn es darum geht, die Geschichte rückwirkend zu bearbeiten - das ist es nicht wert. Lösungen werden nicht um des Nerdseins willen erstellt, sondern um zu handeln.
Natürlich benötigen ByPASS und MT4HISTORY einen ausgefeilteren Algorithmus für eine solche Korrektur, aber es scheint nichts Kompliziertes zu sein (ich habe sie noch nicht studiert).
Das Problem ist, dass je mehr reguläre Funktionen bei jedem Durchlauf aufgerufen werden, desto höher ist die Wahrscheinlichkeit von Verzögerungen. Der EA beginnt zu hängen. Mehrere Expert Advisors - noch schlimmer. Wenn es mehrere Terminals gibt, ist es ganz schlimm. Sogar das Eintreffen von OnTradeTransaction verlangsamt sich - zum Beispiel beginnt OrderSend ein Vielfaches länger zu dauern als der Ping. Zusätzlich zu der Tatsache, dass die Krücke wildes Debugging impliziert, wird sie auch Verzögerungen verursachen. Stellen Sie sich vor, dass während der Aufzählung die Historie aktualisiert wird, usw. Es wird eine große Anzahl von Fehlern geben.
Die Hauptsache ist doch, dass alles perfekt funktioniert hat. Sie haben es nur an einer Stelle kaputt gemacht und kommentieren es in keiner Weise.
ZЫ Für mich ist es ein Rätsel, warum fast niemand versteht, worum es geht.
ZЫ Es ist mir ein Rätsel, warum fast niemand versteht, worum es dabei geht.
Weil niemand versucht hat, die Arbeit mit Aufträgen im MT5 a) einfach, b) korrekt und c) schnell zu implementieren. Das schließt mich ein.
Wenn ich die Idee richtig verstanden habe, suchen Sie nach dem Hunderter, in dem die Verschiebung stattgefunden hat. Aber ich verstehe nicht, wie das neue Ticket selbst in diesem Hunderter zu finden ist. Vor allem, wenn es mehrere davon gibt und sie in verschiedenen Hundertern liegen.
Wenn es nur Einfügungen ohne Löschungen gab, dann sucht die Schleife
Schleife den Anfang des frühesten Hunderters suchen, in dem die Einfügungen stattfanden. Man braucht nicht nach dem Ticket selbst zu suchen - man muss nur alle Aufträge ab diesem Hunderter und den nächsten (neueren) durchgehen und sie in die Hashmap einfügen. Dies geschieht wie üblich in einer Schleife while(this.LastTotalOrders < Total), wobei es sich fast immer um die letzten 1-2 Hunderter handeln wird.
Es kann besser sein, den Schritt zu reduzieren - nicht 100, sondern 40 oder 20.
Falls sich der Verlauf während for ändert - etwas wird VOR dem gefundenen Hunderter eingefügt - können Sie es in die Schleife einfügen:
Aber das wird sehr selten sein.
Wenn es nur Einfügungen ohne Löschungen gibt, dann ist der Zyklus
Schleife nach dem Anfang des frühesten Hunderters, in dem die Einfügungen stattfanden. Sie brauchen nicht nach dem Ticket selbst zu suchen - Sie müssen nur alle Bestellungen ab diesem Hunderter und den nächsten (neueren) Bestellungen durchgehen und sie der Hashmap hinzufügen. Dies geschieht wie üblich in der Schleife while(this.LastTotalOrders < Total), wobei es sich fast immer um die letzten 1-2 Hunderter handeln wird.
D.h., dass das wiederholte Hinzufügen desselben Tickets zur Hashmap die Hashmap nicht verändern wird?
Ich habe Aufträge, die das achte Hundert erreichen. Im aktiven Handel ist dies ein häufiges Phänomen bei neuen Builds. In diesem Fall müssen Sie mehrere hundert Aufträge hashmapen.
D.h., dass das wiederholte Hinzufügen desselben Tickets zur Hashmap die Hashmap nicht verändern wird?
Ja, gerade ist mir aufgefallen - wenn man ein Ticket OrdersID.Add(PositionID, Ticket) wiederholt hinzufügt, dann wird in OrdersID.ValuesID[] dieses Ticket umgedreht. D.h. die Hashmap wird anschwellen.
Wir müssen irgendwie eine Prüfung durchführen. Oder ein HashSet anstelle einer Array-Struktur für VALUESID verwenden. Oder etwas ähnliches.