Wenn die Direktive #define MT4ORDERS_FASTHISTORY_OFF aktiviert ist, lässt sich das Programm nicht kompilieren - es erzeugt eine Menge Fehler.
Früher musste ich diese Direktive aktivieren, weil einige Funktionen (die hier besprochen werden), die in diesem Artikel verwendet werden, ohne sie nicht verfügbar sind. Wenn die Funktionalität immer noch eingeschränkt ist, ist es wünschenswert, dies zu korrigieren.
что такой простой код не работал корректно в MT5 со старой версией библиотеки. Было бы очень желательно указать как минимум в шапке комменатриев исходника. а поиск соответствующего выхода как раз обложен условной компиляцией на MT4ORDERS
Ich habe mich gefragt, ob es möglich ist, den Tester in der Geschwindigkeit zu schlagen, wo es keine Chance geben sollte?
Ich habe einen Expert Advisor "ohne Chancen" geschrieben - maximal auf Geschwindigkeit optimiert.
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006inputint inAmountMagics = 50; // Wie viele TCs sollen emuliert werden?// Eröffnen Sie eine Position und einen Auftrag für jeden TS. MT4-Code der Kürze halber.voidOnInit()
{
MqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick))
for (int i = 0; i < inAmountMagics; i++)
{
OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0, NULL, i);
OrderSend(_Symbol, OP_BUYLIMIT, 1, Tick.ask - 1 e4*_Point, 0, 0, 0, NULL, i);
}
}
// Sammeln Sie Informationen von den richtigen Positionen/Aufträgen. Maximal schneller MT5-Code.double CountOrders( constint Type, constint Magic )
{
double Res = 0;
if (Type <= OP_SELL)
{
for (int i = PositionsTotal() - 1; i >= 0; i--)
if (PositionGetTicket(i) && (PositionGetInteger(POSITION_TYPE) == Type) && PositionGetInteger(POSITION_MAGIC) == Magic)
Res += PositionGetDouble(POSITION_PRICE_OPEN) + PositionGetDouble(POSITION_PRICE_CURRENT) +
PositionGetDouble(POSITION_TP) + PositionGetDouble(POSITION_SL);
}
elsefor (int i = OrdersTotal(true) - 1; i >= 0; i--)
if (OrderGetTicket(i) && (OrderGetInteger(ORDER_TYPE) == Type) && OrderGetInteger(ORDER_MAGIC) == Magic)
Res += OrderGetDouble(ORDER_PRICE_OPEN) + OrderGetDouble(ORDER_PRICE_CURRENT) +
OrderGetDouble(ORDER_TP) + OrderGetDouble(ORDER_SL);
return(Res);
}
// Nummer zur Kontrolle der Korrektheit alternativer Implementierungen.double OnTesterValue = 0;
doubleOnTester() { return(OnTesterValue); }
voidOnTick()
{
// Simulieren Sie den Betrieb auf allen TCs.for (int i = 0; i < inAmountMagics; i++)
OnTesterValue += CountOrders(POSITION_TYPE_BUY, i) +
CountOrders(POSITION_TYPE_SELL, i) +
CountOrders(ORDER_TYPE_BUY_LIMIT, i) +
CountOrders(ORDER_TYPE_SELL_LIMIT, i);
}
Anhand des Codes kann man argumentieren, dass er so geschrieben wurde, dass er langsam ist. Aber der Code emuliert die Arbeit vieler "TS". Und viele TSs arbeiten genau so - zunächst einmal finden sie ihre Positionen/Orders.
OnTester result 54790620.97344553
EURCAD,M1: 192394 ticks, 1440 bars generated. Environment synchronized in 0:00:00.023. Test passed in 0:01:21.775 (including ticks preprocessing 0:00:00.016).
81 Sekunden für die Ausführung. Für einen Tag auf echten Ticks etwas sehr viel. Aber was ist schon dabei.
// 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.
Mit dem gleichen Beispiel (1 Lot geöffnet und schrittweise um 0,1, 0,2, 0,3 und 0,4 Lots geschlossen), aber mit einer anderen Visualisierung.
Es ist nicht das richtige Ticket aus der MT5 Historie
Offensichtlich wollen Sie es bekommen.
// Liste der Änderungen:// 13.03.2019// Hinzufügen: OrderTicketID() hinzugefügt - PositionID of an MT5 transaction or MT5 position, and the ticket of a pending MT4 order.
Wenn die Direktive #define MT4ORDERS_FASTHISTORY_OFF aktiviert ist, lässt sich das Programm nicht kompilieren - es erzeugt eine Menge Fehler.
Früher musste ich diese Direktive aktivieren, weil einige Funktionen (die hier besprochen werden), die in diesem Artikel verwendet werden, ohne sie nicht verfügbar sind. Wenn die Funktionalität immer noch eingeschränkt ist, ist es wünschenswert, dies zu korrigieren.
Mit der aktivierten Direktive #define MT4ORDERS_FASTHISTORY_OFF lässt sie sich nicht kompilieren - sie erzeugt eine Menge Fehler.
Dies ist ein historisches Überbleibsel, das ich nicht beseitigen kann.
MQ hat so viele Kopfschmerzen verursacht, dass es sich nur lohnt, ausgeklügelte Varianten zu verwenden.
Es sollte ein größeres Bibliotheksupdate geben, trotz des seltsamen Mangels an Fehlerberichten. Es ist noch nicht fertig.
OrderSelect(i, SELECT_BY_POS)Bei dieser Operation gibt es immer offene Positionen auf den niedrigeren Indizes und schwebende Aufträge auf den höheren Indizes.
Mit Hilfe dieser Tatsache können Sie die Suche nach den erforderlichen MT4-Aufträgen etwas beschleunigen.
Ich habe mich gefragt, ob es möglich ist, den Tester in der Geschwindigkeit zu schlagen, wo es keine Chance geben sollte?
Ich habe einen Expert Advisor "ohne Chancen" geschrieben - maximal auf Geschwindigkeit optimiert.
Anhand des Codes kann man argumentieren, dass er so geschrieben wurde, dass er langsam ist. Aber der Code emuliert die Arbeit vieler "TS". Und viele TSs arbeiten genau so - zunächst einmal finden sie ihre Positionen/Orders.
81 Sekunden für die Ausführung. Für einen Tag auf echten Ticks etwas sehr viel. Aber was ist schon dabei.81 Sekunden bis zur Fertigstellung. Für einen Tag auf echten Ticks ist das etwas viel. Aber was ist.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: Virtuell
fxsaber, 2023.03.01 20:36
Die Prüfsumme stimmt überein. Ich habe es geschafft, fast doppelt so schnell zu sein.
Nicht einfach, aber es hat funktioniert.
Ich habe einen "chancenlosen" EA geschrieben, der maximal auf Geschwindigkeit optimiert ist.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: MT4Orders
fxsaber, 2022.07.20 00:39
Mit dem gleichen Beispiel (1 Lot geöffnet und schrittweise um 0,1, 0,2, 0,3 und 0,4 Lots geschlossen), aber mit einer anderen Visualisierung.

OrderLotsOpen() im roten Rahmen oben im Bild.Hallo,
Sieht so aus, als gäbe es einen Fehler bei OrderTicket()
Es ist nicht das richtige Ticket aus der MT5 Historie
Dies ist mein Code:
Sieht aus wie ein Fehler bei OrderTicket()
Es ist nicht das richtige Ticket aus der MT5 Historie
Offensichtlich wollen Sie es bekommen.
Die Gründe sind hier ausführlich beschrieben.
Offensichtlich wollen Sie es bekommen.
Die Gründe dafür sind hier aufgeführt.
Ich danke Ihnen vielmals.
Es ist in Ordnung mit
OrderTicketID()